Skip to main content
Technical SEO

The Technical SEO Audit Checklist That Actually Finds Problems

Most SEO audits produce a 90-page PDF and no change in rankings. This one is ordered the way search actually works — a page has to be crawled before it can be indexed, indexed before it can rank, and rendered before any of it counts. Work top to bottom and you find the problems that matter first.

By Neel Ratan Sarkar 6 min read

Start with crawlability, not content

There is a strict order to how search works, and auditing out of order wastes weeks. A page must be crawled before it can be indexed, indexed before it can rank, and rendered before Google can judge what is on it. A brilliant page that is blocked in robots.txt ranks for nothing, and no amount of keyword work changes that. So the audit starts at the bottom of the stack.

Open your robots.txt first. The single most damaging mistake we find is a Disallow on /css/, /js/ or /assets/. Those directives look tidy and they are quietly catastrophic: Google renders pages like a browser, so blocking your stylesheets means it sees an unstyled skeleton and judges the layout, mobile-friendliness and content placement of that skeleton. If you take one thing from this article, it is that render-critical assets must be crawlable.

Then check that the rules do what you think. robots.txt matching is prefix-based with * wildcards and $ anchors, longest matching rule wins, and the most specific user-agent group wins outright — meaning a Googlebot block completely replaces the * block rather than adding to it. That last rule surprises people. Test real URLs rather than reading the file and assuming.

You can check any site with our Robots.txt Validator, which tests specific URLs against the rules instead of just checking syntax.

Confirm what is actually indexed

Crawlable is not the same as indexed. The fastest read on indexing health is the Pages report in Google Search Console, which splits your URLs into indexed and not indexed with a reason for each. Do not skip the reasons — they are diagnostic.

Crawled – currently not indexed usually means Google fetched the page and judged it not worth keeping: thin content, near-duplicates, or a page that adds nothing over what is already indexed. Discovered – currently not indexed usually means a crawl-budget or quality-signal problem: Google knows the URL exists but has not prioritised fetching it. Duplicate, Google chose a different canonical means your canonical tag was treated as a hint and overruled, which is a content-similarity problem rather than a markup one.

Then check the directives themselves. Every indexable page needs a self-referencing canonical pointing at the exact final URL, including the trailing slash and protocol your server actually serves. A canonical that points at a URL which then redirects is a wasted signal. And confirm no page carries a stray noindex — a single templating mistake can deindex a whole section, and it is silent.

Rendering is where most audits stop too early

Google renders JavaScript, but rendering is queued and resource-limited, so anything critical that only appears after JavaScript runs is at risk. The test is simple: fetch a page with JavaScript disabled, or use the URL Inspection tool in Search Console and read the rendered HTML. If your main content, internal links or canonical tag are missing from that output, they may as well not exist.

Internal links deserve particular attention here. Links injected by JavaScript, built from onclick handlers, or rendered only after user interaction are frequently not followed. If your primary navigation is JavaScript-dependent, your crawl graph may be far shallower than your sitemap suggests.

Quick test: view source (not inspect element) and search for a sentence from the middle of your page body. If it is not there, that content is render-dependent.

Core Web Vitals: measure the right numbers

Core Web Vitals are a confirmed ranking signal, but they are a tie-breaker rather than a primary factor — they will not rescue weak content, and they will separate you from an equally good competitor. The three metrics are Largest Contentful Paint, which measures loading, Interaction to Next Paint, which replaced First Input Delay in March 2024 and measures responsiveness, and Cumulative Layout Shift, which measures visual stability.

The distinction that matters most is lab versus field data. Lighthouse gives you lab data from one simulated load on your machine, which is useful for debugging and is not what Google ranks on. Google uses field data from the Chrome User Experience Report, aggregated from real visitors over 28 days at the 75th percentile. Chasing a perfect Lighthouse score while your field data stays poor is a common and expensive mistake.

For LCP specifically, the usual culprit is render-blocking CSS. Every stylesheet in the <head> blocks the first paint, so a page loading a dozen separate stylesheets cannot paint until the last one arrives. Bundling them into one request routinely removes a full second on a slow connection. For CLS, the fix is almost always setting explicit width and height on images so the browser reserves the space before the file loads.

Structured data that earns something

Structured data does not directly improve rankings. It makes you eligible for rich results, which change how your listing looks and therefore your click-through rate. That distinction matters because it tells you which types are worth the effort.

Worth implementing: Organization and WebSite on the homepage, BreadcrumbList on every page since Google displays breadcrumbs in place of the URL, Product with price and availability for e-commerce, Article for editorial content, and LocalBusiness with real address and hours if you have a physical location.

Worth knowing before you invest: FAQPage rich results were restricted in August 2023 to authoritative government and health sites. The markup is still valid and still helps machines understand your page, but for a commercial site it will not produce the expanded listing it once did. Anyone selling you an FAQ schema rollout on the promise of rich results is working from outdated information.

Whatever you implement, validate it. Invalid JSON-LD is silently discarded, so a single missing brace can disable schema across a whole template. Our Schema Markup Generator produces valid markup, and the JSON Validator will catch a syntax error before Google does.

Internal linking is the most underrated fix

Internal links do three jobs at once: they let crawlers discover pages, they distribute authority between pages, and their anchor text tells search engines what the destination is about. Most sites underuse them badly.

Two problems come up repeatedly. Orphan pages exist in your sitemap but have no internal links pointing at them, so they receive no authority and are crawled rarely. Excessive crawl depth means important pages sit four or five clicks from the homepage, which search engines read as a signal of low importance. Anything commercially important should be within three clicks.

One nuance worth understanding: navigation links carry less weight than contextual links inside body content. A site-wide footer linking to every service is fine for discovery but does little for relevance, because the same links appear on every page. A paragraph in a relevant article that links to a service page with descriptive anchor text is worth considerably more.

Audit your headings while you are in there. Every page should have exactly one <h1> and heading levels should not skip. A surprisingly common cause is a navigation menu that uses real heading tags for its category labels, which injects headings above the page title on every single page. Our Heading Structure Analyzer will find it.

The order to fix things in

An audit that lists 200 issues without prioritising them is a way of avoiding decisions. Work in this order, because each level is a prerequisite for the next:

  1. Blocking issues — anything preventing crawling or indexing of pages you want ranked. Wrong robots.txt rules, stray noindex, broken canonicals.
  2. Rendering issues — content or links that only exist after JavaScript.
  3. Duplication — multiple URLs serving the same content, missing canonicals, parameter variants.
  4. Core Web Vitals — starting with render-blocking resources and unsized images.
  5. Internal linking — orphans, depth, anchor text.
  6. Structured data — validity first, then coverage.

Re-audit after each level rather than at the end. Fixing a robots.txt rule can change what is indexed within days, which changes what the rest of the audit should focus on.

Key takeaways

  • Audit in the order search works: crawl, index, render, rank. Fixing content before fixing crawlability wastes the work.
  • Never block CSS, JS or image directories in robots.txt — Google renders your pages and will judge the unstyled version.
  • Core Web Vitals are graded on field data from real users at the 75th percentile, not on your Lighthouse score.
  • FAQ rich results have been restricted to government and health sites since 2023; the markup is still valid but will not expand your listing.
  • Contextual links inside body content carry more weight than site-wide navigation links.

Neel Ratan Sarkar

Developer, Business Planner & SEO Engineer · EmproIT

Neel runs technical SEO and engineering at EmproIT, where the job is usually less about clever tactics and more about removing the boring blockers that stop good pages ranking.

Frequently asked questions

How often should I run a technical SEO audit?

A full audit once or twice a year is enough for most sites, with continuous monitoring in between. What matters more than frequency is auditing at the right moments: after a site migration, a redesign, a CMS change, or a sudden drop in impressions. Set up Search Console alerts so indexing problems surface within days rather than at your next scheduled audit. Large sites that publish constantly benefit from monthly crawls, since new templates and content types introduce new issues faster than a static brochure site would.

What is the difference between crawlability and indexability?

Crawlability is whether a search engine can fetch the page at all, which is governed by robots.txt, server responses, and whether anything links to it. Indexability is whether the engine chooses to store the page in its index once fetched, which is governed by meta robots directives, canonical tags, and quality judgements. A page can be perfectly crawlable and still not indexed, which is what the "Crawled, currently not indexed" status in Search Console means. They fail for different reasons and need different fixes.

Do Core Web Vitals really affect rankings?

Yes, but as a modest tie-breaker rather than a primary factor. Google has been explicit that relevance and content quality matter far more, and a fast page with weak content will not outrank a slower page that genuinely answers the query. Where Core Web Vitals earn their keep is between competitors of similar quality, and in the commercial effects that are not ranking factors at all: faster pages have measurably lower bounce rates and higher conversion, which is usually worth more than the ranking nudge.

Why is my page indexed but not ranking?

Indexing only means the page is eligible to appear. Ranking depends on relevance to the query, the authority of your page and domain, and how strong the competition is. The most common causes are targeting a keyword far above your current authority, content that does not match the intent behind the query, or several of your own pages competing for the same term. That last one, keyword cannibalisation, is worth checking first because it is entirely within your control: consolidate the competing pages into one stronger page.

Is FAQ schema still worth adding?

It is worth adding for machine understanding, but not for rich results if you are a commercial site. In August 2023 Google restricted FAQ rich results to authoritative government and health websites, so the expanded listing most people implemented it for is no longer available. The markup remains valid, still helps search engines and AI systems parse your content, and costs little to maintain. Just do not budget for it on the assumption of a click-through-rate increase, and be sceptical of anyone who promises one.

How many internal links should a page have?

There is no correct number, and chasing one leads to unnatural pages. The useful principles are that every important page should be reachable within three clicks of the homepage, that no indexable page should be orphaned with zero internal links, and that links should appear where they genuinely help a reader rather than being bolted on. A 2,000-word article might naturally carry five to fifteen contextual links. If you find yourself counting rather than asking whether each link is useful, you are optimising the wrong thing.

Should I fix every issue an SEO tool reports?

No. Automated crawlers flag anything that deviates from a default, and many findings are irrelevant to your site or actively wrong for your situation. Warnings about meta keywords, exact keyword density, or a specific text-to-HTML ratio can generally be ignored. Prioritise anything that blocks crawling or indexing, then duplication, then performance, then everything else. A tool reporting 500 issues on a healthy site usually means the tool needs configuring, not that you have 500 problems.

What is the fastest technical fix with the biggest impact?

On most sites it is reducing render-blocking resources. Pages commonly load ten or more separate stylesheets in the head, and the browser cannot paint anything until the last one arrives, so combining them into a single request often removes close to a second from Largest Contentful Paint on a mobile connection. Setting explicit width and height on images is a close second, because it costs almost nothing and eliminates most Cumulative Layout Shift. Both are mechanical changes with no content risk.

Want the audit done properly?

Our technical SEO team runs this checklist against your site, fixes what it finds, and shows you the indexing and Core Web Vitals movement afterwards.

Get a Technical Audit