SEO issues
Technical SEO Issues — Fixes & Checklist
A plain-English guide to 157 technical SEO issues — what each means, why it matters, and exactly how to fix it. Your technical SEO audit checklist.
157
distinct issues
Every issue we've observed
Invalid ARIA role
Control has no accessible name
Dialog has no accessible name
Heading levels skip a level
No llms.txt for AI agents
No main landmark for AI agents
Leftover AI-assistant phrase in page text
Low text variety (weak AI-content signal)
Unfilled template or prompt-leak text
Page discloses AI-generated content
Uniform sentence length (scaled-content hygiene signal)
AMP markup present (no Google Search benefit since Jul 2026)
robots.txt-disallowed URL receives internal links (crawl-budget leak)
Noindex page receives internal links (crawl-budget waste)
Page served uncached (no-store/private or CDN bypass)
Canonical target is non-200 / non-indexable
Canonical target reachable only via a canonical tag (no inlinks)
Canonical chain forms a loop
Missing canonical tag
Canonical points to a different URL
Interior page canonicalizes to the homepage
Canonical is not an absolute URL
Canonical target is noindex
Canonical target redirects to another URL
Lorem-ipsum placeholder text in a live page
Low text-to-HTML ratio
Main text is hard to read (low Flesch Reading Ease)
Thin content (low word count)
Title tag and meta description are identical
Access blocked (HTTP 403 / WAF) — crawler couldn't fetch; not a page defect
Rate-limited (HTTP 429) — site throttled the crawler; not a page defect
noarchive directive (blocks cached copy)
noindex set via the X-Robots-Tag HTTP header (easy to miss)
nosnippet / max-snippet:0 directive (blocks snippets & AI Overviews)
Duplicate page content
Duplicate meta description across pages
Near-duplicate page content
Homepage duplicated across protocol/host variants (no redirect)
Duplicate <title> across pages
Article page has no author attribution (E-E-A-T)
Article page has no publication date (freshness / E-E-A-T)
No character encoding declared (meta charset or Content-Type)
Missing <!DOCTYPE html> (quirks-mode rendering risk)
Page could not be fetched
Incomplete/empty response after retries (likely transient — re-crawl)
robots.txt blocks AI search/citation crawlers
Missing <h1>
Multiple <h1> elements
Content-Type header doesn't match the actual content
Invalid hreflang language code
Self hreflang language disagrees with html lang
hreflang set has no self-reference
hreflang has no return link (not reciprocal)
Missing html lang attribute
Image alt text is keyword-stuffed (repetition / low variety)
Image alt text is very long (possible keyword stuffing)
Broken image (src returns 4xx/5xx)
Image filename is generic/auto-generated (missed image-search signal)
Likely hero image lacks fetchpriority=high
Images missing alt text
Images without width/height (layout shift / CLS)
Hero/LCP image is lazy-loaded (loading=lazy delays LCP)
Page-level nofollow directive
Page is noindex
noindex + nofollow (blocks link equity flow)
Broken external link
Broken internal link (target 4xx/5xx)
Page is more than 3 clicks from the homepage
Internal link has no anchor text / accessible name
Orphan page (no internal inlinks)
Internal link points to a redirect
Page has only one internal inlink (fragile crawl path)
Internal link points to a noindex page
Missing meta description
Meta description too long
Meta description too short
Legacy <meta name=keywords> tag present (Google ignores it)
Meta-refresh redirect (use an HTTP 301 instead)
Canonical differs between mobile and desktop
Mobile version has much less content than desktop
Mobile version has far fewer internal links than desktop
Meta description differs between mobile and desktop
Dynamic serving without Vary: User-Agent (cache-poisoning risk)
Indexability directive differs between mobile and desktop
Structured data present on desktop but missing on mobile
Title differs between mobile and desktop
Missing viewport meta tag
Missing Open Graph tags
Large DOM (over 1500 elements) slows rendering & interaction
Same-host image over 100KB transferred (LCP risk)
Legacy image format (jpg/png/gif) with no next-gen fallback
Large HTML document
No ETag header (no conditional GET for unchanged pages)
No Last-Modified header (no conditional GET for unchanged pages)
Render-blocking script in <head> (no defer/async)
Slow server response
Same-host CSS/JS served without gzip/Brotli compression
Same-host CSS file appears unminified
Same-host JavaScript file appears unminified
Redirect chain (multiple hops)
URL redirects to another URL
Canonical changes after JS render
Most content only present after JS render
Most links only present after JS render
Indexability directive changes after JS render
Title changes after JS render
Content required JS rendering (escalated)
Content only rendered by JavaScript (invisible to non-JS crawlers & AI)
Blocked by robots.txt
robots.txt blocks CSS/JS the pages need to render
robots.txt missing (root returns 404/none)
Article schema missing recommended properties (Top Stories / image carousel)
BreadcrumbList present but structurally incomplete
Deep page has no BreadcrumbList structured data
Comma decimal in schema ratingValue/price (invalid number)
Deprecated data-vocabulary.org markup (no rich-result eligibility)
Dataset schema incomplete (name/description; Dataset Search only)
Deprecated schema type with no Google rich result
Event schema missing required properties (name/startDate/location)
FAQPage structured data (rich result removed May 2026)
Schema describes content not visible on the page
Rich-result schema missing required properties
JobPosting schema missing required properties
LocalBusiness schema missing required properties (name/address)
JSON-LD block missing @context or @type
No structured data detected
Product schema missing required or recommended properties
QAPage schema incomplete (mainEntity Question with an answer)
Recipe schema missing required properties (name/image)
Review schema missing required properties (author/itemReviewed/reviewRating)
SoftwareApplication schema incomplete (name/offers-or-rating/recommended)
Structured-data date has already passed (stale event/job/offer)
VideoObject schema missing required properties (name/thumbnailUrl/uploadDate)
Missing recommended security headers
Mixed content on HTTPS page
target=_blank link without rel=noopener (tab-napping)
Non-indexable URL listed in sitemap
Non-200 URL listed in sitemap
Indexable page not listed in sitemap
Client error (4xx) response
Server error (5xx) response
Non-200 final status
Soft 404 (200 OK but content signals not found)
Missing or empty <title>
Title tag is identical to the H1 (missed keyword variation)
Title likely truncated in SERP (too wide)
Title is very short
Missing Twitter Card tag
Double slash in URL path (duplicate-content risk)
Many query parameters
Non-ASCII characters in URL path
URL is very long
Underscores in URL path (prefer hyphens)
Uppercase letters in URL path
Video contentUrl served from own host, not a CDN
Video element present but hidden/zero-size (prominence)
VideoObject declared but no player element on page
Related
Catalog
Invalid ARIA role
Control has no accessible name
Dialog has no accessible name
Heading levels skip a level
No llms.txt for AI agents
No main landmark for AI agents
Leftover AI-assistant phrase in page text
Low text variety (weak AI-content signal)
Unfilled template or prompt-leak text
Page discloses AI-generated content
Uniform sentence length (scaled-content hygiene signal)
AMP markup present (no Google Search benefit since Jul 2026)
robots.txt-disallowed URL receives internal links (crawl-budget leak)
Noindex page receives internal links (crawl-budget waste)
Page served uncached (no-store/private or CDN bypass)
Canonical target is non-200 / non-indexable
Canonical target reachable only via a canonical tag (no inlinks)
Canonical chain forms a loop
Missing canonical tag
Canonical points to a different URL
Interior page canonicalizes to the homepage
Canonical is not an absolute URL
Canonical target is noindex
Canonical target redirects to another URL
Lorem-ipsum placeholder text in a live page
Low text-to-HTML ratio
Main text is hard to read (low Flesch Reading Ease)
Thin content (low word count)
Title tag and meta description are identical
Access blocked (HTTP 403 / WAF) — crawler couldn't fetch; not a page defect
Rate-limited (HTTP 429) — site throttled the crawler; not a page defect
noarchive directive (blocks cached copy)
noindex set via the X-Robots-Tag HTTP header (easy to miss)
nosnippet / max-snippet:0 directive (blocks snippets & AI Overviews)
Duplicate page content
Duplicate meta description across pages
Near-duplicate page content
Homepage duplicated across protocol/host variants (no redirect)
Duplicate <title> across pages
Article page has no author attribution (E-E-A-T)
Article page has no publication date (freshness / E-E-A-T)
No character encoding declared (meta charset or Content-Type)
Missing <!DOCTYPE html> (quirks-mode rendering risk)
Page could not be fetched
Incomplete/empty response after retries (likely transient — re-crawl)
robots.txt blocks AI search/citation crawlers
Missing <h1>
Multiple <h1> elements
Content-Type header doesn't match the actual content
Invalid hreflang language code
Self hreflang language disagrees with html lang
hreflang set has no self-reference
hreflang has no return link (not reciprocal)
Missing html lang attribute
Image alt text is keyword-stuffed (repetition / low variety)
Image alt text is very long (possible keyword stuffing)
Broken image (src returns 4xx/5xx)
Image filename is generic/auto-generated (missed image-search signal)
Likely hero image lacks fetchpriority=high
Images missing alt text
Images without width/height (layout shift / CLS)
Hero/LCP image is lazy-loaded (loading=lazy delays LCP)
Page-level nofollow directive
Page is noindex
noindex + nofollow (blocks link equity flow)
Broken external link
Broken internal link (target 4xx/5xx)
Page is more than 3 clicks from the homepage
Internal link has no anchor text / accessible name
Orphan page (no internal inlinks)
Internal link points to a redirect
Page has only one internal inlink (fragile crawl path)
Internal link points to a noindex page
Missing meta description
Meta description too long
Meta description too short
Legacy <meta name=keywords> tag present (Google ignores it)
Meta-refresh redirect (use an HTTP 301 instead)
Canonical differs between mobile and desktop
Mobile version has much less content than desktop
Mobile version has far fewer internal links than desktop
Meta description differs between mobile and desktop
Dynamic serving without Vary: User-Agent (cache-poisoning risk)
Indexability directive differs between mobile and desktop
Structured data present on desktop but missing on mobile
Title differs between mobile and desktop
Missing viewport meta tag
Missing Open Graph tags
Large DOM (over 1500 elements) slows rendering & interaction
Same-host image over 100KB transferred (LCP risk)
Legacy image format (jpg/png/gif) with no next-gen fallback
Large HTML document
No ETag header (no conditional GET for unchanged pages)
No Last-Modified header (no conditional GET for unchanged pages)
Render-blocking script in <head> (no defer/async)
Slow server response
Same-host CSS/JS served without gzip/Brotli compression
Same-host CSS file appears unminified
Same-host JavaScript file appears unminified
Redirect chain (multiple hops)
URL redirects to another URL
Canonical changes after JS render
Most content only present after JS render
Most links only present after JS render
Indexability directive changes after JS render
Title changes after JS render
Content required JS rendering (escalated)
Content only rendered by JavaScript (invisible to non-JS crawlers & AI)
Blocked by robots.txt
robots.txt blocks CSS/JS the pages need to render
robots.txt missing (root returns 404/none)
Article schema missing recommended properties (Top Stories / image carousel)
BreadcrumbList present but structurally incomplete
Deep page has no BreadcrumbList structured data
Comma decimal in schema ratingValue/price (invalid number)
Deprecated data-vocabulary.org markup (no rich-result eligibility)
Dataset schema incomplete (name/description; Dataset Search only)
Deprecated schema type with no Google rich result
Event schema missing required properties (name/startDate/location)
FAQPage structured data (rich result removed May 2026)
Schema describes content not visible on the page
Rich-result schema missing required properties
JobPosting schema missing required properties
LocalBusiness schema missing required properties (name/address)
JSON-LD block missing @context or @type
No structured data detected
Product schema missing required or recommended properties
QAPage schema incomplete (mainEntity Question with an answer)
Recipe schema missing required properties (name/image)
Review schema missing required properties (author/itemReviewed/reviewRating)
SoftwareApplication schema incomplete (name/offers-or-rating/recommended)
Structured-data date has already passed (stale event/job/offer)
VideoObject schema missing required properties (name/thumbnailUrl/uploadDate)
Missing recommended security headers
Mixed content on HTTPS page
target=_blank link without rel=noopener (tab-napping)
Non-indexable URL listed in sitemap
Non-200 URL listed in sitemap
Indexable page not listed in sitemap
Client error (4xx) response
Server error (5xx) response
Non-200 final status
Soft 404 (200 OK but content signals not found)
Missing or empty <title>
Title tag is identical to the H1 (missed keyword variation)
Title likely truncated in SERP (too wide)
Title is very short
Missing Twitter Card tag
Double slash in URL path (duplicate-content risk)
Many query parameters
Non-ASCII characters in URL path
URL is very long
Underscores in URL path (prefer hyphens)
Uppercase letters in URL path
Video contentUrl served from own host, not a CDN
Video element present but hidden/zero-size (prominence)
VideoObject declared but no player element on page
Audit your own site — free
157 checks, internal PageRank, render-diff. No signup, results in ~30s.