Pages without titles leave users guessing. Screen reader users hear "untitled document" and cannot identify what page they landed on.
The <title> element provides the page's name that appears in browser tabs, bookmarks, and search results. More importantly, screen readers announce the title when users arrive at a page, giving immediate context about where they are.
Without a title, users cannot distinguish between browser tabs, search results are meaningless, and screen reader users have no indication of the page content until they start exploring.
<title>console.log('Title:', document.title || 'MISSING')
<title> within <head>Add <title> inside <head> on every page:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Product Catalog - Acme Store</title>
</head>
<body>
...
</body>
</html>
Each page needs a unique, descriptive title:
<!-- Bad: Generic title on all pages -->
<title>Acme Store</title>
<!-- Good: Specific to each page -->
<title>Running Shoes - Acme Store</title>
<title>Checkout - Acme Store</title>
<title>Order Confirmation #12345 - Acme Store</title>
Pattern: Page-specific content - Site name
Screen readers may truncate long titles. Put the most important information first:
<!-- Bad: Site name first -->
<title>Acme Store | Running Shoes | Men's Athletic Footwear</title>
<!-- Good: Specific content first -->
<title>Men's Running Shoes - Athletic Footwear - Acme Store</title>
useHead composable or useSeoMeta:<script setup>
useHead({
title: 'Product Catalog'
})
// Or with template
useSeoMeta({
title: 'Product Catalog - Acme Store',
ogTitle: 'Product Catalog - Acme Store'
})
</script>
<script setup>
const product = await useAsyncData('product', () => fetchProduct())
useHead({
title: () => `${product.value?.name} - Acme Store`
})
</script>
nuxt.config.ts:export default defineNuxtConfig({
app: {
head: {
titleTemplate: '%s - Acme Store'
}
}
})
// app/products/page.tsx
export const metadata = {
title: 'Product Catalog - Acme Store'
}
// Dynamic
export async function generateMetadata({ params }) {
const product = await getProduct(params.id)
return { title: `${product.name} - Acme Store` }
}
import { Helmet } from 'react-helmet'
function ProductPage({ product }) {
return (
<>
<Helmet>
<title>
{product.name}
{' '}
- Acme Store
</title>
</Helmet>
<main>...</main>
</>
)
}
<title> element" audit should passconst title = document.title
if (!title || title.trim() === '') {
console.error('Page title is missing or empty')
}
else {
console.log('Title:', title)
}
<title></title> passes the "exists" check but fails accessibility. The title must contain text.<title>Home</title> on every page makes navigation impossible. Each page needs a unique title.<title>Tom & Jerry</title>Document title issues often appear alongside:
Missing titles often hide in error pages, dynamically generated pages, or legacy sections. Unlighthouse scans your entire site and identifies every page without a proper title, catching issues that manual testing misses.