Skip to content
WCAG 2.4.2 Page Titled

How to fix: Every page needs a title

A unique, descriptive <title> lets people tell browser tabs and history entries apart, and is the first thing a screen reader announces.

The fix

Add a non-empty, descriptive <title> in the page <head>.

Who this affects

The announcement on load is the only automatic confirmation a screen-reader user gets that a link or a form submission went where they expected; with "Untitled" or "React App" in that slot they have to start reading the page to find out. A single-page app has no load to announce on a route change, so nothing is read out at all, and a title left at its boot value still names the view the user has already left, in the tab label, in the history entry and in the read-title command (NVDA+T, JAWS Insert+T). People with limited short-term memory or a reading disability lose the cue they use to re-orient when they return to a tab they parked twenty minutes earlier.

Before and after

Fails
<head></head>
Passes
<head><title>Checkout · Acme Store</title></head>

Where this usually comes from

  • A single-page app sets the title once at boot and never updates it on route change.
  • A build-tool or starter default was left in place, such as "React App", "Vite + Vue" or the CMS theme name.
  • The title is rendered from a data field that is empty for some records, producing a title element containing only whitespace, which the rule treats as missing.
  • A template inheritance mistake leaves the title block defined in a layout the rendered page does not extend, so no title tag reaches the head.
  • The title is built from the site name alone, so every page in the site announces the same string and the page-specific half is absent.

Checking it yourself

Open five or six pages of the site in tabs and read the tab labels on their own; if you cannot tell which is which, the titles are failing even where a scanner passes them. For a single-page app, click through the routes watching the tab label change, then open browser history (Ctrl+H in Chrome and Firefox) and check the entries are distinguishable. A scanner only checks that a non-empty title element exists, so uniqueness and usefulness are yours to judge by hand.

A scanner finds this one automatically. What it cannot judge, and how the score is built, is on how we test.

Related fixes

Check your site for this issue

Scan any page free against WCAG 2.2 AA and get every automatically detected issue with its fix.

Scanning a page needs no account. The checks run on axe-core.

← All fix guides