squirrelscan
GitHub

Title tag length: the 30 to 75 character range squirrel uses

A page with no title element, or one outside 30 to 75 characters. squirrel measures the title on every crawled page.

What the title element is

The title element names the page. It is what a browser puts in the tab, what a bookmark saves, and one of the sources Google draws the link text of a result from. Google documents that it may use other text on the page instead when that describes the content better.

Length matters because of where it is displayed rather than because of any rule. A desktop search result truncates at roughly 600 pixels, which is around 60 characters of typical text, so anything past that is written for nobody. Too short usually means the title is a single word that could describe any page on the site.

What squirrel checks

The rule runs on every crawled page against the parsed title. It emits one or two checks:

  • meta-title and document-title, both failing with the messages Missing page title and Missing document title and a null value, when there is no title or the title holds only whitespace. These are the only two checks emitted in that case.
  • meta-title, warning with the message Title too short when the title is under the minimum, or Title too long when it is over the maximum. Both carry the title as the value, <min>-<max> characters as the expectation, and an item holding the page URL with the first 50 characters of the title and its length. The defaults are 30 and 75 and both are configurable below.
  • meta-title, passing with the message Title length OK and the title as the value.

A title that prints a missing value, such as undefined | Acme or [object Object] | Acme, is reported by content/placeholder-text, not by this rule.

The title is measured as a browser displays it: runs of spaces, tabs and line breaks collapse to one space and the ends are trimmed, so a theme that indents <title> across several lines is measured by its visible text, and that text is what the value and the item show. A no-break space is part of the title and is not collapsed. Length is counted in characters, so an emoji counted by the browser as one glyph may count as two. Severity is error and weight is 8, the highest in this category.

Pages kept out of the search index are skipped. A page whose <meta name="robots"> tag or X-Robots-Tag header contains noindex (a header scoped to one crawler, such as googlebot: noindex, counts too) gets one skipped check named core/meta-title with the message Skipped: page is set to noindex via robots meta tag (or via X-Robots-Tag header) instead, because its title never appears in a search result. Skipped checks do not count toward the score. Pages are skipped only on a site that is itself being indexed, judged by its homepage, or by the page the audit started from when the homepage was not fetched. When that page is noindex, as on a staging site or a preview deployment (Vercel, Netlify and Cloudflare Pages previews send X-Robots-Tag: noindex by default), nothing is skipped: the whole host is out of search and the audit is most likely checking it before launch. When neither page was fetched, nothing is skipped either. See pages kept out of search for the full list of rules that do this.

How to fix it

<title>Configuring the build cache | Acme Docs</title>

Put the specific part first and the brand last, because that is the half that survives truncation. One title per page, describing that page rather than the site.

The common false positive is a title assembled on the client. squirrel reads the HTML the server sent unless browser rendering is on, so a title set by JavaScript after load is reported as missing.

Rule IDcore/meta-title
CategoryCore SEO
ScopePer-page
Severityerror
Weight8/10

Options

OptionTypeDefaultDescription
min_lengthnumber30Minimum title length
max_lengthnumber75Maximum title length

Configuration example

[rules."core/meta-title"]
min_length = 30
max_length = 75

Enable / disable

Disable this rule

[rules]
disable = ["core/meta-title"]

Disable all Core SEO rules

[rules]
disable = ["core/*"]

Enable only this rule

[rules]
enable = ["core/meta-title"]

enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.

Core SEO findings ship in every audit next to the performance, security and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.

References

Check your site

Run squirrel audit https://example.com and open the Core SEO section of the report. Each page reports its title and character count. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.

Type to search…

↑↓ navigate↵ openesc close