Start a technical SEO audit with 18 checks in six groups: status codes and redirects, robots.txt and sitemap, canonical and indexing, meta tags, images, and hreflang with AI bots. They come from the canon behind our 400-point auditor. After fixes in these groups, our own site went from 70.5 to 93 in a fast audit.
What a technical SEO audit is
A technical SEO audit is a check of a site against measurable signals that drive crawling, indexing and the search snippet. Each item is a yes or no: the page returns 404 or 200, the canonical is either there or missing. Content quality and design are out of scope and get reviewed by hand.
Each check in the canon has a priority that sets its weight in the score. P0 is critical for indexing, weight 10. P1 clearly affects rankings and snippets, weight 3. P2 is nice to have, weight 1. Below, each group lists three checks with canon IDs, so a finding in the report is easy to match.
Group 1. Status codes and redirects
- HTTP-005 (P1) — a missing URL returns 404, not 200. Otherwise, search engines index empty pages as real ones
- REDIR-001 (P0) — the http version redirects to https with a 301. Without it, two copies of the site live in the index
- REDIR-007 (P0) — no redirect chain is longer than one hop. Link straight to the final URL
You can check by hand with curl -I: the response shows the status code and the Location header. If the http version returns 200, the redirect is one line in your web server or CDN config.
Group 2. robots.txt and sitemap.xml
- ROBOTS-002 (P0) — robots.txt does not block the whole site. A leftover Disallow: / from staging is a classic outage
- ROBOTS-005 (P1) — robots.txt points to sitemap.xml
- SM-003 (P0) — the sitemap lists only URLs that return 200, with no redirects or 404s
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xmlGroup 3. Canonical and indexing
- CAN-001 (P0) — every indexable page has a canonical
- CAN-009 (P1) — a unique page points its canonical to itself. That merges UTM and trailing-slash duplicates into one URL
- INDEX-001 (P0) — key pages carry no noindex. The tag often stays in a template after development
Write the canonical as an absolute URL in the same format as the sitemap: same protocol, host and trailing slash. A mismatch between them reads as a mixed signal to search engines.
Group 4. Title, description and H1
- META-002 (P0) — every page has a unique title
- META-003 (P1) — the title is 10 to 70 characters; longer ones get cut in the snippet
- META-008 (P0) — the page has exactly one H1
Our auditor accepts descriptions of 50 to 160 characters and H1s of up to 70. The same title on dozens of pages almost always means a template bug: one file fix closes every finding at once.
Group 5. Images
- IMG-001 (P1) — meaningful images have a descriptive alt
- IMG-004 (P1) — WebP or AVIF is used where possible
- IMG-005 (P1) — images have width and height set, so the layout does not jump on load
Images are usually the heaviest part of a page. In our test a 1600×1600 photo weighed 663 KB as JPG and 362 KB as WebP from our converter: 45% less with no visible change.
Group 6. hreflang, AI bots and llms.txt
- INT-002 (P1) — hreflang links are reciprocal: if the RU page points to EN, the EN page points back
- AI-010 (P1) — robots.txt has explicit sections for GPTBot, ClaudeBot, PerplexityBot and other AI bots, with a deliberate policy
- LLMS-001 (P2) — a /llms.txt file exists if you want the site in AI assistant answers
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /Case study: 70.5 → 93 on our own site
We run the audit on our own site, app-kit.ru. The first fast audit, run on September 15, 2026, scored 70.5 with 14 failed checks. They included an http version with no redirect, pages without a self-canonical, titles that were too long and a robots.txt with no AI bot sections.
| Run | Score | Failed | Time |
|---|---|---|---|
| Sep 15, 2026 | 70.5 | 14 | 19.6 s |
| Oct 3, 2026 | 93.0 | 7 | 24.4 s |
The repeat run on October 3 covered 235 automated checks, with no failures in any group of this list. The 7 failures left are in forms (required field markup, clickable messenger links) and in monitoring for 404, 500 and JS errors. That is next on our list.
An audit is only useful if it ends in a to-do list shorter than ten items.
The checklist in one table
All 18 checks in one table, ready for your task tracker. Close P0 first, then P1, and leave P2 for a planned release.
| ID | Check | Priority |
|---|---|---|
| HTTP-005 | Missing URL returns 404 | P1 |
| REDIR-001 | http → https via 301 | P0 |
| REDIR-007 | Redirect chain of one hop at most | P0 |
| ROBOTS-002 | robots.txt does not block the site | P0 |
| ROBOTS-005 | robots.txt lists the sitemap | P1 |
| SM-003 | Sitemap lists only 200 URLs | P0 |
| CAN-001 | Canonical on indexable pages | P0 |
| CAN-009 | Self-canonical on unique pages | P1 |
| INDEX-001 | No noindex on key pages | P0 |
| META-002 | Unique title | P0 |
| META-003 | Title of 10 to 70 characters | P1 |
| META-008 | Exactly one H1 | P0 |
| IMG-001 | Alt on meaningful images | P1 |
| IMG-004 | WebP or AVIF where possible | P1 |
| IMG-005 | Width and height set | P1 |
| INT-002 | Reciprocal hreflang | P1 |
| AI-010 | AI bot sections in robots.txt | P1 |
| LLMS-001 | An llms.txt file | P2 |
FAQ
Why 18 checks and not 400?
These 18 cover crawling, indexing and the snippet, the base everything else stands on. The rest of the canon runs in an automated audit in seconds, so there is no need to keep it in your head.
Which checks come first?
The P0 ones: each failure costs 10 points and usually hurts indexing of the whole site. This list has eight of them: redirects, robots.txt, sitemap, canonical, noindex, title and H1.
How often should I rerun the audit?
After every notable release and at least once a month. A repeat run takes under a minute. On our site, the run two weeks later showed the jump from 70.5 to 93 and left a ready list of 7 tasks.
Does a single-language site need hreflang?
No. The INT checks only apply when a site has language versions. The auditor marks them as not applicable and takes no points off.
Join the discussion
Comments are coming to the App-Kit blog soon. Got a correction or a question?
Send feedback