SEO Title Tags: Why Google Cuts Off or Rewrites Your Title
You search for your own page and the title is wrong. Sometimes it ends in ... halfway through a word. Sometimes Google shows a title you never wrote. Sometimes it still shows the old one, weeks after you changed it.
All three have the same few causes, and most are fixable in a few minutes. This guide covers how long an SEO title should be, why Google cuts titles off, why it replaces them, how to write one it will leave alone, and where to set it on plain HTML, WordPress, Shopify, React and Next.js.
I learned most of this the practical way. When I audited a new 22 page blog before launch, the page titles turned up on both sides of the problem: the static pages had titles of 16 to 26 characters, and some article pages came to 65. The full audit is in my Next.js SEO audit checklist. This post goes deeper on the first item.
The short answers
- How long should an SEO title be? About 50 to 60 characters. Google measures by width, roughly 600 pixels on desktop, so treat the character count as an estimate.
- Why is my title cut off? It is wider than the space Google gives it. Google ends it with
.... - Why does Google show a different title? Its systems decided your title did not describe the page well, usually because it is too long, vague, repeated across pages, stuffed with keywords or different from the main heading.
- Why does Google still show my old title? It has not crawled the page since you changed it. You can ask it to, in Search Console.
Title tag, title link and H1: three different things
It helps to separate three terms that are often mixed up:
| Term | What it is | Who controls it |
|---|---|---|
| Title tag | The <title> element in your page's HTML. Shown in the browser tab. |
You |
| Title link | The clickable headline in Google's results. | Google, usually based on your title tag |
| H1 | The main visible heading on the page. | You |
"SEO title" and "meta title" are other names for the title tag. In WordPress plugins like Yoast and Rank Math, the "SEO title" field is what ends up in the <title> element.
So strictly speaking, Google never changes your title tag. The HTML stays exactly as you wrote it. What Google changes is the title link it shows for your page, and it builds that from your title tag most of the time.
How long should an SEO title be?
Google does not publish a limit. Its own documentation says a title can be any length, and that the title link is cut off as needed to fit the width of the device.
The cut-off is by pixels, not characters. On desktop it falls at roughly 600 pixels. Different tools use slightly different figures, usually between 550 and 600, but they all land on about 50 to 60 characters of normal text.
Characters are only an estimate because letters differ in width. W and M are several times wider than i and l. A 58 character title full of capitals can be cut, while a 64 character title of narrow lowercase letters fits. On phones the results are narrower, but titles can run onto a second line, so the cut-off point is different again.
Here is what usually happens at each length:
| Length | What usually happens |
|---|---|
| Under 30 characters | Shown in full, but wastes the line, and short vague titles are more likely to be replaced |
| 30 to 50 | Fine, if it says what the page is |
| 50 to 60 | Uses the space well and is rarely cut |
| Over 60 | Often ends in ... on desktop |
Two practical rules follow from this:
- Put the important words in the first 40 or so characters. If the end is cut, the part that matters survives.
- Do not pad a title to reach 50. A clear 42 character title beats a 58 character one stuffed with filler.
Does a cut-off title hurt my ranking?
Not directly. Google reads the whole <title> element, cut off or not. What suffers is the click. A title that stops at "How to Fix Your..." gives the searcher less reason to choose you over the result above.
That is the real job of a title: once you are in the results, it is the main thing that decides whether anyone clicks.
Why your title is cut off, and how to fix it
If your title ends in ..., it is wider than the space. The fixes, in the order I would try them:
- Drop the site name. Google usually shows your site name on its own, above the title link, taken from your home page and
WebSitestructured data. Repeating it at the end of every title costs 10 to 20 characters for little gain. - Cut filler words. "The Complete and Ultimate Guide to" adds width and no meaning.
- Remove repeated keywords. Say each idea once.
- Use a shorter separator.
-and|are both fine and both short. Avoid long separators like::. - Move the detail to the meta description. The title names the page. The description below it has room to explain.
Here are some real-world style rewrites:
| Page type | Before | After |
|---|---|---|
| Blog post | The Complete Ultimate Guide to Learning How to Bake Sourdough Bread at Home for Beginners (89) | How to Bake Sourdough at Home: A Beginner's Guide (49) |
| Product | Buy Running Shoes Online - Best Running Shoes - Men's Running Shoes - ShoeShop (78) | Men's Lightweight Running Shoes for Road and Track (50) |
| Local business | Home (4) | Dentist in Pune - Family and Emergency Dental Care (50) |
| Online tool | Tool (4) | Free Word Counter - Count Words and Characters Online (53) |
| Category page | Shoes - ShoeShop (16) | Women's Shoes - Sneakers, Sandals, Heels and Boots (50) |
| Contact page | Contact - Blog Wish (19) | Contact Blog Wish - Corrections, Story Ideas and Questions (58) |
The numbers are character counts. Notice that the "after" titles lead with what the page is about, and that only one of them still carries the site name.
Why Google shows a different title for your page
Since 2021 Google has been more willing to write its own title link when it thinks yours does not describe the page. It says it uses your <title> element most of the time, and builds a replacement from other text when it does not:
- the main visible title on the page, usually the H1
- other headings
- the
og:titlemeta tag - other large, prominent text on the page
- the text of links on your site and other sites that point to the page
Google's documentation lists the usual triggers. In plain terms:
| Problem | Example | Fix |
|---|---|---|
| Empty or nearly empty | Home, Untitled, Page |
Write a title that names the page |
| Boilerplate | Every page is Blog Wish - Article, or only one word changes |
Make each title specific to its page |
| Keyword stuffing | Shoes, Cheap Shoes, Best Shoes, Buy Shoes Online |
One natural phrase per idea |
| Out of date | Best Laptops for 2023 on a page updated for this year |
Update the year, or leave it out |
| Does not match the page | The title says "pricing" and the page is a feature list | Make the title and H1 describe the same thing |
| Wrong language | An English title on a Hindi page | Write the title in the page's main language |
| Too long | 90 characters of everything | Cut to the main idea |
Google also adds things. A common one is adding your brand name to a title that does not have it, or removing it from one that does.
You cannot switch rewriting off. What you can do is give Google nothing to fix: a clear, specific title that agrees with your H1 and your og:title.
Check what Google actually sees
Before rewriting anything, make sure the title you think you have is the one on the page. Plugins, themes and scripts disagree more often than you would expect.
- View the source. Open the page, press
Ctrl+U(orCmd+Option+Uon a Mac), and search for<title. That is what a crawler gets first. - Count the title tags. There should be exactly one. Two SEO plugins, or a theme plus a plugin, can each print their own.
- Check for JavaScript titles. If the source shows a generic title and the browser tab shows the right one, a script is setting it after the page loads. Google can usually render that, but a title in the HTML is safer.
- Use URL Inspection. In Google Search Console, paste the URL into the inspection bar, then choose "Test live URL" and "View tested page" to see the HTML Google gets.
Why Google still shows your old title
If you changed a title and Google still shows the old one, the usual reason is simply that Google has not crawled the page since. Popular pages are crawled often. Deep, quiet pages can wait days or weeks.
To speed it up:
- Confirm the new title is in the page source (see above). Clear your site's cache or CDN cache if you use one.
- In Search Console, inspect the URL and click Request indexing.
- Give it a few days. There is no way to force an instant update.
If weeks pass and the new title is in the source but Google shows something else, it is probably not an old title. Google is rewriting it, and the section above applies.
How to write an SEO title Google will keep
A simple pattern covers most pages:
Main topic + what the page gives + (site name, if there is room)
Then check it against this list:
- Lead with the topic people search for. "Sourdough Bread Recipe" before "My Grandmother's Favourite".
- Make it specific. Numbers, places and audiences help: "for Beginners", "in Pune", "7 Fixes".
- Make it match the page. If the page delivers a checklist, say checklist. Your H1 can be worded differently, but it should promise the same thing.
- Make it unique. No two pages on your site should share a title. Page 2 of a category needs "Page 2" in its title.
- Write for a person. If it reads like a list of keywords, Google treats it like one.
- Use a year only if you will update it. A stale year is one of the listed reasons for a rewrite.
How to set the title on your site
Plain HTML
The title goes in the <head>:
<head>
<title>How to Bake Sourdough at Home: A Beginner's Guide</title>
</head>
WordPress
With Yoast SEO or Rank Math, edit the post and look for the "SEO title" field in the plugin's panel. Both use variables for the default pattern, for example %%title%% %%sep%% %%sitename%% in Yoast and %title% %sep% %sitename% in Rank Math. If your long post titles keep getting cut, remove %sitename% from the default for posts, or override the title on the posts that need it.
Run only one SEO plugin. Two will often print two title tags.
Shopify
Open a product, collection or page in the admin and scroll to the search engine listing section. Edit it to set a page title separate from the product name. Without it, Shopify uses the product name.
React
A single page React app often has one title in index.html for every route, which is the boilerplate problem above. React 19 lets you render a <title> inside any component and moves it into the head for you. In older versions, a library such as react-helmet-async does the same. Either way, the title is set by JavaScript, so a framework that renders HTML on the server is the safer choice when search matters.
Next.js (App Router)
Next.js builds the title from the metadata object or the generateMetadata function in each layout.js and page.js. A template in the root layout adds the site name:
// app/layout.js
export const metadata = {
title: {
default: 'Blog Wish - Film, Games and Technology News',
template: '%s - Blog Wish',
},
}
With that in place, app/contact/page.js setting title: 'Contact' ends up as Contact - Blog Wish. Three details catch people out:
- The template applies to child segments, not to the segment where it is defined. The home page,
app/page.js, sits in the same segment as the root layout, so its title is not wrapped. Write the full title there. - When you define
template, you must also definedefault. - A template in
page.jshas no effect. A page is always the last segment.
The template is a problem when a headline is already long. A 53 character article title plus - Blog Wish came to 65 on my blog. title.absolute skips the template, and a small helper picks whichever version fits:
const RANGE = { min: 50, max: 60 }
const distance = (length) =>
Math.max(RANGE.min - length, length - RANGE.max, 0)
export const fitTitle = (candidates) =>
candidates
.flatMap((title) => [`${title} - ${SITE_NAME}`, title])
.reduce((best, title) =>
distance(title.length) < distance(best.length) ? title : best,
)
// app/blog/[slug]/page.js
export const generateMetadata = async ({ params }) => {
const { slug } = await params
const article = await getArticle(slug)
return {
title: { absolute: fitTitle([article.title]) },
description: article.excerpt,
}
}
The result must go in title.absolute, because fitTitle already decided whether to add the site name. As a plain string, the template would add it a second time. In Next.js 15 and later params is a promise, hence the await.
For pages built from data, such as tags, pass several candidates from long to short and let the helper choose:
title: {
absolute: fitTitle([
`${tag.name} - Latest Articles, News, Reviews and Guides`,
`${tag.name} - Latest Articles, News and Reviews`,
`${tag.name} - Articles, News and Reviews`,
]),
},
Check every title on your site at once
Checking a few pages by hand is fine. For a whole site, a short script is quicker. This one works on any site with a sitemap, whatever it is built with. It needs Node.js 18 or later, fetches each page one at a time, and lists titles that are missing, short, long or duplicated:
// check-titles.mjs
// Usage: node check-titles.mjs https://example.com
const site = process.argv[2]
const sitemap = await (await fetch(`${site}/sitemap.xml`)).text()
const urls = [...sitemap.matchAll(/<loc>(.*?)<\/loc>/g)].map((m) => m[1])
const decode = (text) =>
text
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'|'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
const seen = new Map()
for (const url of urls) {
const html = await (await fetch(url)).text()
const titles = [...html.matchAll(/<title[^>]*>([^<]*)<\/title>/gi)]
const title = titles[0] ? decode(titles[0][1].trim()) : ''
const length = title.length
const problems = []
if (!title) problems.push('missing')
else if (length < 30) problems.push('short')
else if (length > 60) problems.push('long')
if (titles.length > 1) problems.push(`${titles.length} title tags`)
if (title && seen.has(title)) problems.push(`same as ${seen.get(title)}`)
seen.set(title, url)
if (problems.length) console.log(`${length}\t${problems.join(', ')}\t${url}\t${title}`)
}
It fetches pages one after another on purpose. Asking a small server for many pages at once makes them queue, which once convinced me every page on my site was slow when none were.
If your sitemap is an index that points to other sitemaps, run the script on each of those instead.
Then find the titles worth rewriting
A script finds broken titles. Search Console finds the ones costing you clicks. Open Performance, show Impressions, CTR and Average position, and switch to the Pages tab. Pages with many impressions and a low click-through rate for their position are the best candidates for a better title. Change one, wait a few weeks, and compare.
Questions people ask
What happens if my page title is over 60 characters? Nothing breaks. Google may cut it off on desktop, and a very long title is more likely to be rewritten. The full title still counts for your page.
What should my SEO title be? The main topic of the page, said the way people search for it, plus what makes your page worth clicking. Then trim it to about 60 characters.
Should I use a pipe or a hyphen as the separator? Either. Neither affects ranking. Pick one and use it across the site.
Should my brand name be in the title? On the home page, yes. On other pages, add it when there is room. Google shows your site name separately in most results.
Should the title be the same as the H1? It does not have to be identical, but both should describe the same thing. A large difference between them is a common reason for a rewrite.
What is the recommended length for titles and meta descriptions? About 50 to 60 characters for titles and 120 to 160 for meta descriptions. Both are measured by width in practice, so treat them as guides.
How long does Google take to show a new title? From a day to a few weeks, depending on how often it crawls the page. Request indexing in Search Console to move it up the queue.
Can I stop Google from rewriting my title? No. You can only make a rewrite unnecessary, with a specific, accurate title that matches the page.
Do I need to put the year in my title? Only for content that really is tied to a year, such as reviews or price lists, and only if you will update it every year.
Next in the checklist
This is the first item of the Next.js SEO checklist, and the advice applies to any site. The next one is the meta description, which follows the same idea with a 120 to 160 character range and its own reasons for being replaced.
If you are rewriting titles across a site and want somewhere to keep the before and after list as you go, txtnode opens a notepad at any URL you type, without an account.
For a bigger cleanup, sign in and use Files to keep your notes in folders, such as one note per section of the site, so the list stays in one place until the last title is fixed. You can also share a note with an AI agent like Claude Code or Codex and let it suggest new titles that follow the rules above.

