Technical SEO checklist: 66 checks, explained
An audit is only as useful as your ability to act on it. These are all 66 checks a Trakis audit runs on a site, grouped the way the report groups them — each with what it looks at, why search engines and AI assistants care, and what to change.
How to read a rule
Each finding in a report names its rule, like CRAWL-008. The severity says how much it holds a site back: a critical problem keeps pages from being found or read at all, a warning makes them weaker in search, a notice is worth fixing when the rest is done. The same problem on many pages of one template is counted once, with the number of pages it covers — one change in the template fixes all of them.
A few checks need data only the site’s owner can give: traffic from Google Search Console, or speed measured by Google PageSpeed. Without it they are not run, and the report says so instead of guessing.
Crawlability · 12
- CriticalSitemap URLs blocked by robots.txt · CRAWL-001Addresses listed in sitemap.xml that robots.txt forbids crawlers to fetch.
- CriticalResponse other than 200 · CRAWL-002Pages that answer with an error status (4xx or 5xx) instead of the page.
- WarningRedirect chain · CRAWL-003Addresses that need more than one redirect before reaching the page.
- NoticePage missing from the sitemap · CRAWL-004Pages that were found by following links but are missing from sitemap.xml.
- NoticeURL with session parameters · CRAWL-005Addresses carrying a session identifier in the query string: sid, sessionid, PHPSESSID or JSESSIONID.
- NoticeInternal links to pages blocked by robots.txt · CRAWL-006Internal links pointing at addresses that robots.txt disallows.
- WarningPages that could not be downloaded at all · CRAWL-007Pages the crawl found but could not download at all — timeouts, refused connections, broken responses.
- CriticalThe site is published on two addresses · CRAWL-008The site answering with its pages on a second host — www and non-www, or another domain — instead of redirecting to one.
- Warninghttp:// serves the site instead of redirecting to https:// · CRAWL-009The site answering over plain http:// instead of redirecting to https://.
- WarningSitemap lists pages that should not be there · CRAWL-010Addresses in the sitemap that answer an error, redirect, say noindex, or name another page as canonical.
- WarningMixed content: http files on an https page · CRAWL-011Images, scripts, stylesheets, frames and media that an https page asks the browser to load over plain http.
- NoticeHSTS header missing · CRAWL-012Whether the home page sends the Strict-Transport-Security header, with a max-age above zero.
Indexation · 6
- Criticalmeta robots noindex · INDEX-001Pages carrying <meta name="robots" content="noindex">.
- CriticalX-Robots-Tag noindex header · INDEX-002Pages sent with an X-Robots-Tag: noindex HTTP header.
- WarningCanonical missing · INDEX-003Pages without a <link rel="canonical">.
- WarningCanonical to another page · INDEX-004Pages whose canonical points at a different page.
- NoticeRelative canonical · INDEX-005Canonicals written as relative addresses (/page instead of https://site/page).
- NoticeThe domain is a mirror of another domain · INDEX-006A domain whose pages are nearly all copies of another domain’s pages.
On-page · 14
- CriticalTitle missing · ONPAGE-001Pages with no <title> element, or an empty one.
- WarningTitle too long · ONPAGE-002Titles longer than 70 characters.
- NoticeTitle too short · ONPAGE-003Titles shorter than 15 characters.
- WarningMeta description missing · ONPAGE-004Pages without a meta description.
- NoticeMeta description outside the useful range · ONPAGE-005Meta descriptions shorter than 50 or longer than 160 characters.
- CriticalH1 missing · ONPAGE-006Pages without an H1 heading.
- WarningSeveral H1 elements · ONPAGE-007Pages with more than one H1.
- NoticeSkipped heading level · ONPAGE-008Headings that skip a level, such as an H3 directly under the H1.
- Warninglang attribute missing · ONPAGE-009Pages without a lang attribute on <html>.
- Criticalmeta viewport missing · ONPAGE-010Pages without <meta name="viewport">.
- WarningMany impressions, very few clicks · GSC-001 · needs Search ConsolePages seen at least 200 times in the results but clicked far less often than their position would suggest.
- NoticeClose to the first page · GSC-002 · needs Search ConsolePages ranking between position 4 and 15 with at least 100 impressions.
- WarningPage with traffic, without a canonical or with noindex · GSC-003 · needs Search ConsolePages that bring at least 10 clicks from search but carry noindex or have no canonical.
- WarningPages competing for the same search · GSC-004 · needs Search ConsoleSearches for which two or more of your pages show up, each with real impressions. Searches on your own brand are left out.
Content · 8
- WarningThin content · CONTENT-001Pages with fewer than 300 words of visible text.
- WarningImages without alternative text · CONTENT-002Images without an alt attribute. An empty alt="" counts as present: it is how HTML marks an image as decorative.
- NoticeThe title is nowhere in the H1 · CONTENT-003Pages whose title shares no distinctive word with the H1.
- NoticeVery low text-to-HTML ratio · CONTENT-004Pages where visible text is less than 5% of the HTML.
- WarningDuplicate titles · CONTENT-005Several pages sharing the same title.
- WarningDuplicate meta descriptions · CONTENT-006Several pages sharing the same meta description.
- NoticeA template settles just under the line · CONTENT-007A template whose pages all sit just under the thin-content line.
- WarningPages that repeat each other’s text · CONTENT-008Pages whose own text — menu, header, footer and sidebar left out — is the same or nearly so as another page’s.
Structured data · 7
- WarningThe page has no structured data · STRUCT-001Pages without any JSON-LD structured data.
- CriticalInvalid JSON-LD · STRUCT-002JSON-LD blocks that are not valid JSON.
- WarningJSON-LD without @context or @type · STRUCT-003JSON-LD blocks missing @context or @type.
- WarningProduct without price or availability · STRUCT-004Product structured data without a price or availability.
- NoticeArticle without headline or date · STRUCT-005Article structured data without a headline or a date.
- WarningHome page without Organization · STRUCT-006A home page without Organization structured data.
- NoticeDeep page without a breadcrumb · STRUCT-007Pages two folders deep or more that carry structured data but no BreadcrumbList.
Links · 7
- NoticeToo many links on the page · LINK-001Pages with more than 150 links.
- NoticeGeneric anchor text · LINK-002Links whose visible text is generic — "click here", "read more", "details".
- WarningInternal links without a valid href · LINK-003Links without a usable href — empty, "#", or javascript:.
- CriticalInternal links to dead pages · LINK-004Internal links that lead to pages answering 404 or another error. A dead link in the menu or footer counts once, for the site.
- WarningInternal links written to another address of the site · LINK-006Internal links written to another address of the site — the other host, or http instead of https.
- WarningOrphan pages · LINK-005 · needs the whole site readPages, other than the home page, that no other page of the site links to. Only checked when the crawl read the whole site.
- NoticePages reached by one internal link only · LINK-007 · needs the whole site readPages that exactly one internal link leads to — one step from being orphans.
Performance · 7
- WarningImages without declared dimensions · PERF-001Images without width and height attributes.
- NoticeToo many blocking resources in the head · PERF-002More than 4 render-blocking stylesheets or scripts in the <head>.
- WarningVery heavy HTML document · PERF-004HTML documents larger than 1.5 MB.
- CriticalLCP above 2.5 s · PERF-003 · needs PageSpeedPages whose Largest Contentful Paint is above 2.5 seconds, measured by Google PageSpeed. Critical when the number comes from real visitors (Chrome data); a warning when there is only a lab test, one simulated load on a slow phone.
- WarningLayout shifts while loading (CLS) · PERF-005 · needs PageSpeedCumulative Layout Shift from PageSpeed, page by page: above 0.1 is flagged, above 0.25 is what Google calls poor.
- WarningSlow response to clicks and taps (INP) · PERF-006 · needs PageSpeedInteraction to Next Paint from PageSpeed, page by page: above 200 ms is flagged, above 500 ms is what Google calls poor.
- WarningImages heavier than 200 KB · PERF-007 · needs image weightsA sample of the site’s images, weighed without downloading them: those above 200 KB, and the pages that show them.
AI readiness · 5
- WarningContent only appears through JavaScript · AI-001Pages whose text only appears after JavaScript runs — fewer than 100 words in the HTML the server sends.
- NoticeNo short answer under the heading · AI-002Pages with an H1 and at least 200 words where there is no paragraph right under the H1, or it is shorter than 120 characters.
- NoticeQuestion-style page without FAQ schema · AI-003Pages whose H1 is a question (how, what, why…) without FAQPage, QAPage or HowTo structured data.
- NoticeNo author or organisation signal · AI-004Pages of 300 words or more with no author or organisation named — no meta author, no rel=author, no author in structured data.
- Warningrobots.txt keeps AI search out · AI-005Whether robots.txt keeps out the bots that answer — ChatGPT, Claude and Perplexity search — or Googlebot and Bingbot. Training bots are shown, not counted.
Check your own site
A Trakis audit runs every check above on your site and counts each problem once. Get a free audit.