What I noticed
I was using GitHub Tracker and noticed that no matter which page you navigate to β Home, Tracker, About β the browser tab always shows the same title "GitHub Tracker". It never updates to reflect the current page.
This is a bug because:
Users with multiple tabs open can't tell which tab is which
Browser history shows the same title for every page
It hurts SEO since search engines use page titles to understand content
What I'm proposing
Update the page <title> dynamically on every route change so each page has its own meaningful title.
ποΈ How it would work
βββββββββββββββββββββββββββββββββββββββ
β User navigates to /tracker β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β React Router detects route change β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β useEffect updates document.title β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Tab shows "Tracker β GitHub Tracker"β
βββββββββββββββββββββββββββββββββββββββ
π οΈ Tech Implementation Plan
Option 1 β Simple useEffect per page:
// Add this inside each page component
useEffect(() => {
document.title = 'Tracker β GitHub Tracker';
}, []);
Option 2 β Custom hook (cleaner, recommended):
// src/hooks/usePageTitle.ts
const usePageTitle = (title: string) => {
useEffect(() => {
document.title = ${title} β GitHub Tracker;
return () => {
document.title = 'GitHub Tracker';
};
}, [title]);
};
// Usage in any page component:
usePageTitle('Tracker');
usePageTitle('About');
usePageTitle('Home');
What I noticed
I was using GitHub Tracker and noticed that no matter which page you navigate to β Home, Tracker, About β the browser tab always shows the same title "GitHub Tracker". It never updates to reflect the current page.
This is a bug because:
Users with multiple tabs open can't tell which tab is which
Browser history shows the same title for every page
It hurts SEO since search engines use page titles to understand content
What I'm proposing
Update the page <title> dynamically on every route change so each page has its own meaningful title.
ποΈ How it would work
βββββββββββββββββββββββββββββββββββββββ
β User navigates to /tracker β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β React Router detects route change β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β useEffect updates document.title β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Tab shows "Tracker β GitHub Tracker"β
βββββββββββββββββββββββββββββββββββββββ
π οΈ Tech Implementation Plan
Option 1 β Simple useEffect per page:
// Add this inside each page component
useEffect(() => {
document.title = 'Tracker β GitHub Tracker';
}, []);
Option 2 β Custom hook (cleaner, recommended):
// src/hooks/usePageTitle.ts
const usePageTitle = (title: string) => {
useEffect(() => {
document.title =
${title} β GitHub Tracker;return () => {
document.title = 'GitHub Tracker';
};
}, [title]);
};
// Usage in any page component:
usePageTitle('Tracker');
usePageTitle('About');
usePageTitle('Home');