Your page sets <title>Best Wireless Headphones 2026 | Acme Reviews</title> but the visible <h1> reads “We tested 47 pairs of headphones so you don’t have to.” Google sees two competing signals about what the page is about and rewrites your SERP title — usually to your H1 or a clipped fragment of body copy. Click-through drops.
Fastest fix: make the <title> and <h1> describe the same thing using the same head words (the <title> may add a short clarifier or brand suffix), confirm there is exactly one <h1> whose text ships in the server HTML, then re-request indexing for the affected URLs. Rewrites typically stop within 2-3 crawls.
This matters more than it used to. Google rewrote about 76% of title tags it sampled in Q1 2025, and in modified titles it removed the brand name roughly 63% of the time and dropped about 2.71 words on average (SerpClix study data, still the most-cited figure as of June 2026). Titles Google left alone clustered in the 30-60 character range. So a clean, aligned, sub-60-character title is your best defense.
Google’s own Influencing title links doc lists what it pulls from when building the SERP title: the <title> element, the main visual title on the page, <h1> and other headings, og:title, large/prominent styled text, anchor text in links pointing to the page, and WebSite structured data. When these disagree, Google picks for itself — and it almost always trusts the visible H1 over the <title> because the H1 reflects what users actually see.
Which bucket are you in
Google’s doc names six conditions that trigger a rewrite. Match your symptom to the cause and jump to the fix.
| Symptom you see in the SERP | Likely cause | Go to |
|---|---|---|
| Google shows your H1 instead of your title | <title> and <h1> disagree; Google trusts H1 | Steps 2-3 |
| Brand suffix dropped, rest kept | Title too long; Google trims ” | Brand” | Step 4 |
| SERP title is a sentence from your body copy | No clear main title / H1 missing or empty | Steps 5-6 |
| Same generic title across many pages | Micro-boilerplate (templated title) | Step 2 |
Title shows but H1 area is blank in curl | H1 set by JavaScript after first render | Step 6 |
| SERP title in a different language than the page | Writing-system / language mismatch | Step 6 note |
Common causes
Ordered by frequency.
1. CMS title field and H1 source are different fields
The CMS has a “SEO Title” and a separate “Headline” field. Editors fill in “Headline” but the template uses “SEO Title” for <title> and “Headline” for <h1>. They drift apart from day one. This also produces Google’s “micro-boilerplate” trigger when the “SEO Title” field is left to a templated default like “Article | Acme.”
How to spot it: Check three articles. If <title> and <h1> rarely match, the field design is the root cause.
2. Template appends a brand suffix only to <title>
<title> becomes “How to Bake Sourdough | Acme Cooking” while <h1> stays “How to Bake Sourdough.” Minor mismatch, but if the full string runs long Google strips the brand — and brand removal is the single most common edit Google makes (about 63% of rewritten titles, per the same 2025 study).
How to spot it: <title> ends with ” | Brand” or ” - Brand”; <h1> does not, and the rewritten SERP title has no brand.
3. H1 is creative / clickbait, <title> is SEO-optimized
The editorial team writes a punchy H1 (“Why my sourdough finally stopped collapsing”). The SEO team rewrites the title tag to be keyword-dense (“Sourdough Bread Recipe — Step-by-Step Guide”). Both are intentional and opposed. This is Google’s “inaccurate title” trigger: the <title> reads like a category label that doesn’t match the page’s real, visible topic.
How to spot it: H1 reads like a blog headline, <title> reads like a category page. Both can be good copy independently; together they confuse search engines.
4. Multiple H1s on the page
Page has <h1>Category Name</h1> in a hero region and <h1>Article Title</h1> in the main content. This is Google’s literal “no clear main title” trigger — multiple headings of equal prominence, so Google cannot tell which is the page’s H1.
How to spot it: run document.querySelectorAll('h1').length in DevTools; anything greater than 1 is a problem.
5. H1 is an image with no alt text
<h1><img src="/heading.svg"></h1> — the visible heading is an SVG with no alt. Google has no text for the H1 at all and falls back to <title> and body text, which can then be rewritten if the title lacks context.
How to spot it: View source, search for <h1> and confirm it contains no text content other than empty <img> tags.
6. Dynamic H1 set by JavaScript after first render
The HTML response has <h1>Loading...</h1> and JS replaces it post-mount. Googlebot renders most pages, but it batches rendering and may index the pre-render HTML first; a placeholder H1 looks broken in the meantime.
How to spot it: curl the page and look at <h1>. If it says “Loading…” or is empty, the dynamic title pattern is at fault. See also Dynamic Title Set by JavaScript Not Indexed.
7. Title and page in different writing systems
The <title> is in English but the page body and H1 are in another language (or vice versa). Google flags this as a writing-system mismatch and substitutes a title that matches the page’s primary language.
How to spot it: compare the script of the <title> against the dominant script of the rendered body text.
Before you start
- Pull a list of 10-20 pages where Google rewrote the title in the last 30 days (Search Console, Performance report, filter by impressions, then check the rendered SERP for those URLs).
- Note whether the rewrites are consistent (same pattern every time) or random.
- Capture the current
<title>and<h1>for each affected URL. - Decide your policy: should H1 and
<title>match exactly, or should<title>extend H1 with a brand suffix?
Information to collect
- The CMS field names that drive
<title>and<h1>. - The template code that emits each, plus your
og:titlesource (Google reads it too). - Whether your site has a global brand-suffix transform on
<title>. - Any pages with multiple
<h1>elements (run a crawl with structural extraction). - Server-rendered HTML for affected URLs (do not rely on DevTools, which shows post-hydration state).
Step-by-step fix
Ordered cheapest first.
Step 1: Audit current state
for url in $(cat affected-urls.txt); do
html=$(curl -s "$url")
title=$(echo "$html" | grep -oE '<title>[^<]+</title>' | head -1)
h1=$(echo "$html" | grep -oE '<h1[^>]*>[^<]+</h1>' | head -1)
echo "$url | $title | $h1"
done
Pipe the output into a spreadsheet so you can quickly see where mismatches concentrate. Because Googlebot also reads og:title, grep for it too and confirm it agrees with the <title>.
Step 2: Unify the CMS field
Collapse “SEO Title” and “Headline” into a single source field for content where they should always agree:
// content schema
title: z.string().min(20).max(60), // single source, kept under the 60-char sweet spot
// template
<title>{article.title}{brandSuffix(article.section)}</title>
<h1>{article.title}</h1>
For content types where they should differ intentionally (e.g., listicles), keep both fields but enforce a similarity check in CI (Step 3).
Step 3: Add a similarity check in CI
function tokenJaccard(a: string, b: string): number {
const toks = (s: string) => new Set(s.toLowerCase().match(/\w+/g) ?? []);
const A = toks(a), B = toks(b);
const inter = [...A].filter(x => B.has(x)).length;
return inter / (A.size + B.size - inter);
}
for (const article of allArticles) {
const score = tokenJaccard(article.title, article.h1);
if (score < 0.5) {
console.warn(`Low similarity: ${article.slug}: ${score.toFixed(2)}`);
}
}
Fail the build (or warn) when title and H1 share less than half their content words. A score of 1.0 means identical word sets; “Sourdough Bread Recipe” vs “Sourdough Bread Recipe — Step-by-Step Guide” scores about 0.6, which is healthy.
Step 4: Strip the brand suffix from <title> for long titles
Google trims the brand first when a title runs long, so do it yourself before Google does. If <title> exceeds ~60 characters with the brand suffix, drop the suffix:
const FULL = `${article.title} | ${BRAND}`;
const titleTag = FULL.length > 60 ? article.title : FULL;
Or unify by keeping the brand in the <title> only and out of the <h1>:
<title>{article.title} | {BRAND}</title>
<h1>{article.title}</h1> // brand omitted from H1, kept in template chrome only
Either policy is fine — just be consistent.
Step 5: Enforce one <h1> per page
This directly clears Google’s “no clear main title” trigger. In your template:
{article && <h1>{article.title}</h1>}
{!article && pageType === 'category' && <h1>{categoryName}</h1>}
{/* no h1 in hero block — switch to h2 */}
Crawl the site post-fix and assert exactly one <h1> per page. Note that HTML5 allows multiple <h1> elements as valid markup, but for predictable SERP titles you still want one dominant heading.
Step 6: Render H1 text server-side, always
Never set H1 from JavaScript after first render. Ship the final H1 text in the HTML response, and keep your <title> and og:title server-rendered too. If a heading is shown as an image, use a real <h1> with text and style it with CSS — do not rely on alt alone. For multilingual sites, make sure the <title> is in the same language as the page body to avoid Google’s writing-system-mismatch rewrite.
Step 7: Re-request indexing on the fixed URLs
Send your top URLs through URL Inspection, then “Request indexing.” As of June 2026, Search Console caps this at roughly 10-12 URLs per day per property, and the request is a hint, not a command — Google recrawls on its own schedule. For larger batches, resubmit the affected sitemap and let normal crawling pick up the change. Track SERP titles weekly; rewrites typically stop within 2-3 crawls of the fix.
How to confirm it’s fixed
curlany affected URL and confirm the final<h1>text appears directly in the response (not “Loading…”).- Title and H1 for sampled URLs match or are clearly the same idea;
og:titleagrees too. - No URL has more than one
<h1>(re-run the DevTools count). - In URL Inspection, the rendered HTML shows your intended title and a single H1.
- Over the following weeks, Search Console’s Performance report shows the previously-rewritten URLs recovering impressions/CTR, and a spot-check of the live SERP shows your title (not a body-copy fragment).
Long-term prevention
- Pick one editorial policy: either H1 and
<title>match, or<title>is H1 plus a controlled, short suffix. Document it. - Use a single source field for the headline in the CMS; derive
<title>and<h1>(andog:title) from it. - Keep titles in the 30-60 character range — the band Google leaves alone most often.
- Add CI assertions for title/H1 similarity and a single H1.
- Avoid dynamic H1 patterns; if you must, ship the final text server-side.
- Audit Google-rewrite incidents monthly to catch regressions before they affect rankings.
Common pitfalls
- Adding a session ID or A/B variant to
<title>only. Editors do not see it; Google does. - Treating “Google rewrote my title” as random and giving up. It is highly deterministic — the trigger is usually one of the six causes above.
- Setting
<h1>invisible via CSSdisplay:nonethinking Google ignores hidden text. Google still parses it as the H1 and the cloaking pattern is risky. - Wrapping the heading in a
<div>withrole="heading"instead of an actual<h1>element. Use the real tag. - Keeping a five-word H1 and a sixteen-word
<title>. The length and content gap is itself a mismatch signal. - Forgetting
og:title. If it contradicts your<title>, you have re-created the same mismatch one layer down.
FAQ
Q: Should <title> and <h1> be identical?
They can differ but should share the bulk of meaningful words. A common pattern: H1 = “Sourdough Bread Recipe,” <title> = “Sourdough Bread Recipe — Step-by-Step Guide | Acme.” The added clarifier is fine; a completely unrelated <title> is what gets rewritten.
Q: Google is showing my H1 as the title instead of my <title>. Why?
Because Google decided the H1 describes the page better. When the two disagree, Google almost always trusts the visible heading. Align the <title> to the H1’s head words and it will usually go back to using your <title>.
Q: Can I have zero H1?
It is technically valid HTML, but Google uses the H1 as one of several signals for what the page is about. Zero H1 forces a fallback to <title>, og:title, and body text, which makes rewrites more likely.
Q: Does Google always rewrite mismatched titles?
No, but it is common — roughly three in four sampled titles were rewritten in 2025. Mismatch with H1 is one of six named triggers (half-empty, obsolete, inaccurate, micro-boilerplate, no clear main title, language mismatch). Fixing the mismatch lowers the odds; it does not guarantee Google keeps your title forever.
Q: How long until my real title comes back after I fix it?
Usually within 2-3 crawls of the changed page. You can nudge it with URL Inspection’s “Request indexing” (capped around 10-12 URLs/day per property as of June 2026), but it is a hint — Google recrawls on its own cadence.
Q: My H1 is a logo image. Is that bad for SEO?
Yes — Google needs text. Use a real <h1> with text content, then style it with CSS to show the logo, or move the logo to a sibling element and keep the H1 textual.