Indexability checks
Exact triggers and fixes for SEOFix's canonical, noindex, nofollow, duplicate and hreflang check codes.
These checks cover the signals that decide which of your URLs search engines index: canonical tags, robots meta tags, duplicates and hreflang. Some are read from one page and are recheckable; the rest compare pages across the whole audit and are re-verified by the next full audit.
Definitions used below:
- Robots meta tag: the first
<meta name="robots" content="...">in the page. SEOFix matchesnoindexandnofollowin itscontent, case-insensitively. TheX-Robots-TagHTTP header is not read. - Indexable page: no
noindexin the robots meta tag, and either no canonical or a canonical equal to the page's own URL. - URL comparison: URLs are compared after normalising (absolute, lowercase host, no default port, no fragment).
httpvshttps,wwwvs nowww, and a trailing slash are differences, sohttps://example.com/a/canonicalising tohttps://example.com/acounts as pointing elsewhere.
Canonicals
CANONICAL_MISSING — Missing canonical tag
- Severity: notice. Recheckable: yes.
- Trigger: a 200 HTML page has no
<link rel="canonical" href="...">, or itshrefis empty. - Why it matters: without a canonical, URL variants (query parameters, trailing slashes, tracking tags) can split ranking signals between several URLs.
- How to fix: add a canonical in
<head>with the absolute URL of the preferred version of the page, usually the page itself without query parameters.
<link rel="canonical" href="https://example.com/jobs/senior-accountant-dubai">
CANONICAL_TO_BROKEN — Canonical points to a broken page
- Severity: error. Recheckable: no (needs a full audit).
- Trigger: the page's canonical URL was crawled in the same audit and answered
4xxor5xx(not a firewall block). - Details:
canonical_url,status_code. - Why it matters: a canonical pointing to an error page is ignored, or can get the page dropped from the index.
- How to fix: point the canonical at a working
200URL, usually the page itself. Look for canonicals built from an outdated base URL, a removed path prefix, or a wrong slug field.
CANONICAL_TO_REDIRECT — Canonical points to a redirect
- Severity: warning. Recheckable: no (needs a full audit).
- Trigger: the canonical points to another URL, and that URL was crawled in the same audit and answered
3xx. - Details:
canonical_url,status_code,redirect_to, andfinal_urlwhen following the redirects (at most 10 hops) ends on a URL that answered200in the audit. - Why it matters: a canonical to a redirecting URL is a weak signal that search engines often ignore.
- How to fix: use the final
200URL as the canonical (final_urlwhen present). Common causes:httpvshttps,wwwvs apex, or a trailing slash mismatch between how canonicals are built and how the server redirects.
Robots meta tags
NOINDEX_PAGE — Page marked noindex
- Severity: notice. Recheckable: yes.
- Trigger: a 200 HTML page's robots meta tag contains
noindex. - Details:
meta_robots. - Why it matters: the page asks search engines to keep it out of results. That is right for search results pages, carts or account pages, and a costly mistake on pages that should rank.
- How to fix: if the page should rank, remove
noindexfrom the robots meta tag (and from anyX-Robots-Tagheader your server sends). If it is intentional, ignore this notice.
<!-- before -->
<meta name="robots" content="noindex, follow">
<!-- after: remove the tag, or -->
<meta name="robots" content="index, follow">
NOFOLLOW_PAGE — Page marked nofollow
- Severity: notice. Recheckable: no (needs a full audit).
- Trigger: a page that answered
200has a robots meta tag containingnofollow. - Details:
meta_robots. - Why it matters: search engines won't follow any link on the page, so the pages it links to get no link equity from it.
- How to fix: remove
nofollowfrom the robots meta tag unless none of the page's links should be followed. To keep single links unfollowed, userel="nofollow"on those links only.
NOINDEX_RECEIVES_TRAFFIC — Noindex page gets search traffic
- Severity: warning. Recheckable: no (needs a full audit).
- Trigger: a 200 page with
noindexin its robots meta tag still has clicks or impressions in Search Console over the last 28 days (anywww/scheme/trailing-slash variant of the URL). Only for sites with Search Console data. - Details:
clicks_28d,impressions_28d,meta_robots. - Why it matters: the page is about to drop out of Google, taking that traffic with it, or the
noindexis a mistake. - How to fix: if the page should rank, remove
noindex. If not, expect the traffic to go and make sure visitors can reach the right page (link or redirect to it).
Duplicates
Duplicate checks compare indexable pages that answered 200. A noindex page or one canonicalised elsewhere is never counted, because that is already how the site resolves the duplicate. Every page in a duplicate group gets its own issue.
All three are recheckable: a recheck compares each rechecked page with the other rechecked pages and with the rest of the site's latest full audit.
Details (all three): duplicates (up to 10 other URLs with the same value), pages (size of the group).
DUPLICATE_CONTENT — Duplicate content
- Severity: warning. Recheckable: yes.
- Trigger: two or more indexable 200 pages have identical body text. The text of
<body>is compared without<script>and<style>, with whitespace collapsed and case ignored. - Why it matters: identical pages compete with each other and split ranking signals; search engines pick one and may pick the wrong one.
- How to fix: make each page's content unique, or point duplicates at one URL with a canonical or a 301 redirect. Typical causes: the same page under several paths, parameter variants, empty listing or search pages that render only the layout, and pages whose content loads with JavaScript (the raw HTML is identical).
DUPLICATE_TITLE — Duplicate title
- Severity: warning. Recheckable: yes.
- Trigger: two or more indexable 200 pages have exactly the same
<title>text. - Why it matters: identical titles make pages indistinguishable in search results.
- How to fix: build titles from what makes each page unique (name, location, category, page number for paginated lists). A template that outputs only the site name is the usual cause.
DUPLICATE_META_DESCRIPTION — Duplicate meta description
- Severity: notice. Recheckable: yes.
- Trigger: two or more indexable 200 pages have exactly the same meta description.
- Why it matters: identical descriptions make pages look the same in search results.
- How to fix: generate each description from the page's own content, or remove a site-wide default description so search engines pick a page-specific snippet.
Hreflang
Hreflang tells search engines which language or regional version of a page to show. SEOFix reads <link rel="alternate" hreflang="..." href="..."> tags in the HTML. Hreflang in HTTP headers or XML sitemaps is not read.
HREFLANG_NO_RETURN — Hreflang missing return tag
- Severity: warning. Recheckable: no (needs a full audit).
- Trigger: page A declares an hreflang alternate B (a different URL), B was crawled and answered
200, and B's own hreflang tags do not link back to A. - Details:
target(B). - Why it matters: search engines ignore hreflang pairs that are not confirmed from both sides.
- How to fix: on the target page, add an hreflang link back to the page. Every version should list every version, including itself, with the same URLs (same scheme, host and trailing slash) that the pages are served at.
<!-- on both https://example.com/en/jobs and https://example.com/ar/jobs -->
<link rel="alternate" hreflang="en" href="https://example.com/en/jobs">
<link rel="alternate" hreflang="ar" href="https://example.com/ar/jobs">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/jobs">
HREFLANG_MISSING_X_DEFAULT — Hreflang without x-default
- Severity: notice. Recheckable: no (needs a full audit).
- Trigger: an indexable 200 page has hreflang tags but none with
hreflang="x-default"(case-insensitive). - Details:
langs(up to 10 declared values). - Why it matters:
x-defaulttells search engines which version to show users whose language matches no alternate. - How to fix: add
<link rel="alternate" hreflang="x-default" href="...">pointing at the default version, usually the language picker or the main-language page, on every version.
Related
More in Issue reference
Still stuck? Email [email protected] with your site and what you expected to see.