Each page needs a title that says what it is. The tab label is the first thing a screen reader announces and how people find an open page again.
When a page loads, a screen reader announces the title before anything else. People with many tabs open scan titles to find the right one. Magnifier users may not see the page heading at all at first. A title like "Home" or "Untitled" tells none of them where they are.
Success Criterion 2.4.2 says web pages have titles that describe topic or purpose. The title is the HTML <title> element for a web page, or the equivalent document title for other formats such as a PDF. In a single-page application, the title should change with the view.
A document or application name can serve as a title, and it is a good idea to show where the page sits in a larger set, though that is advisory rather than required.
A permit portal that has a unique title on every step also helps the many people who bookmark or share pages with a caseworker.
Put the unique information first, then the site name. For paged results, say which page.
<title>Court Records</title><title>Case search results for "Rivera", page 2 of 7 | County Court</title>Put the unique part first and the site name last: a long welcome message in front hides the useful words from anyone who hears only the start of the title. That ordering is best practice, not a requirement. Generating titles from the layout also means no page ships without one:
<title>City of Riverton</title> <!-- hard-coded in the layout --><!-- layout.html -->
<title>{% block title %}{% endblock %} | City of Riverton</title>
<!-- permit.html -->
{% block title %}Apply for a building permit{% endblock %}When the view changes without a page load, the title has to change too.
function CampsiteReservation() {
return <h1>Reserve a campsite</h1>; // title still says "State Parks"
}function CampsiteReservation() {
useEffect(() => {
document.title = "Reserve a campsite | State Parks";
}, []);
return <h1>Reserve a campsite</h1>;
}For apps, the title of each screen plays the same role. SwiftUI:
NavigationStack {
PayWaterBillForm()
}NavigationStack {
PayWaterBillForm()
.navigationTitle("Pay water bill")
}Jetpack Compose:
Scaffold { padding ->
PayWaterBillForm(Modifier.padding(padding))
}Scaffold(
topBar = { TopAppBar(title = { Text("Pay water bill") }) }
) { padding ->
PayWaterBillForm(Modifier.padding(padding))
}A crawler can list the titles, but only a person can say whether they describe the page, so use both.
Common mistakes: one title for the whole site, titles from file names, titles that never change in an app, and keyword stuffing.
PDF forms need a document title too, and a wrong one is easy to miss. Review titles on forms and notices as part of every content update.
Ship it when:
See documents and PDFs for guidance on titles in files.