River
Y CombinatorBacked by Y Combinator

Free template

Technical SEO Audit Template

An issue register, template map and developer tickets for ranking crawl findings by what Google indexes and what each page earns.

Free download · No account needed

What you get

Pack of 9 files: 5 documents, 4 spreadsheets

Technical SEO Audit Template
  • Ranking MethodDocument
  • Export ChecklistDocument
  • Audit FindingsDocument
  • Developer Ticket SetDocument
  • Retest PlanDocument
  • Issue RegisterSpreadsheet
  • Priority MatrixSpreadsheet
  • Template MapSpreadsheet
  • Discarded FindingsSpreadsheet
RiverTechnical SEO Audit Template

Developer Ticket Set  ·  Thornbury Supply  ·  ticket 1 of 6

T1. Category template emits noindex on eighty-four live categories

Filetemplates/category.html
IntroducedRelease of 18 February 2026
EffortXS. One line.
BandR, realised loss

Current behaviour

The conditional that adds <meta name="robots" content="noindex"> for discontinued ranges also matches eighty-four live categories. It tests the category's legacy_range flag, set on anything created before the 2024 catalogue migration, rather than is_discontinued.

Expected behaviour

The noindex is emitted only where is_discontinued is true. Live categories emit no robots meta tag at all.

Examples

/c/hex-bolts-a2-stainless
/c/threaded-rod-metric
/c/washers-din-125
/c/socket-cap-screws
/c/nyloc-nuts

Why this one is first

These eighty-four pages earned 4,180 clicks in the twenty-eight days before the release and zero since. It is the only ticket in the set whose return is known rather than estimated.

Verification

DeploymentNo robots meta tag on the five examples, and the live inspection test reports each as indexable
SearchClicks against the eighty-four URLs at 14 and 28 days

Ranked by URL count, this finding sits thirteenth of the fifteen counted findings in the register. Ranked on what it cost, it is first.

Page 1 of 31,078 words

How to do a technical SEO audit

A technical SEO audit checks whether search engines can crawl, render and index your site, and finds what stops them. You crawl the whole site, compare the crawl with what Google Search Console reports, and rank each problem by the traffic it can cost. A good audit ends with a few developer tickets, each naming the template to change and how to confirm the fix.

Rank each finding by what it can do to a page, not by how many URLs it touches. A duplicate title on 10,000 filter pages Google never indexes costs nothing. A stray noindex on 80 category pages takes them out of search, with every click they earned.

A Google Search Console Performance report on a screen, showing total clicks, impressions, average click-through rate and average position above a line chart
Join your crawl to these numbers before you rank anything. Photo: Justin Morgan on Unsplash

Gather the data for a technical SEO audit

A crawler shows every URL your links reach and what each returns. Search Console shows which ones Google indexes and what each earns in clicks.

  1. Crawl the whole site

    Use a crawler such as Screaming Frog or Sitebulb. Set it to crawl as a smartphone, the way Google does, with JavaScript rendering on if pages build content in the browser. Where the crawler supports it, connect Search Console to find orphan pages.

  2. Export Search Console

    Download the Performance report by page, plus the Page indexing and Sitemaps reports. The Performance table stops at 1,000 rows, so use the API on larger sites.

  3. List templates and releases

    Note which template builds each URL pattern and when recent releases shipped. Tickets name templates, and release dates explain sudden drops.

Find what keeps pages out of Google

Google's minimum technical requirements1 are short: Googlebot isn't blocked, the page returns an HTTP 200 status code, and it has indexable content. Anything that breaks one of them comes first.

Read the Page indexing report next. Google says not to expect every URL to be indexed2, just to make sure your key pages are. Look for important pages in the wrong state.

Common Page indexing statuses

StatusWhat it meansWhat to do
NoindexA tag or header blocks indexingRemove it if the page should rank
Blocked by robots.txtGoogle couldn't crawl the pageUnblock it if the page should rank
Not found (404)The URL returns a 404Fix it if you link to it or list it in a sitemap
Soft 404The page says "not found" but returns 200Return a real 404, or add the missing content
Server error (5xx)Your server failed Google's requestCheck Crawl Stats, hosting and firewall rules
Duplicate or alternateGoogle indexed another URL as the canonicalNothing, unless it chose the wrong page

Don't block a page you want out of Google

Google says noindex only works if robots.txt doesn't block the page3. A crawler that can't fetch the page never sees the tag, so the URL can still appear.

While you're in robots.txt, check which AI crawlers it lets in. An AI search visibility report shows whether assistants can reach and cite you.

Check rendering, links and speed

Next, check what Google sees once a page loads. Spot-check each template in the URL Inspection live test, which shows the page as Google renders it, and confirm the main content and links appear.

Navigation and pagination need real links with an href, since Google's crawlers don't click "Load more" buttons that fetch products by script. If deep pages are indexed far less often than shallow ones on the same template, fix the linking.

Then check Search Console's Core Web Vitals report, which uses real-user data. Google's targets are loading (LCP) within 2.5 seconds, responsiveness (INP) of 200 milliseconds or less and layout shift (CLS) of 0.1 or less. Each is measured at the 75th percentile of page loads4. Treat them as pass marks, not a score to max out.

Google wrote its crawl budget guide mainly for sites with a million or more pages that change weekly, or 10,000 or more that change daily5. It also lists sites with many URLs marked "Discovered - currently not indexed". For the rest, it says, a current sitemap and regular Page indexing checks are enough.

Rank findings by what they can cost

Your crawler ranks its findings, but don't adopt its order. Screaming Frog, which makes the SEO Spider crawler, says its issue priorities are not hard rules for what to fix, because they lack context6. The missing context is whether Google indexes the affected URLs and what they earn.

Sort every finding into one of three classes first. The class decides which number ranks it.

Three classes of finding, each ranked by its own number

ClassExamplesWhat it can doRank it by
SuppressingNoindex, robots.txt block, 4xx, 5xx, soft 404, broken canonicalRemove the page from resultsClicks the pages earn, or earned before they dropped
PresentationalMissing meta description or H1, long or duplicate titleChange how the result looksImpressions, with no clicks at risk
StructuralDeep pages, orphan pages, internal redirectsChange how crawlers move through the siteIndexable pages behind one fix

Presentational findings can't remove a page. Google says it primarily uses the page's own content to create snippets7, and may use the meta description when that describes the page better. So a missing description can earn a ticket, but never a click figure.

Pages Google doesn't index put no traffic at risk, unless they should be indexed. Those that dropped out after a recent release go first: count the clicks they earned before the drop, because that return is easiest to predict.

Confirm the rest are excluded on purpose, as filters and variants usually are, before discarding their findings. A big template with nothing indexed is either deliberate or your biggest problem. Log each discard with its reason, so nobody thinks it was missed. Thin or near-duplicate pages aren't code fixes; settle them in a content audit.

Group findings into developer tickets

Developers change templates, not URLs, so write one ticket per template change, even when it clears several crawler warnings. Google notes that error spikes can come from a template change2, so match each spike to a release.

Give every ticket the six parts in the example below, and leave out severity labels and long URL exports.

ExampleA ticket that bundles three crawler warningsAn illustrative example written for this guide. The store is made up.

Ticket 3: Product pages have no H1 or meta description

File: templates/product.html

Now: 5,200 product pages have no H1 and no meta description, and their titles run past 60 characters.

Should: render the product name as the H1, and build the title and description from name, material and size.

Examples: /p/hose-reel-30m, /p/bypass-pruner, /p/cedar-bed-120

Why third: it can't remove a page, so no clicks are at risk. It's ranked on 160,000 monthly impressions across 3,100 indexed pages.

Check: five pages pass on release day; click-through at 28 and 56 days against unchanged product pages.

  • Honest about impact. Admitting no clicks are at risk makes the urgent tickets more credible.

Before the tickets go out

  • Every finding has its class and indexed count beside it
  • No presentational or structural finding carries a click figure
  • Findings that share one fix are one ticket
  • Each ticket names a file and lists five example URLs at most
  • Every dropped finding has a reason on the discarded list

Retest after every release

Check every fix twice. On release day, fetch the example URLs and run the URL Inspection live test to confirm the change shipped. Weeks later, check Search Console: at 14 and 28 days for pages that dropped out, 28 and 56 days for presentational fixes, and monthly for structural ones.

If a URL still shows the old issue, check its last crawl date, since Google notes you may have fixed it after the last crawl2. Compare with similar pages you didn't change, so you know the fix caused the movement.

The template at the top of this page holds the register, template map, tickets and retest plan, with a worked example. If you serve customers in one area, pair it with a local SEO audit.

How to use this template

Use the files as they are, or open them in River. Send River your crawl export and any Search Console data you have, even a crawl an agency handed over. It sorts every finding by what it can do to a page and joins it to indexing and clicks before asking you anything.

Then it asks what your engineers call each template, which URL patterns you exclude on purpose and when recent releases shipped. It fills the four sheets and writes the tickets, findings report and retest plan. It never invents a click figure, indexed count, release date or filename.

  1. Download it or open it in River

    Get the five Word documents and four CSV sheets free, or open the template in River and send it your crawl.

  2. Classify every finding first

    Log each crawler finding in the Issue Register as suppressing, presentational or structural, with Google's indexed count beside it.

  3. Map templates and rank

    Tie each URL pattern to its file in the Template Map, then order what survives in the Priority Matrix.

  4. Write the tickets and retest

    Write one ticket per template change, or ask River to draft them, then check each fix on release day and weeks later.

What's in the template

Forty-seven issue names, six tickets, and the sheet that says why the rest were droppedThe Issue Register, the Priority Matrix and the Discarded Findings sheet.
Technical SEO Audit Template
RiverIssue Register

Issue Register

Thornbury Supply, a fictional fastener distributor. Crawl of 31,912 URLs run 3 March 2026, joined to Search Console for 1 to 28 February 2026.

IDCrawler issue nameIts priorityURLsIndexedClassTraffic at riskVerdict
F-01Directives: NoindexHigh840Suppressing4,180 realisedTicket T1
F-02Canonicals: Non-Indexable CanonicalHigh906141Suppressing1,870 exposedTicket T2
F-05Meta Description: MissingLow6,9124,455Presentational0Ticket T3
F-06H1: MissingMedium6,9124,455Presentational0Bundled into T3
F-07Page Titles: Over 60 CharactersMedium6,9124,455Presentational0Bundled into T3
F-08Links: Pages With High Crawl DepthMedium5,3401,204Structuraln/a by designTicket T4
F-09Canonicals: CanonicalisedHigh11,9080Suppressing0Discarded
F-10Page Titles: DuplicateMedium4,4060Presentational0Discarded
F-12Search Console: Orphan URLsMediumcolumn emptyunknownStructuralunknownBlocked, recrawl
F-16Images: Missing Alt TextLow22,304 imagesn/aPresentational0Routed away

What the three classes decide

ClassWhat the finding can doWhat it is ranked on
SuppressingKeep the URL out of results altogetherClicks, exposed or already lost
PresentationalChange how the result looks. It cannot remove itImpressions. Traffic at risk is zero
StructuralChange how crawl attention and internal authority moveIndexable URLs behind one change. No click figure

The crawler ranked F-07 Medium and F-05 Low. They are the same head block in the same file, so they are one ticket. It ranked F-09 and F-10 as real findings on 16,314 URLs between them, and Google has none of those URLs indexed.

RiverPriority Matrix

Priority Matrix

Six tickets, in the order a developer should take them. One ticket per template edit.

#BandTemplateFindingsURLsFigure behind itFix shapeEffort
1RCategoryF-01844,180 clicks already lostDelete one lineXS
2ABrand hubF-029061,870 clicks exposedRestore one field defaultXS
3PProduct detailF-05 F-06 F-076,912214,000 impressions exposedRewrite one head block and the h1M
4SProduct detailF-085,3405,340 indexable URLs behind one changeCategory pagination and a sibling blockL
5CProduct detailF-044170 clicksRepoint 1,902 internal linksS
6CCategory facetedF-0330 clicksGuard three sort valuesXS

The queue order, and why P sits above C

BandApplies toThreshold
RSuppressing, already lostAny loss already taken
ASuppressing, exposed1,000 clicks or more
BSuppressing, exposed100 to 999 clicks
PPresentational10,000 impressions or more
SStructural1,000 or more indexable URLs behind one change
CSuppressing, exposed1 to 99 clicks
DAnythingZero indexed URLs, or out of scope. Never queued

A template edit touching 214,000 impressions beats a suppressing finding worth eleven clicks. Ordering it the other way is how an audit loses the people who have to schedule it.

RiverDiscarded Findings

Discarded Findings

Longer than the ticket queue, which is the normal result. Every row keeps the reason and the source that settled it.

IDCrawler issue nameIts priorityURLsRank by countWhy it was dropped
F-16Images: Missing Alt TextLow22,3041Counts images rather than pages, so it cannot be ranked against page traffic at all
F-09Canonicals: CanonicalisedHigh11,9082Every URL is a product variant correctly pointing at its parent SKU
F-10Page Titles: DuplicateMedium4,4067Faceted URLs noindexed by design. Google has zero of them indexed
F-11Meta Description: DuplicateLow4,4068Same URL set as F-10. Two issue names, one non-problem
F-14Directives: NofollowHigh1,18010Nofollow sits on outbound datasheet links and was applied deliberately in 2024
F-13H1: MultipleMedium6114Article heading plus a hidden breadcrumb heading. Both intentional

The two calls worth showing your work on

FindingWhat settled it
F-09Google's page indexing documentation states that a page marked duplicate or alternate is usually a good thing, because it means the canonical was found and indexed
F-10, F-11The join. Zero indexed URLs behind either finding, so neither can cost a click whatever the label says

Six discarded findings cover 44,265 flagged rows against 27,486 across the six that were ticketed. Both of the two largest rows in the export are here.

  • Ranking MethodHow findings are classified and banded, and why a missing meta description puts no clicks at risk.
  • Export ChecklistWhat to export from your crawler and Search Console, and which crawl settings to switch on first.
  • Audit FindingsThe written report: what is costing traffic, what only looks urgent, and what is blocked.
  • Developer Ticket SetOne ticket per template change, with the file, current and expected behavior, and up to five URLs.
  • Retest PlanA release-day check and a search check for each ticket, with a control group where one exists.
  • Issue Register sheetEvery crawler finding with its original label, class, indexed count, traffic at risk and verdict.
  • Priority Matrix sheetThe ordered ticket queue, with each ticket's band, owning file, effort and retest timing.
  • Template Map sheetEach URL pattern with its URL and indexed counts, clicks, impressions and the file that builds it.
  • Discarded Findings sheetEvery dropped finding, why it was dropped, what settled it and when to look again.

Common questions

What should a technical SEO audit include?

It should check whether search engines can crawl, render and index your pages: robots.txt rules, status codes, noindex tags, canonicals, redirects, sitemaps, internal links, JavaScript and Core Web Vitals. A useful audit also ranks what it finds by the traffic at stake and ends with developer tickets, rather than a list of every warning.

How often should you run a technical audit?

For most sites, a full audit once a year is enough, plus one after any redesign, migration or platform change. Between audits, check Search Console's Page indexing report each month and after big releases, because one template change can add the same error to thousands of pages at once.

How is a technical audit different from a content audit?

A technical audit asks whether Google can crawl and index your pages. A content audit asks whether each page deserves to exist, and ends with a keep, update, merge or retire decision for every URL. Fix the technical problems first, so the content review isn't judging pages Google could never reach.

Which tools do you need for a technical audit?

A crawler and Google Search Console cover most of the work. Crawlers such as Screaming Frog's SEO Spider or Sitebulb list every URL and what it returns. Search Console adds indexing, clicks, impressions and Core Web Vitals, and its URL Inspection tool tests single pages. Server logs show what Googlebot actually requested.

Can you do the audit without Search Console?

You can start without it, but you can't finish. A crawl alone lets you classify findings and map templates. Ranking them needs two facts that come from Google itself: which URLs it indexes and what each earns in clicks and impressions. Search Console is free for any site you can verify.

Is this technical SEO audit template free?

Yes. Download the five Word documents and four CSV sheets with no signup. They come filled with a made-up fastener distributor's audit, so you can see how each part works before replacing it with your own. Edit with AI opens the same template in a free River workspace.

What does Edit with AI do?

It opens the template in a free River workspace and asks for your crawl and Search Console exports. River classifies every finding before asking questions, then asks for your template names, deliberate exclusions and release dates. It replaces the example with your audit, writes the tickets, and names any figure it can't reach instead of guessing.

Sources

  1. Google for Developers. “Google Search Technical Requirements.” developers.google.com (opens in a new tab)

  2. Google Help. “Page indexing report.” support.google.com (opens in a new tab)

  3. Google for Developers. “Block Search Indexing with noindex.” developers.google.com (opens in a new tab)

  4. web.dev. “Web Vitals.” web.dev (opens in a new tab)

  5. Google for Developers. “Crawl Budget Management.” developers.google.com (opens in a new tab)

  6. Screaming Frog. “Over 300 SEO Issues & How To Fix Them.” screamingfrog.co.uk (opens in a new tab)

  7. Google for Developers. “How to Write Meta Descriptions.” developers.google.com (opens in a new tab)

Written by

Chandler Supple

Co-founder & CEO, River

Chandler has spent the last six years working in AI, building tools for millions of users and Fortune 100 companies. In 2025, he co-founded River to build a new kind of operating system for AI agents.

Reviewed by

Brian Joseff, Co-founder, River