SEO Audit

The 12 SEO Checks Explained

A detailed breakdown of every check Surfaceable runs, what it looks for, and what to do when it flags an issue.


1. Page SEO

Analyses the fundamental on-page SEO elements of each URL.

What it checks:

  • <title> tag — presence, length (50–60 chars optimal), uniqueness
  • Meta description — presence, length (120–160 chars optimal)
  • H1 tag — must be exactly one per page
  • H2–H6 structure — logical hierarchy
  • Canonical tag — correct self-referencing or cross-domain canonical
  • Hreflang — valid language/region codes and reciprocal links
  • Lang attribute on <html> element
  • Viewport meta tag

Common issues: missing meta description, title too short/long, multiple H1s, missing canonical.


2. Indexability

Checks whether your pages can be found and indexed by search engines.

What it checks:

  • robots.txt — exists, is parseable, doesn't block critical paths
  • noindex meta tag — flags pages that are accidentally noindexed
  • nofollow on internal links — flags links that shouldn't be nofollowed
  • Redirect chains — detects 301/302 chains longer than 2 hops
  • XML sitemap — presence, accessibility, format validity
  • Sitemap URLs vs crawled URLs — surfaces pages missing from the sitemap

Common issues: sitemap missing, important pages blocked in robots.txt, redirect chains.


3. Schema / Structured Data

Detects and validates JSON-LD structured data against Schema.org.

What it checks:

  • Presence of any JSON-LD on the page
  • Valid JSON (parses without error)
  • Recognised Schema.org @type values
  • Required properties for each type (e.g. name for Organization, headline for Article)
  • Consistency between structured data and visible content

Common issues: no structured data present, invalid JSON, wrong @type for page content.

Why it matters for AI: AI assistants use structured data to understand entities. A page with correct Organization, Product, or Article schema is easier for an AI to cite accurately.


4. Content Analysis

Analyses the quality and structure of the page's written content.

What it checks:

  • Word count — flags thin content below 300 words
  • Readability — Flesch-Kincaid score (aim for Grade 8–10 for general audiences)
  • Keyword density — warns if a single keyword appears more than 3% of total words
  • Heading distribution — checks H2–H6 are used to break up long content
  • Paragraph length — flags blocks of text longer than 150 words

Common issues: thin content, unreadable score (too complex), missing subheadings.


5. Links

Maps every internal and external link on the page and checks their health.

What it checks:

  • Internal links — counts and maps all same-domain links
  • External links — counts and lists all outbound links
  • Broken links — HEAD requests each link and flags 4xx/5xx responses
  • Anchor text — flags excessive use of generic anchors like "click here"
  • Link depth — pages that are more than 3 clicks from the homepage

Common issues: broken internal links, orphan pages (no internal links pointing to them).


6. HTTP Headers

Analyses the HTTP response headers returned by the server.

What it checks:

  • Cache-Control — proper caching directives for static assets
  • Content-Encoding — gzip or brotli compression enabled
  • Strict-Transport-Security — HSTS configured
  • X-Content-Type-Options — set to nosniff
  • Response time — flags pages taking over 1 second to first byte
  • HTTP vs HTTPS — flags insecure HTTP pages

Common issues: no compression, missing HSTS, slow TTFB.


7. Social Meta

Validates Open Graph and Twitter Card meta tags for correct social sharing.

What it checks:

  • Open Graph: og:title, og:description, og:image, og:url, og:type
  • Twitter Card: twitter:card, twitter:title, twitter:description, twitter:image
  • Image dimensions — OG images should be at least 1200×630px
  • Consistency — OG title/description should match the page title/meta description

Common issues: missing og:image, OG tags present but no Twitter Card, inconsistent titles.


8. Core Web Vitals

Fetches real-world performance data via the Google PageSpeed Insights API.

What it checks:

  • LCP (Largest Contentful Paint) — should be under 2.5s
  • INP (Interaction to Next Paint) — should be under 200ms
  • CLS (Cumulative Layout Shift) — should be under 0.1
  • TTFB (Time to First Byte) — should be under 800ms
  • PageSpeed score — 0–100 for both mobile and desktop

Common issues: slow LCP (usually large unoptimised images), high CLS (missing image dimensions), poor INP (JavaScript blocking).


9. Security

Audits your site's security posture via Mozilla Observatory.

What it checks:

  • Overall Mozilla Observatory grade (A+ to F)
  • Content Security Policy — presence and configuration
  • X-Frame-Options — clickjacking protection
  • Referrer-Policy — data leakage prevention
  • Permissions-Policy — feature restriction
  • Subresource Integrity — external script integrity checks

Common issues: missing CSP, no X-Frame-Options, low Observatory grade.


10. DNS

Checks DNS configuration, email authentication, and SSL certificate health.

What it checks:

  • A / AAAA records — IPv4 and IPv6
  • MX records — mail exchange configuration
  • SPF record — email sender authorisation
  • DMARC record — email authentication policy
  • SSL certificate — valid, not expired, correct hostname
  • SSL expiry — warns when cert expires in under 30 days

Common issues: missing SPF/DMARC, expiring SSL certificate, no IPv6 (AAAA) record.


11. HTML Validation

Validates your page's HTML5 markup against W3C standards.

What it checks:

  • Parse errors — malformed tags, unclosed elements
  • Deprecated elements — use of <font>, <center>, <marquee>
  • Duplicate IDs — id attributes that appear more than once
  • Missing required attributes — e.g. alt on <img>, lang on <html>

Common issues: duplicate IDs, unclosed tags from CMS templates, deprecated elements.


12. Accessibility

Checks for WCAG 2.1 AA compliance issues that affect both users and SEO.

What it checks:

  • Images — all <img> elements must have an alt attribute
  • Form inputs — every <input> must have an associated <label>
  • Heading order — headings must not skip levels (e.g. H1 → H3)
  • Colour contrast — flagged where detectable from HTML/CSS
  • Viewport — must not disable user scaling
  • Language — lang attribute must be set on <html>
  • Links — no empty <a> tags, no duplicate link text pointing to different URLs

Common issues: images without alt text, unlabelled form fields, skipped heading levels.