The Mega Analyzer's SEO Fundamentals card has a row that only shows up when something is wrong: Title contains repeated site name. It fires on titles shaped like "Rooms | Riverside Inn | Riverside Inn", and what it is really measuring is whether two parts of your stack both believe they own the brand suffix. Nobody typed that title. A layout appended the site name to a field that already carried it, and the page has shipped with the doubled brand ever since.
What the check actually tests
The Mega Analyzer fetches the page's served HTML, parses it, and reads the trimmed text of the first <title> element. It then tries four separators in turn: a spaced em dash, a spaced pipe, a spaced hyphen, and a spaced en dash. For each one it splits the title on that separator. If the split yields three or more segments and the last two are identical after trimming, the row renders red with the title Title contains repeated site name and a detail line that quotes the offender: Last segment "Riverside Inn" appears twice. Likely a template that always appends the site name to a pageTitle that already includes it.
There is no green version of this row. When the title is clean, nothing renders, because the neighboring Title tag (N chars) row already covers presence and length. A passing page shows one title row; a failing page shows two.
This is a narrow heuristic, not a title-quality score, so it pays to know what does not trip it:
- Two segments only:
Riverside Inn | Riverside Inndoes not fire. The split has to produce at least three parts, so a home page whose pageTitle equals the site name slips past this row (it tends to surface as a short, dull title in the Title tag row instead). - Mixed separators:
Rooms | Riverside Inn - Riverside Inndoes not fire. Each separator is tried on its own and neither split reaches three parts. - Separators without spaces:
Rooms|Riverside Inn|Riverside Inndoes not fire. Every separator is matched with a space on each side. - Case differences:
Rooms | Riverside Inn | RIVERSIDE INNdoes not fire. The comparison trims whitespace but does not fold case. - Repeats that are not the last two segments:
Riverside Inn | Rooms | Riverside Inndoes not fire. - Anything outside the title element: og:title, the H1, and the site name in your JSON-LD are not read here. The row is about the
<title>string alone, as served, before any client-side script rewrites document.title.
Those misses are deliberate. The row targets one mechanical failure and would rather miss a variant than flag a title that is merely repetitive.
Why it matters
Three things happen to a doubled brand.
First, the search result runs out of room. Google's title-link documentation publishes no character or pixel limit. It says there is no limit on how long a <title> element can be, and that the title link "is truncated in Google Search results as needed, typically to fit the device width." The SERP Snippet Preview renders titles against a working budget of about 600 pixels on desktop (its own blurb rounds that to 580) and 460 on mobile; those are measured cutoffs, not a published figure. A thirteen-character brand plus its separator is 16 characters. Because this row only fires when the brand is the suffix, the text at risk of being cut is the brand itself, which the results page shows separately anyway. The real cost is the budget spent keeping it visible: whoever trimmed "Rooms with river views and free parking" down to "Rooms with river views" so the title would fit alongside its brand gave up another 16 characters for a copy nobody asked for. Paste both versions into the preview and it prints the pixel width of each.
Second, Google may rewrite it. The same document lists the situations where Google replaces the <title> text with something it composes, and two of them describe this defect. One is "micro-boilerplate text", repeated boilerplate in the titles of a subset of pages; Google's example is a set of pages nobody can tell apart. A doubled suffix is boilerplate on every page, and each extra copy leaves less of the title to distinguish one page from the next. The other is duplication of the site name in the title element: for domain-level site names, Google says it "may omit the site name from the title link, if it's repetitive with the site name that's already shown in the search result." Results already show the site name separately from the title link, so a title carrying the brand twice would put it on the results page three times, and you have handed Google a reason to build the title link from your H1, your og:title, anchor text, or its own guess. Google's advice in that document is to consider including just the site name at the beginning or end of each title, separated from the rest with a delimiter such as a hyphen, colon, or pipe.
Third, the same string travels everywhere the title element is used. The HTML spec says authors should use titles that identify the document "even when they are used out of context, for example in a user's history or bookmarks, or in search results." A bookmarks list shows the whole string. A share card built from a page with no og:title has only the title element to fall back on (the Meta + OG Inspector's preview does exactly that), so the duplicate can ride into Slack and LinkedIn previews too. The reverse half-fix also happens: an SEO plugin composes the doubled title, copies it into og:title, and then someone fixes the <title> template while og:title keeps the old string.
How to fix it
Fix the template once, not the pages one at a time. The failure has exactly two ingredients: a layout that unconditionally appends the site name, and a per-page title field that already contains it. Removing either makes the row disappear. The durable fix is to make the layout defensive first, then clean the fields when you have time.
Step 1: find the line. Search your layout for the title element. It will be one variable, a separator, and the site name. In an Eleventy project that is usually src/_includes/base.njk; in WordPress it is the theme's title-tag support or the SEO plugin's title template; in Shopify it is layout/theme.liquid.
Step 2: make the suffix conditional. Nunjucks and Liquid both use double curly braces for output and a brace-percent pair for logic. This blog is itself rendered through Nunjucks, so the samples show those delimiters as square brackets; swap them back when you paste.
Eleventy with Nunjucks:
<title>[% if pageTitle and site.name in pageTitle %][[ pageTitle ]][% else %][[ pageTitle or title ]] | [[ site.name ]][% endif %]</title>
Shopify, in theme.liquid:
<title>[[ page_title ]][% unless page_title contains shop.name %] | [[ shop.name ]][% endunless %]</title>
WordPress has two possible owners of the title, and the fix depends on which one is active. If the theme owns it through add_theme_support('title-tag'), a small filter drops the site name whenever the page title already contains it:
// functions.php or a small plugin. Runs only when the theme composes the title.
add_filter('document_title_parts', function ($parts) {
if (!empty($parts['title']) && !empty($parts['site'])
&& stripos($parts['title'], $parts['site']) !== false) {
unset($parts['site']);
}
return $parts;
});
If an SEO plugin owns the title, that filter never sees it. Set the plugin's template to the equivalent of %%title%% %%sep%% %%sitename%% (Yoast syntax; other plugins use a similar variable set), then open the per-post SEO title fields, because that override is where people type the brand a second time. Pick one owner. Two owners is how you get here.
Step 3: clean the data. Strip the brand from the per-page fields anyway, so the title reads the same no matter which template renders it. In a static site this is one search for the brand string inside pageTitle: or title: in your front matter. In a CMS, sort posts by SEO title and fix the ones that end in the separator plus your name.
Step 4: keep the whole title inside the mobile pixel budget. The analyzer's Title tag row turns red above 70 characters, and Google publishes no number. The tighter limit is pixels on a phone: in the preview's 18 px Arial, a title of ordinary mixed-case words runs out of the 460 px budget somewhere in the mid fifties, so measure the width instead of counting characters, and make the descriptive part earn its place.
Step 5: give Google a clean source for the site name. Google's site-name system treats WebSite structured data on the home page as the most important signal and also considers og:site_name, the home page's title element, headings, and other home page text. If the only place your brand appears is a title suffix, you are asking Google to infer it. Declare it once, on the home page only, with name and url required and alternateName for a shorter form people actually use:
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Riverside Inn and Suites",
"alternateName": "Riverside Inn",
"url": "https://www.example.com/"
}
Step 6: verify at both widths and on the share card. Rerun the Mega Analyzer; the red row should be gone and the Title tag row should show the new length. Paste the old and new titles into the SERP Snippet Preview to see the pixel widths side by side on desktop and mobile. Then run the page through the Meta + OG Inspector, which lists og:title next to the title element and renders the preview card the way LinkedIn and Slack will draw it. If og:title still ends in the doubled brand, the plugin is composing it separately and needs the same template change.
When to leave it alone
- Same string, different things. A business named after its town, or a product line named after the company, can produce "Rates | Riverside | Riverside" where the first Riverside is the inn and the second is the town. Do not strip it. Disambiguate instead: "Rates | Riverside Inn | Riverside, ID" tells the reader more and the row goes quiet on its own.
- The template is not yours. A hosted booking engine, help desk, or careers portal on a vendor subdomain composes its own title from a field you fill in plus the vendor's suffix. Fix the field (stop typing the brand into it) and accept that some vendors give you no field at all. Note the pages and move on.
- Pages that never appear in search. A noindex thank-you page with a doubled brand costs nothing in the result. Fix it when you touch the template anyway, but it is not a same-week item.
- Do not overcorrect. The answer is not to remove the brand from every title; Google's guidance is to consider including just the site name, at the beginning or end. And do not pull it from the home-page title before the WebSite structured data exists, because that title is one of the sources Google reads to decide what your site is called.
- A pass is not a compliment. "Home | Welcome | Riverside Inn" passes this row and is still a poor title. The check catches one mechanical defect; reading the titles is still your job.
If you run several sites off one shared layout, this bug is wrong on all of them at once and fixed on all of them at once. That symmetry is the whole argument for a shared template, and it is the operating model The $100 Network is built around.
Fact-check notes and sources
- Source: https://developers.google.com/search/docs/appearance/title-link establishes that there is no limit on
<title>length but title links are truncated to fit device width; that its list of common issues includes "micro-boilerplate text" and "duplication of the site name in the<title>element"; that for domain-level site names it may omit the site name from the title link when it repeats the one already shown; and that it suggests including just the site name at the beginning or end of each title, separated by a hyphen, colon, or pipe. It also lists the sources Google draws on for title links, including<title>, headings, og:title, anchor text, and WebSite structured data. - Source: https://developers.google.com/search/docs/appearance/site-names establishes that the site name in results is generated automatically from the home page and references to it; that WebSite structured data with
nameandurl(and optionalalternateName) must be on the home page; that subdirectory-level site names are not supported; and that Google may fall back to other sources or the domain when it is less confident in the provided name. - Source: https://html.spec.whatwg.org/multipage/semantics.html#the-title-element establishes that the title element represents the document's title or name, that there must be no more than one per document, and that titles should identify the document out of context, "for example in a user's history or bookmarks, or in search results."
- Pixel widths: Google publishes no pixel figure. The 600 px desktop and 460 px mobile budgets are the cutoffs in the SERP Snippet Preview's truncation code (its page blurb rounds desktop to roughly 580); treat them as working numbers, not a specification.
- Analyzer logic: view source on /tools/mega-analyzer/ and search for "repeated site name" to read the separator list and the segment comparison exactly as described above.
Related reading
- Character Counts Lie: Why Your SERP Snippet Truncates Differently Than You Expect
- Duplicate Title and Meta Description Audit: The SEO Problem Hiding in Plain Sight
- Prioritize Title-Tag Rewrites By Traffic Impact, Not Impression Volume
- Your pages look broken on social media because nobody checked the meta tags
- Open Graph Card Preview: What LinkedIn, Slack, and Discord Actually See
This post is informational, not SEO-consulting advice. Mentions of third-party platforms are nominative fair use. No affiliation is implied.