Core SEO audit rules: titles, canonicals and meta tags
Audit rules for the basics every page declares: title tag, meta description, canonical URL, H1, doctype, charset, robots meta and Open Graph tags.
Core SEO rules cover the declarations every page makes about itself: the title and description a search result is built from, the canonical URL that consolidates duplicates, the doctype and charset the browser needs before it parses anything, the H1, the favicon, and the robots directives that decide whether the page appears at all. Most run per page; two compare titles and canonical form across the whole crawl.
Run only these rules
squirrel audit https://example.com --rule-include coreWhere to start
These carry the highest severity and weight in the category.
- 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.
- Meta description length: the 120 to 160 character range: A page with no meta description, or one outside 120 to 160 characters. squirrel measures it on every crawled page.
- Missing or multiple H1: what squirrel expects on a page: A page with no H1, more than one, or an empty one. squirrel checks the heading on every crawled page.
- Link rel=canonical header vs the HTML tag: the mismatch: A page declaring one canonical in an HTTP header and a different one in the markup. squirrel parses the header and compares.
- nosnippet and max-snippet:0: pages with no search snippet: A robots directive that stops search engines showing any description under the result. squirrel reads the robots meta on every page.
Rules
| Rule | What it flags | Severity | Scope |
|---|---|---|---|
| Canonicals in two forms: www, scheme and trailing slash | Half the site canonicalising to www and half to the apex domain. squirrel compares four form axes across the crawl. | warning | Site-wide |
| Doctype must be declared first: what it means and the fix | A page with no doctype, an old one, or a doctype that is not the first thing in the document. squirrel reads the raw response. | warning | Per-page |
| Duplicate page titles: the site-wide uniqueness check | Two or more pages sharing a title after case and whitespace are normalised. squirrel groups them and lists every URL. | warning | Site-wide |
| Link rel=canonical header vs the HTML tag: the mismatch | A page declaring one canonical in an HTTP header and a different one in the markup. squirrel parses the header and compares. | warning | Per-page |
| meta charset UTF-8: where it goes and what squirrel checks | A page with no charset declaration, one that is not UTF-8, a header that disagrees with the page, or a meta charset past the first 1024 bytes. squirrel checks all three sources. | warning | Per-page |
| Meta description length: the 120 to 160 character range | A page with no meta description, or one outside 120 to 160 characters. squirrel measures it on every crawled page. | error | Per-page |
| Missing og:image: the Open Graph tags squirrel checks | A page missing og:title, og:description or og:image, so shares render without a preview. squirrel checks four tags per page. | warning | Per-page |
| Missing or multiple H1: what squirrel expects on a page | A page with no H1, more than one, or an empty one. squirrel checks the heading on every crawled page. | error | Per-page |
| No favicon found: the link rel icon tags squirrel looks for | A page with no icon link at all, or only one format. squirrel reads the rel and the file extension on every link. | warning | Per-page |
| noindex in a robots meta tag or X-Robots-Tag header: what squirrel reports per page | A page declaring noindex or nofollow in its robots meta tag or X-Robots-Tag header. squirrel reads both on every crawled page and names the directive and where it was set. | warning | Per-page |
| nosnippet and max-snippet:0: pages with no search snippet | A robots directive that stops search engines showing any description under the result. squirrel reads the robots meta on every page. | warning | Per-page |
| rel=canonical: presence, absolute form and self-reference | A page with no canonical link, a relative one, or one that points somewhere else. squirrel checks every crawled page. | warning | Per-page |
| 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. | error | Per-page |
| twitter:card: the card types and the Open Graph fallback | A page with no twitter:card, an unrecognised type, or a large-image card with no image. squirrel checks the type and the fallback. | info | Per-page |
Key terms
- Canonical URL: The URL a page declares, with
<link rel="canonical">or a Link header, as the preferred address for its content. - Character encoding: The mapping from bytes to characters (normally UTF-8) declared in the Content-Type header or a meta charset tag; a mismatch produces mojibake.
- Duplicate content: The same or near-identical content reachable at more than one URL, or repeated titles and descriptions across pages.
- Heading hierarchy: The nesting of h1 to h6 headings that gives a page its outline for readers, screen readers and parsers.
- HTML validity: Whether the markup parses as intended: closed elements, head-only tags in the head, and no raw markup printed as text.
- Meta description: A
<meta name="description">summary of the page that search engines may use as the result snippet. - noindex: A robots directive, in a meta tag or the X-Robots-Tag header, that asks search engines to keep a page out of their index.
- Open Graph: A set of og: meta properties (title, description, image, url) that controls how a link previews when it is shared.
- Robots meta tag: A
<meta name="robots">tag carrying page-level directives such as noindex, nofollow, nosnippet and max-snippet. - Title tag: The
<title>element in the page head; browsers show it in the tab and search engines usually use it as the result headline. - Trailing slash: Whether URLs end in /; /page and /page/ are different URLs, so a site should pick one and redirect the other.
Related categories
Content checks titles and descriptions repeated across pages, and the text of each page. Crawlability follows the canonical and the robots directives through sitemaps and redirects. Social Media checks the og:image size and whether og:url agrees with the canonical.
Learn more
- Fix SEO issues with AI, the coding agent workflow for working through a report
- Website audit tool
- Sample report, with the Core SEO section on a real site
Disable all Core SEO rules
[rules]
disable = ["core/*"]