Several pages share the same title
multiple of the pages we crawled serve an identical `<title>`.
Why it matters
multiple of the pages we crawled serve an identical `<title>`. The title is the strongest on-page signal of what a page is about, and the headline of every search result, so when several pages claim the same thing a search engine cannot tell them apart. In practice it picks one to rank and treats the rest as near duplicates, and it frequently rewrites the title in the result to something it inferred from the body instead — so the page competes for the wrong query and displays copy nobody wrote. This is almost always one layout supplying a default that no route overrides. Give each page a title describing that page, most specific first, with the brand last: "Pricing — ShipReady", not "ShipReady — Production readiness for AI-built apps" on all of them. The affected pages are listed below.
How ShipReady detects it
The same title or description served by two or more distinct pages. SITE-scoped because that is the only scope that can see a second page, and it issues no requests of its own — every page it reads came from the crawl. Each finding is emitted once per affected page and collapsed by merge_key, so the report says "found on 6 pages" and lists them, rather than repeating one problem six times. See scanner/aggregate.py.
Detection is deterministic. ShipReady reports this only when it observes the condition directly, and prefers to miss a real problem over inventing one. Rule version 1.0.0.
How to fix it
This is the prompt ShipReady puts in your report — written to be pasted straight into Cursor, Claude Code, or whichever assistant built the app.
Several pages on your site serve the same `<title>`. Give each page a title that describes that page.
FIND WHERE THE DEFAULT COMES FROM. This is almost always one layout supplying a title that no route overrides — the root layout in Next.js, `index.html` in a Vite or CRA app, `App.vue` in Nuxt. Fix it at the source rather than page by page, or the next route somebody adds inherits the same default.
IN NEXT.JS APP ROUTER, export `metadata` from each page and use a template in the root layout so the brand is appended once:
// app/layout.tsx
export const metadata = { title: { template: '%s — ShipReady', default: 'ShipReady' } }
// app/pricing/page.tsx
export const metadata = { title: 'Pricing' }
For a client-rendered app without a metadata API, set `document.title` per route, or prerender the pages so the title is in the HTML — a title only set by JavaScript after load is often not the one that gets indexed.
WRITE THEM MOST SPECIFIC FIRST. "Pricing — ShipReady" beats "ShipReady — Pricing": the beginning is what shows in a narrow search result and a browser tab. Keep them under about 60 characters, make each one unique, and describe the page rather than the company.
DO NOT SOLVE IT BY DEDUPING WITH CANONICALS. These are genuinely different pages; pointing them at one canonical would remove the others from search entirely, which is a bigger loss than the duplicate titles.Frequently asked questions
- What does "Several pages share the same title" mean?
- multiple of the pages we crawled serve an identical `<title>`.
- How serious is it?
- ShipReady rates this medium. Fix soon. Meaningfully weakens a defence or degrades how the site works.
- How do I fix it?
- Paste the fix prompt on this page into Cursor, Claude Code or your AI editor. It is the same prompt ShipReady puts in your report.
- Can I check my own site?
- Yes — ShipReady scans up to ten pages of any public site for free and reports this alongside every other check. The free report lists every issue it finds and shows full evidence and a fix prompt for the critical and high-severity ones; medium and low findings are counted and unlock on Pro.
Related checks
- Several pages share the same meta descriptionlow
- Your robots.txt tells search engines to stay out of the whole sitehigh
- Your site tells search engines not to index ithigh
- AI assistants are blocked from reading your sitemedium
- Canonical URL points to a different domainmedium
- Page declares more than one canonical URLmedium
Run this check on your site
ShipReady checks this and 193 other things across up to ten pages of your site, with an AI-ready fix for each. Free, no signup.