Sign inCreate a free account
Theme

Indexability and crawling

45+ checks: crawl directives, canonical, redirects, security, server and domain, and site files.

The first question about any page is whether a search engine can reach it, read it, and is allowed to keep it. Nothing else on the report matters if the answer is no, which is why this category counts for more than any other.

45+ checks, in five groups.

Crawl directives and canonical

What you have told search engines they may do with this page, and whether those instructions agree with each other.

CheckWhat it looks for
robots.indexableWhether the page is indexable at all, from the meta robots tag, the X-Robots-Tag header and robots.txt together. A noindex on a page you want ranked is the single most expensive finding we report.
canonical.missingNo canonical tag. Search engines will pick one for you, and they do not always pick the one you wanted.
canonical.not_self_referentialThe canonical points somewhere other than this page. Deliberate on a duplicate, a serious error anywhere else, because it tells search engines to rank the other page instead of this one.
canonical.cross_domainThe canonical points at another domain entirely.
canonical.protocol_mismatchThe canonical uses a different scheme from the page serving it, usually http on an https page.
lang.missing, lang.invalidThe lang attribute on <html>, and whether it is a real language code.
hreflang.*For multilingual sites: invalid codes, duplicate codes, and the missing self-reference that quietly breaks a whole hreflang cluster.
charset.missing, charset.not_utf8A declared character set, and whether it is UTF-8.
viewport.missing, viewport.not_responsiveThe viewport meta tag. Without it a page is treated as not mobile ready, and indexing is mobile first.
viewport.zoom_disabledA viewport that blocks pinch zoom. An accessibility failure, and one browsers increasingly ignore anyway.
favicon.missingA favicon, which appears beside your result in some search surfaces.

Canonical and robots findings are worth reading together. A page that is noindexed and also canonicalised elsewhere is sending two different instructions, and search engines resolve that conflict in ways that are hard to predict. Pick one.

Transport and redirects

CheckWhat it looks for
http.statusThe status code the page finally returned.
https.not_servedThe page is served over plain http.
redirect.chain_lengthHow many hops before the page arrived. Every hop costs crawl budget and a little of the signal being passed along.
redirect.loopA redirect that never resolves. The page is unreachable.
redirect.protocol_downgradeA redirect that steps from https back to http, even briefly.
mixed_content.activeScripts or stylesheets loaded over http on an https page. Browsers block these, so part of the page is simply not running.
mixed_content.passiveImages or media over http on an https page. Not blocked, but it removes the padlock.
not_found.soft_404, not_found.redirectedA made-up address on the site returns 200, or redirects to another page, instead of 404. Search Console reports both as soft 404s.
hosts.splitAnother spelling of the address (http or https, with or without www) serves its own copy instead of redirecting here, so the ranking is split.
hosts.indirectThe other spellings arrive here through a chain or a temporary redirect rather than one 301.

Security headers and certificate

These are not ranking factors in the direct sense, but a browser warning between a visitor and your page costs you more than any tag on it. HTTPS itself is a confirmed signal; the rest is hygiene a crawler and a visitor both notice.

CheckWhat it looks for
security.certificate_expiredAn expired certificate. Every visitor gets a full page browser warning.
security.certificate_expiringA certificate close enough to expiry to act on now.
security.hsts_missing, security.hsts_shortThe Strict-Transport-Security header, and whether its max-age is long enough to be worth having.
security.csp_missing, security.csp_unsafeA content security policy, and whether it permits unsafe-inline or unsafe-eval, which removes most of the point of having one.
security.clickjacking_riskNothing stopping the page being framed by somebody else.
security.no_sniff_missingNo X-Content-Type-Options: nosniff.
security.referrer_policy_missingNo referrer policy, so full URLs leak to other sites.
security.version_disclosureServer, framework or CMS version numbers advertised in headers or in the generator meta tag.
security.tls_outdated, security.tls_legacyThe TLS version connections use, and whether the retired TLS 1.0 and 1.1 are still accepted. Legacy support is reported only when a connection over it actually succeeds.
security.cookies_unprotectedCookies set without Secure, HttpOnly or SameSite. A missing Secure weighs most.
security.permissions_policy_missingNo Permissions-Policy, so any embed may ask for the camera, microphone or location.
security.exposed_emailsEmail addresses in the page text or in mailto: links, where harvesting bots collect them.

Server, domain and reputation

Asked about the site rather than read from the page: Google's reputation lists, the domain registry, DNS, and what the server does with addresses other than this one. These need their own requests, so they run when the report is produced by a worker, which is every report on the site; a check that could not be asked shows as not checked, never as passed.

CheckWhat it looks for
reputation.flaggedGoogle Web Risk lists the page for malware, phishing or unwanted software. Browsers put a full-page warning in front of it, so this caps the score.
domain.expired, domain.expiringThe registration expiry, read from the registry over RDAP. Within 30 days is a warning; some country endings publish no dates and show as not available.
domain.ageWhen the domain was registered. Shown for context; age is not a ranking factor.
email.spf_missing, email.spf_multiple, email.spf_openNo SPF record, more than one (which invalidates them all), or one ending in +all.
email.dmarc_missing, email.dmarc_monitoringNo DMARC record, or a policy of p=none that reports spoofing without stopping it.
server.http1_only, server.http3The HTTP version the page arrived over, and whether HTTP/3 is announced.
server.cdnWhich CDN answered, read from the headers each one adds.
server.no_ipv6No IPv6 address for the host.
security_txt.missing, security_txt.expiredNo /.well-known/security.txt with a contact, or one past its Expires date.
ads_txt.missingA page that loads an ad network on a site with no ads.txt. Not reported on sites without ads.

Site level files

These belong to the site rather than the page, and are reported on every page of it because their effect lands on every page.

CheckWhat it looks for
robots_txt.missingNo robots.txt at the site root.
robots_txt.blocks_everythingA robots.txt disallowing everything. Usually a staging file that reached production, and it removes the whole site from search.
sitemap.missingNo XML sitemap found.
sitemap.invalid_xmlA sitemap that does not parse, so nothing in it is read.
sitemap.not_in_robotsA sitemap that exists but is not referenced from robots.txt, which is how crawlers find it without being told.
llms_txt.missingNo llms.txt. An emerging convention for telling AI crawlers what your site is and which pages matter. A notice, not a problem.

URL shape

CheckWhat it looks for
url.too_longOver 100 characters. Truncated in results and awkward to share.
url.too_deepMore than five path segments from the root. Depth correlates with how rarely a page is crawled.
url.underscoresUnderscores as word separators. Hyphens are read as word breaks and underscores are not.
url.uppercaseUppercase letters, which invite duplicate URLs on case sensitive servers.
url.encoded_charactersPercent encoding in the path, usually spaces or non-ASCII characters.
url.many_parametersSeveral query parameters, each a way for the same content to have several addresses.

URL findings are notices for a reason. Changing a live URL means redirects, lost history and updated links, and that is rarely worth it for an underscore. Use these when choosing new URLs, not as a reason to rewrite old ones.

Type to search. Try a check name from your report, an endpoint, or what you are trying to do.

↑↓ to move ↵ to open Esc to close