Technical SEO Audit Checklist
Turn this article into takeaways for your work.
Each assistant summarizes the article only for you and suggests best practices for your work.
How to Run a Technical SEO Audit explains the reasoning behind the five-area framework and why the order matters. This is the checklist version: the boxes you actually check during the two focused days of a quarterly audit, organized so you're not flipping between a PDF and five different tools trying to remember what you already covered.
Run the sections in order. There's no point checking Core Web Vitals on pages Google can't crawl, and no point auditing schema on pages that aren't indexed.
Pre-Audit Setup
- Confirm access to Google Search Console (owner or full user)
- Confirm access to a crawler (Screaming Frog or Sitebulb) with a license that supports JavaScript rendering
- Pull two weeks of server logs filtered to known Googlebot user agents
- Note the current
site:yourdomain.comcount in Google as a sanity-check baseline - Confirm your top 10 revenue-driving URL templates (homepage, category, product, pricing, blog post) for CWV sampling
1. Crawlability
- Read
robots.txtline by line, not just skim it - Confirm no staging
Disallow: /rules leaked into production - Confirm
/api/or data-fetch routes used for SSR/ISR are not blocked - Confirm CSS and JS are not blocked from Googlebot
- Check faceted navigation and parameter URLs aren't blanket-disallowed if they carry long-tail traffic
- Run a full crawl with JavaScript rendering ON
- Compare rendered HTML word count against raw HTML word count; flag anything with a large gap
- Review server logs for 5xx errors hit by Googlebot
- Review server logs for soft 404s (200 status, "not found" content)
- Review server logs for crawl traps (infinite parameters, runaway calendar widgets, session IDs in URLs)
- If site is under 100K URLs, confirm crawl budget is not the actual bottleneck before spending time on it
2. Index Coverage
- Open GSC Pages report, filter to "Not indexed," read every status reason
- Separate "Discovered, currently not indexed" (crawl priority issue) from "Crawled, currently not indexed" (content quality issue)
- Grep the codebase for
noindexand confirm it's only on pages that should have it - Check for canonical mismatches (page A points to B, page B points to A)
- Confirm every page canonicalizes to itself unless there's a deliberate consolidation reason
- Confirm parameterized URLs (UTM, session, sort, filter) canonicalize to the clean base URL
- If multi-language, check GSC's International Targeting report for hreflang return-tag errors
- Compare
site:count against GSC indexed count; investigate if the gap exceeds roughly 20%
3. Architecture and Internal Linking
- Run crawl depth report; flag pages at depth 6 or deeper from the homepage
- Confirm your highest-revenue pages sit at depth 3 or shallower
- Run an orphan page report (zero internal inbound links)
- Decide for each orphan: link it from a relevant hub, or noindex it
- Run internal link count per URL; identify the long tail of pages with 0-2 internal links
- Confirm hub-and-spoke linking exists between pillar pages and their cluster articles
- Classify faceted nav filters: content-changing (indexable), sort/paginate (noindex or canonical), or combination (blocked/AJAX)
- Confirm every content page has a visible breadcrumb marked up with
BreadcrumbListschema
4. Core Web Vitals
Test on your top 10 templates, not individual URLs, and always check field data over lab data.
| Metric | Good | Needs Improvement | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | < 2.5s | 2.5s to 4.0s | > 4.0s |
| INP (Interaction to Next Paint) | < 200ms | 200ms to 500ms | > 500ms |
| CLS (Cumulative Layout Shift) | < 0.1 | 0.1 to 0.25 | > 0.25 |
These are Google's own published thresholds for a "good" Core Web Vitals score, confirmed on web.dev. Field data (CrUX, the real-user numbers in PageSpeed Insights and GSC) is what matters for ranking; lab data is only useful for diagnosis.
- Pull field data (CrUX) for each top-10 template from PageSpeed Insights or GSC's Core Web Vitals report
- Flag any template scoring "Needs Improvement" or "Poor" on any metric
- For failing LCP: check hero image format/compression, CDN caching,
fetchpriority/preloadon the LCP element, critical CSS inlining, server TTFB - For failing INP: check JS bundle splitting, heavy event handlers, main-thread-blocking work, unnecessary third-party scripts
- For failing CLS: check explicit width/height on images and video, reserved space for ads/embeds,
font-display: swap - Re-test after each fix ships and log the before/after field data
5. Structured Data
- Confirm Articles/BlogPosting schema on content pages
- Confirm Product schema with Offer on product pages
- Confirm FAQPage schema on pages with genuine FAQ content
- Confirm Organization schema on homepage and footer
- Confirm BreadcrumbList schema on every page
- Confirm HowTo schema where applicable
- Run Screaming Frog's structured data extraction and filter to errors or missing types
- Cross-reference findings against GSC's Rich Results report
- For any FAQ content, confirm the schema is clean and valid, since AI answer engines lean on it heavily when deciding what to cite
JS Rendering Check (SPA and Framework Sites)
- Crawl with JavaScript rendering OFF; check if pages return 200 with an empty
<body> - Crawl the same pages with JavaScript rendering ON; confirm content appears
- If content never appears even with rendering on, escalate as a hydration or auth-wall bug, not a wait-it-out issue
- For news/trending content, confirm SSR or SSG is in place (a delayed second-pass render kills timely rankings)
- For large catalogs, confirm crawl budget isn't being burned on the render queue
- Ask engineering to log the User-Agent on render failures if Googlebot render issues are suspected
Packaging the Findings
- Categorize every finding as P0 (indexing-blocking), P1 (CWV/architecture), or P2 (schema/hreflang/polish)
- Write each ticket with: title, URL pattern, repro steps, evidence, estimated traffic impact, and acceptance criteria
- Attach GSC or crawler screenshots as evidence, not just a description
- Route P0s into the next sprint planning session directly, don't let them sit in a backlog
- Confirm the audit deliverable is a ticket queue, not just a findings deck
See How to Run a Technical SEO Audit for the full ticket template and the reasoning behind the P0/P1/P2 split, and SEO Specialist Tools and Tech Stack for what each crawler and monitoring tool is actually good at.
Ongoing Cadence Checklist
Print this part and pin it. A technical audit is an operating cadence, not a once-a-year event.
- Weekly: check GSC Core Web Vitals report for any template that flipped from Good to Needs Improvement
- Monthly: open GSC Pages report on the first Monday, compare "Not indexed" categories against last month, investigate anything up more than 10%
- Quarterly: run the full five-area audit end to end, sample two weeks of server logs
- Quarterly (500K+ URLs): run monthly server log sampling instead of quarterly
Catching a Core Web Vitals regression within a week is a one-hour fix. Catching it two months after a release is a multi-sprint excavation. The checklist only pays off if it's actually run on this cadence, not filed away after the first quarterly pass.
This checklist supports the work described in the SEO Specialist job description, and complements Keyword Strategy: Ranking Opportunities Competitors Missed and On-Page and Content Optimization for the content side of the same rankings problem. If you're newer to the role, Your First 30/60/90 Days as a New SEO Specialist walks through when to run your first audit relative to everything else on your plate, and Common SEO Specialist Pitfalls covers what happens when audits get skipped for too many quarters in a row.
Learn More
