Technical SEO audit checklist

The technical checks of an SEO audit in depth, from crawling and indexing to Core Web Vitals and access for AI crawlers.

Each item says what to check and, where a report or tool shows it, names it. Start with Search Console's reports, then confirm what they show with a crawl.

On this page

What you need before you start

You need access to your site's Search Console property, a crawler that can render JavaScript, PageSpeed Insights and Google's Rich Results Test, and your analytics if you have them.

Screaming Frog SEO Spider is one such crawler: without a license it crawls up to 500 URLs in a single crawl, and JavaScript rendering is restricted.

Check first that Search Console and your analytics both record the whole site, as the data section of the SEO audit checklist describes.

Record each finding with its evidence as you go: the report or crawl, the URLs and the date.

This page covers the technical part of the SEO audit checklist in depth.

Open the SEO audit checklist

Crawling

  • robots.txt rules: read the file line by line and check that it blocks no page, script or style file you want crawled. Then open the robots.txt report in Search Console and read any errors it lists.
  • Blocked pages in the index: list the URLs robots.txt blocks and inspect the key ones with the URL Inspection tool. A page blocked in robots.txt can still be indexed if other sites link to it.
  • Crawl stats: open Settings, then Crawl stats, in Search Console. Check the share of requests that end in server errors or redirects.
  • Sitemap contents: crawl each URL in your sitemaps. Check that each returns a page, carries no noindex rule and declares itself canonical.
  • Sitemap size: check that each sitemap holds no more than 50,000 URLs and 50MB uncompressed, the limit for a single sitemap in every format.
  • Sitemap location: check that robots.txt names each sitemap and that each is submitted in the Sitemaps report.
  • Links crawlers can follow: check that navigation and content links are anchor (a) elements with an href attribute. Google cannot reliably extract URLs from links without an href attribute or from script events.
  • Orphan pages: compare the URLs in your sitemaps and analytics with those a crawl finds through links. Link to each page you want found from another page.

Indexing

  • Manual actions: open the Manual actions report in Search Console. Any action it lists goes first in your plan.
  • Reasons pages are not indexed: open the Page indexing report and read each reason with its example URLs. Check that no page you want found is among them.
  • noindex on wanted pages: crawl the site and list pages with noindex in the robots meta tag or the X-Robots-Tag header. Remove it from each page you want indexed.
  • Pages you want out of the index: check that robots.txt does not block them. If robots.txt blocks a page, Google's crawlers cannot see its noindex tag.
  • Key pages: inspect each with the URL Inspection tool and read whether it is indexed. Run the live test again after each fix.
  • Crawled but not indexed: list the URLs the Page indexing report shows as crawled and not indexed. Compare them with similar pages that are indexed.
  • Index size: compare the number of indexed pages with the number of pages you want indexed. Find out what makes up any large gap.

Canonical tags and duplicates

  • Declared and selected canonical: inspect key URLs and compare the Google-selected canonical with the canonical you declared. Read the Google-selected canonical in the indexed result: the live test cannot predict whether the URL will be considered canonical. If the two differ, work through the items below: canonical targets, sitemaps, duplicate URLs and internal links.
  • Canonical targets: check that each canonical tag points to a URL that returns a page, is indexable and declares itself canonical.
  • Sitemaps and canonicals: check that your sitemaps list canonical URLs and no duplicates. Google reads the pages in a sitemap as suggested canonicals and decides which are duplicates.
  • Duplicate URLs: crawl for the same content at several URLs, such as with and without a trailing slash, in capitals or with tracking parameters. Point each set to one canonical URL.
  • Internal links: check that internal links point to the canonical URL, not to a duplicate or a redirect.

Redirects and status codes

  • Site versions: request a few URLs with and without www and on http. Check that each reaches its https address in one permanent redirect.
  • Redirect chains: list redirects that pass through more than one step and point them straight at the final URL. Googlebot generally follows 10 redirect hops, but Google's inspection tools do not follow redirects.
  • Moved pages: check that each page whose URL changed redirects to its new URL with a permanent server-side redirect where your host allows one, as Google recommends.
  • Missing pages: check that a removed page with no live page on the same topic returns a not-found or gone status, not a normal page that says it is missing.
  • Server errors: list the URLs that returned server errors in your crawl and in the Crawl stats report. Their fixes go in the first group of the plan, after any manual action or security issue.
  • Redirects after a migration: check that each old URL redirects to its closest new page, not to the home page.

Rendering and JavaScript

  • Rendered HTML: in the URL Inspection tool, check that the main content and links of a key template are in the crawled page. Google also uses the rendered HTML to index the page.
  • Blocked scripts: check that robots.txt blocks no script or style file a page needs. Google Search does not render JavaScript from blocked files or on blocked pages.
  • Canonical tags in JavaScript: check that scripts do not change the canonical tag set in the HTML source.
  • Content behind a click: check that content you want indexed is in the rendered HTML without a click, a swipe or typing. Google does not load content that needs one of these to load.

Core Web Vitals

On mobile and on desktop separately, a page passes when the 75th percentile of its page loads meets the good value below for all three metrics: at least three in four page loads must meet it.

The Core Web Vitals report rates groups of similar pages from real visits. The value it shows for a group is the one that 75% of page requests in the last 28 days met.

  • Largest Contentful Paint: check it against the good value of 2.5 seconds or less. Find the slow URL groups in the Core Web Vitals report and diagnose one URL of each in PageSpeed Insights.
  • Interaction to Next Paint: check it against the good value of 200 milliseconds or less. Look for slow interactions on pages with forms, filters and menus.
  • Cumulative Layout Shift: check it against the good value of 0.1 or less. Look for images without set dimensions and content that loads in late above other content.
  • URL groups without data: run a live test of one page of each template the report leaves out in PageSpeed Insights. The report leaves out URL groups without enough data.

Mobile

Google uses the mobile version of a site's content for indexing and ranking.

  • Same content: check that your mobile pages hold the same content, headings and links as your desktop pages.
  • Same metadata: check that titles, descriptions, robots rules and structured data match on mobile and desktop.
  • Viewport: check that each template sets a viewport meta tag and fits a phone screen without sideways scrolling.
  • Separate mobile URLs: if the site serves mobile pages at their own URLs, check that each desktop page has its matching mobile page.

HTTPS and security

  • HTTPS everywhere: check that every page loads over https and that each http URL redirects to it.
  • Mixed content: check that https pages load no images, scripts or fonts over http.
  • Secure connection: check that each subdomain you serve opens over https without a browser security warning.
  • Security issues: open the Security issues report in Search Console. Any issue it lists goes first in your plan.

Structured data

  • Errors: run one page of each template through the Rich Results Test and fix the errors it reports.
  • Search Console reports: open the rich result reports in Search Console and read the invalid items with their URLs.
  • Matches the page: check that the markup describes what the page shows. Google's guidelines say to avoid marking up hidden, misleading or irrelevant content.
  • Organization: check that your home page marks up your organization's name and logo.

Titles, headings, site structure and images

Content, keywords and links from other sites are in the SEO audit checklist.

  • Titles and descriptions: crawl the site and list pages with a missing, duplicate or empty title or meta description. Fix the templates that produce them.
  • Main heading: check that each template outputs one main heading with the page topic, not the logo or the site name.
  • Site structure: check in your crawl how many clicks each key page sits from the home page. Link deep key pages from category or hub pages.
  • Images: check that key images have alt text, a set width and height, and a format Google Search supports, such as WebP or AVIF.

Open the SEO audit checklist

hreflang, for sites in more than one language

  • Return links: check that each language version lists every other version and itself. If two pages do not both point to each other, the tags are ignored.
  • Codes: check that each hreflang value other than x-default gives the language in ISO 639-1 format, with a region code in ISO 3166-1 Alpha 2 format where you need one.
  • Canonical and hreflang: check that each hreflang URL is the canonical URL of its page and returns a page.
  • Default version: check for an x-default entry that points to the page for searchers whose language you do not serve.

Access for AI crawlers

OAI-SearchBot surfaces websites in ChatGPT's search features. A site that blocks it is not shown in ChatGPT search answers, though it can still appear as a navigational link.

Google-Extended is a robots.txt token, not a separate crawler: it lets you manage whether content Google crawls from your site may be used to train future Gemini models that power Gemini Apps and the Vertex AI API, and whether it may be used for grounding, which gives the model content from the Google Search index when it answers, in Gemini Apps and in Grounding with Google Search on Vertex AI. Google-Extended does not affect whether your site is included in Google Search.

To be eligible to be shown as a supporting link in Google's AI Overviews or AI Mode, a page must be indexed and eligible to be shown in Google Search with a snippet. Google lists no additional technical requirements.

OpenAI uses GPTBot for its generative AI foundation models. PerplexityBot surfaces and links websites in Perplexity's search results; it is not used to crawl content for AI foundation models. Anthropic's Claude-SearchBot navigates the web to improve search result quality for users. Disabling Claude-SearchBot prevents Anthropic from indexing your content for search optimization, which may reduce your site's visibility and accuracy in user search results.

Disallowing GPTBot indicates that your content should not be used to train OpenAI's generative AI foundation models. Restricting ClaudeBot signals that your site's future content should be left out of Anthropic's AI model training. OpenAI treats its settings for OAI-SearchBot and GPTBot as independent: you can allow OAI-SearchBot so that your site can appear in search results while disallowing GPTBot.

  • Rules per crawler: read the robots.txt groups for OAI-SearchBot, GPTBot, PerplexityBot, Claude-SearchBot and ClaudeBot, and for the Google-Extended token. Check that each allows or blocks what you intend.
  • Firewall and CDN: check that your bot protection lets the crawlers you allow reach your pages. OpenAI recommends allowing requests from its published IP ranges, and Perplexity notes that a firewall may need to allow its bots explicitly.
  • Server logs: check your server or CDN logs for requests from these crawlers and the status codes they got. Google-Extended sends no requests of its own, so it does not appear there.
  • Content in text: check that key facts sit in the page text and that structured data matches the visible text.

What to fix first

Fix first any manual action or security issue. Then fix what keeps the pages you want found from being crawled or indexed: robots.txt blocks, noindex rules, server errors and canonical tags that point to another URL, which Google reads as a strong signal that the other URL should be canonical.

Rank the other fixes by what each is worth to the business and the work it takes.

Write each fix with the URLs or templates it affects, what to change, what it should change in search and the number to watch.

The SEO audit template has columns for each of these, and a row for each item of the SEO audit checklist. Add this page's items as rows where your site needs them.

Open the SEO audit template

If you would rather have an audit done for you

I audit one website: its technical SEO, its content and how it appears in AI search, using your own Search Console data and, if you give access, your analytics.

I read and check every finding before you see it. AI tools draft parts of the report.

Each fix in the plan is ranked by what it is worth to your business and the work it takes.