Quick answer: run these 20 checks in layer order — indexability first (one accidental noindex outweighs everything else), then crawl clarity, rendering, performance, structured data, and the AI-crawler layer. Each check below has a pass condition you can verify yourself, most with free tools. Quarterly full pass; targeted pass after every theme change, replatform, or bulk edit.

The ordering is the method: each layer gates the ones below it. A perfect schema on a noindexed page is decoration. Work top to bottom and stop polishing lower layers while an upper one fails.

Layer 1 — Indexability (checks 1–4)

  1. No accidental noindex. View source (or fetch as Googlebot) on your money pages: no robots meta or X-Robots-Tag containing noindex. The career-ending technical bug; ships constantly via theme updates and staging pushes. (What the directives mean.)
  2. Key pages return 200. Not 302 chains, not soft-404 templates. Redirects max one hop.
  3. robots.txt blocks nothing that should rank. A blocked page cannot show its noindex either — blocking and deindexing are different jobs (robots guide; generator).
  4. Search Console shows the pages indexed. Pages report → your money URLs in "Indexed", and every exclusion reason on that report explained, not ignored. (GSC setup.)

Layer 2 — Crawl clarity (checks 5–9)

  1. One self-referencing canonical per page; variants and parameters canonicalize to the clean URL (duplicate-content mechanics).
  2. Sitemap complete and clean — every indexable page in, every redirect/404/noindexed page out, submitted in GSC (sitemap guide).
  3. No orphan pages — everything important reachable by internal links, ideally within three clicks of home.
  4. Redirect hygiene — no chains past one hop, no loops, and every retired URL with inbound links 301s somewhere relevant (reclamation).
  5. hreflang correct if multilingual — bidirectional pairs, x-default, self-inclusion (hreflang guide).

Layer 3 — Rendering (checks 10–11)

  1. Content exists in raw HTML. Fetch any key page as Googlebot: title, H1, body text, and product info present without JavaScript. If the raw fetch is a shell, Google indexes you slowly and AI crawlers not at all (SPA fixes).
  2. One H1, sane heading tree, real HTML links (anchor tags, not JS click handlers) for anything crawlers should follow.

Layer 4 — Performance (checks 12–14)

  1. Core Web Vitals pass on field data — LCP < 2.5s, INP < 200ms, CLS < 0.1, in the real-user section of PageSpeed Insights, mobile first.
  2. Images sized and compressed — modern formats, dimensions declared (that is most CLS), lazy-loading below the fold only.
  3. HTTPS everywhere — one canonical scheme+host, http and www variants 301ing into it.

Layer 5 — Structured data (checks 15–16)

  1. Schema on every template that qualifies — Product+Offer on products, Article on posts, BreadcrumbList sitewide, Organization once — and validating in the Rich Results Test (schema guide).
  2. Schema matches the visible page. Prices, availability, ratings in JSON-LD identical to what humans see; drift earns manual actions.

Layer 6 — The AI-crawler layer (checks 17–20)

  1. AI crawlers explicitly allowed in robots.txt — GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended — assuming you want to exist in AI answers (the decision, argued).
  2. llms.txt published at the root, listing your citable pages (generator + guide).
  3. Answers liftable from raw HTML — key pages open with a direct two-sentence answer; FAQ blocks carry FAQPage schema (the AEO discipline).
  4. Verify the AI engines can actually fetch you — a Googlebot-UA fetch returning a CDN challenge page instead of content means your bot protection is eating your AI visibility too.

Running it for real

Manual, the pass takes an afternoon with the free stack: GSC + the simulator + PSI + Rich Results Test. At catalog scale the checks are the easy half and the hundreds of per-page fixes are the wall — which is the half RankEngine automates for Shopify: it runs these checks across every product, collection, and page continuously, then applies and verifies the fixes through the API. Either way, the discipline is the same: audit on change, monitor always, and never polish layer 5 while layer 1 bleeds.