atlookup

SEO Issue Library

Every SEO issue, with the fix.

299+ common SEO issues across 16 categories, severity-ranked, with step-by-step resolution. Find your audit findings here, fix them in an afternoon.

Performance & Core Web Vitals (40)

CLS from images without dimensions High

Images without width/height cause layout shifts as they load.

CLS from late-loaded ads High

Ad slots without reserved height push content down. Always reserve fixed height.

High Cumulative Layout Shift High

CLS above 0.1 — content shifts during load. Reserve space for images, ads, fonts.

High input delay on click High

Click handler chains too much work synchronously. Schedule with requestIdleCallback.

High Interaction to Next Paint High

INP above 200ms. Page feels laggy on click/tap. Profile event handlers.

High LCP score High

Largest Contentful Paint above 2.5s on mobile. Suppresses ranking and hurts conversion.

JavaScript bundle above 500KB High

JS payload too large. Split routes, lazy-load features, audit dependencies.

Long main-thread tasks High

Tasks > 50ms blocking interactivity. Profile with Performance tab and split work.

No CDN configured High

Static assets served from origin only. CDN cuts global latency 50-70%.

No Gzip compression High

Text resources shipped uncompressed. Easy 60-80% size reduction.

Render-blocking CSS on critical path High

Large stylesheets blocking first paint. Inline critical CSS, defer the rest.

Render-blocking JavaScript on critical path High

Synchronous JS in <head> delays first paint. Defer or async non-critical scripts.

Server response time above 600ms High

Backend latency hurts every metric downstream. Add caching layer or upgrade host.

Slow LCP from oversized hero image High

Hero image too large or unoptimized, dominating LCP. Compress, serve WebP, preload.

Slow Time to First Byte High

Server response > 600ms. Investigate database queries, caching, hosting tier.

CLS from web fonts FOUT/FOIT Medium

Custom fonts swap mid-render. Use font-display: optional or matched fallback.

Critical CSS not inlined Medium

Above-fold CSS fetched as a separate request. Inline the critical 14KB.

CSS bundle above 100KB Medium

Single megabyte of CSS shipped. Split per route, purge unused, audit frameworks.

Excessive DOM size Medium

More than 1500 nodes slows layout, paint, and memory. Audit deep nesting and lists.

Fonts not preloaded Medium

Custom fonts discovered late in CSS. Preload the WOFF2 file in <head>.

Fonts without font-display swap Medium

Custom fonts block text rendering. Add font-display: swap to @font-face.

Hero image format JPEG instead of WebP Medium

WebP is 30% smaller than JPEG with same quality. Serve via <picture> tag.

High First Contentful Paint Medium

FCP above 1.8s on mobile. Audit server response, render-blockers, font loading.

High Time to Interactive Medium

TTI above 3.8s. Defer non-critical JS and reduce main-thread blocking.

High Total Blocking Time Medium

TBT above 200ms. Indicates main thread is too busy during page load.

HTTP/2 not enabled Medium

Using HTTP/1.1 forfeits multiplexing and header compression. Enable on server.

Images not lazy-loaded Medium

Below-fold images load immediately. Add loading="lazy" to non-LCP images.

Images served at wrong dimensions Medium

Browser scales 2000x downloaded image to 400x display size. Serve responsive sizes.

LCP image not preloaded Medium

Hero image discovered late in HTML. Preload tells the browser to fetch early.

Long animation frames Medium

Animations missing 60fps target. Use CSS transforms, not layout-affecting properties.

Memory leaks in JavaScript Medium

Detached DOM nodes or event listeners not cleaned up. Profile heap snapshots.

No Brotli compression Medium

Brotli compresses 15-25% better than gzip for text. Configure on server or CDN.

No responsive images (no srcset) Medium

Single image source for all viewports wastes bandwidth on mobile.

Unused CSS Medium

Stylesheet rules never applied to current page. Remove or split per route.

Unused JavaScript Medium

JS bundle includes code not executed on the page. Code-split, tree-shake, lazy-import.

Excessive DOM depth Low

More than 32 nested levels. Flatten markup; CSS doesn't need wrapper soup.

HTTP/3 not enabled Low

HTTP/3 over QUIC handles lossy networks better. Enable when available.

Iframes not lazy-loaded Low

Iframes block main load. Add loading="lazy" to all non-critical iframes.

Unminified CSS Low

Stylesheets shipped with whitespace and comments. Easy 30%+ size reduction.

Unminified JavaScript Low

Scripts shipped unminified. Minification + compression cuts payload by 60-80%.

Crawlability (30)

Faceted navigation crawl traps High

Filter combinations create infinite URLs. Block via robots.txt or canonical.

Internal links pointing to 404s High

Broken internal links signal low quality. Audit and update.

Internal search results indexed High

Search result pages indexed creates infinite duplicate content. Block in robots.txt.

JavaScript-only navigation High

Menu links built from JS only. Provide HTML <a href> fallback for crawlers.

Missing XML sitemap High

No /sitemap.xml. Google must discover pages via internal links only.

Nofollow on important internal links High

Internal nofollow blocks authority flow. Remove nofollow from internal links.

Orphan pages (no internal links) High

Pages reachable only via sitemap. Add at least 2-3 internal links from related content.

Robots.txt blocking critical pages High

Disallow rules silently hide important pages from Google. Audit every Disallow.

Robots.txt blocking CSS or JS High

Blocking CSS/JS prevents Google from rendering pages correctly. Allow them.

Server returning 5xx errors High

Server errors throttle crawl rate. Monitor and fix root cause immediately.

Sitemap exceeds 50000 URLs High

Single sitemap over Google's limit. Split into multiple sitemaps + index.

Sitemap exceeds 50MB High

Sitemap file too large. Split via sitemap index, gzip-compress.

Sitemap returns 404 High

Sitemap referenced but file not found. Check robots.txt sitemap directive path.

Slow server affecting crawl rate High

Google reduces crawl rate when server is slow. Fix TTFB to recover.

Calendar archives without limits Medium

Date archives extending decades into past or future waste crawl budget.

Crawl-delay too aggressive Medium

Slow crawl-delay prevents fresh-content discovery. Remove or set to 1s.

Excessive internal links per page Medium

More than 200 links dilute authority and confuse crawl prioritization.

Filter parameters creating duplicate URLs Medium

?sort=, ?color= etc. produce duplicate content. Canonicalize or block.

Infinite scroll without crawlable links Medium

New items load via JS without URLs. Add paginated URLs as fallback.

Internal links pointing to redirects Medium

Wastes crawl budget on every hop. Update source links to final destination.

Pages too deep from homepage Medium

Important pages more than 4 clicks from homepage. Improve internal linking.

Robots.txt blocking specific user-agents Medium

Bingbot or others blocked by accident. Audit user-agent specific rules.

Robots.txt syntax errors Medium

Malformed directives parsed unpredictably. Validate with Google Robots Tester.

Sitemap contains 404 URLs Medium

Stale entries waste crawl budget. Auto-regenerate sitemap from current pages.

Sitemap contains noindex URLs Medium

Conflicting signals. Remove noindex pages from sitemap.

Sitemap contains redirect URLs Medium

Sitemap should list final canonical URLs only, not redirected ones.

Sitemap not submitted to Search Console Medium

Sitemap exists but Google not notified. Submit via Search Console Sitemaps tool.

Missing robots.txt Low

Site has no /robots.txt. Optional but recommended for crawl directives + sitemap link.

Pagination without rel next prev Low

Modern Google ignores rel=next/prev but consistent canonicals still help.

Sitemap referenced incorrectly in robots.txt Low

Sitemap directive uses wrong URL or relative path. Use absolute https URL.

Indexability (30)

Canonical chains High

A canonicals to B canonicals to C. Consolidate to single hop.

Canonical pointing to 404 High

Canonical points to broken URL. Page won't rank under either URL.

Canonical pointing to redirect High

Canonical resolves through redirect. Update to point at final URL.

Canonical to different language version High

English canonical pointing to Spanish version. Use hreflang instead.

Duplicate title tags High

Same title on multiple pages confuses Google. Make titles unique per URL.

Index bloat from low-value URLs High

Thousands of thin/duplicate URLs in index. Noindex, 410, or canonical to consolidate.

Mass duplicate content High

Many pages with substantially similar content. Consolidate or canonicalize.

Noindex in HTTP header High

X-Robots-Tag: noindex from CDN or app server. Hidden by accident.

Noindex on important pages High

Pages explicitly excluded from search. Audit every noindex directive.

Noindex via meta robots High

Page-level noindex hidden in template. Audit and remove from indexable pages.

Robots.txt blocking pages that should rank High

Pages disallowed in robots.txt cannot be indexed. Move to canonical or noindex.

Session IDs in URLs High

PHPSESSID etc. create infinite unique URLs. Move to cookies.

Soft 404 errors High

Pages return HTTP 200 but content reads as not-found. Return real 404 status.

Wrong canonical tag High

Canonical points to different page. Fix to self-reference or correct master URL.

X-Robots-Tag noindex in production High

Staging directive accidentally pushed live. Remove from production immediately.

AMP and canonical pages indexed separately Medium

AMP variant indexed alongside canonical. Set proper rel=amphtml + canonical.

Cross-domain canonical errors Medium

Canonical to external domain when content isn't syndicated. Self-canonicalize.

Duplicate H1 tags across pages Medium

Same H1 on every page weakens topical signal. Make unique per page.

Duplicate meta descriptions Medium

Identical descriptions across pages. Auto-generate unique versions.

Mobile and desktop indexed separately Medium

Separate m. subdomain. Migrate to responsive design.

New URLs not crawled within 7 days Medium

New content slow to be discovered. Submit URL via Search Console + add internal links.

Pages returning HTTP 200 with no content Medium

Empty content with 200 status. Either populate, 410, or noindex.

Pages with thin content under 100 words Medium

Insufficient content to rank. Expand or noindex thin pages.

Self-canonical missing Medium

Pages should canonicalize to themselves. Add rel="canonical" to every indexable page.

Stale pages still indexed after deletion Medium

Deleted pages return 404 but still in index. Use 410 Gone for faster removal.

Tracking parameters indexed Medium

UTM tags creating duplicate URLs. Configure URL parameter handling in Search Console.

URL parameters not handled Medium

?utm= and tracking params indexed as duplicates. Canonical to clean URL.

Old URL still ranking after redirect Low

Google takes weeks to update. Submit redirect target in Search Console.

Pages excluded by canonical but still indexed Low

Google ignored your canonical. Strengthen with consistent internal links.

Pages indexed but missing from sitemap Low

Sitemap incomplete. Auto-generate from current published pages.

On-Page SEO (23)

Missing title tag High

Page has no <title>. Add a unique, descriptive title under 60 chars.

No H1 tag High

Page missing top-level heading. Add a descriptive H1 matching page intent.

Generic anchor text Medium

"Click here" / "read more" anchors waste link signal. Use descriptive text.

H1 not relevant to title Medium

H1 mismatches title creates topical confusion. Align them around primary keyword.

Meta description duplicate across pages Medium

Same description on every page. Generate unique per URL.

Missing image alt text Medium

Images without alt blocks accessibility and Google Image traffic.

Missing image dimensions Medium

Images without width/height cause CLS and slow rendering.

Missing internal links from new pages Medium

New posts published without internal links from existing content.

Missing meta description Medium

No meta description set. Google generates one from page text — usually worse.

Multiple H1 tags on one page Medium

Multiple H1s confuse topical hierarchy. Use one H1, then H2 onwards.

Stuffed alt text with keywords Medium

Alt text crammed with keywords looks spammy. Describe the image naturally.

Title tag stuffed with keywords Medium

Repeated keywords look spammy. Write naturally for clicks.

Broken breadcrumb structure Low

Breadcrumbs missing schema or with wrong markup. Validate with Rich Results Test.

Decorative images without empty alt Low

Pure-decoration images need alt="" so screen readers skip them.

Empty heading tags Low

Empty <h2></h2> in markup. Remove or fill with relevant heading.

Generic image alt text Low

Alt="image" provides no info. Write descriptive alt for meaningful images.

Meta description above 160 characters Low

Description truncated in SERP. Trim to 150-160 chars.

Meta description below 50 characters Low

Description too short to be compelling. Expand to 120-160 chars.

Missing aria-labels on interactive elements Low

Buttons and links without accessible names. Add aria-label for icon-only controls.

No breadcrumbs Low

Breadcrumbs improve UX and earn rich-result eligibility.

Skipped heading levels Low

Jumping from H1 to H3 hurts accessibility and parseability. Use sequential levels.

Title tag above 60 characters Low

Title truncated in SERP. Trim to 50-60 chars including brand suffix.

Title tag below 30 characters Low

Title too short. Add descriptive keywords + brand.

Schema & Structured Data (13)

Invalid structured data syntax High

JSON-LD parse errors break rich results. Validate with Google Rich Results Test.

Missing FAQ schema on FAQ pages High

FAQPage schema absent — losing AI Overview citations and FAQ rich results.

Missing local business schema High

Local businesses without LocalBusiness schema lose map pack visibility.

Missing structured data High

No JSON-LD on pages eligible for rich results. Add Article, FAQ, HowTo, etc.

Schema not matching visible content High

Schema describes content not on page. Manual action risk — keep schema honest.

Schema with missing required fields High

Required properties absent. Check schema type docs and Rich Results Test errors.

Missing breadcrumb schema Medium

BreadcrumbList schema missing. Surfaces in SERP and helps user trust.

Missing HowTo schema on tutorials Medium

Step-by-step content without HowTo schema misses rich result eligibility.

Missing organization schema site-wide Medium

Organization schema missing from homepage. Critical for entity recognition + knowledge panel.

Missing review or rating schema Medium

Product / service reviews without aggregateRating schema lose star snippets.

Multiple article schemas on one page Medium

Multiple Article entities create ambiguity. Use one Article + nested entities.

Open Graph tags missing Medium

URL shares look broken on Facebook, LinkedIn. Add og:title, og:description, og:image.

Twitter Card tags missing Low

X/Twitter shares show as plain text. Add twitter:card, summary_large_image.

Mobile & UX (18)

Content wider than viewport High

Horizontal scroll on mobile. Audit fixed-width elements and overflowing tables.

Horizontal scroll on mobile High

Body or main element exceeds viewport. Apply max-width:100% / overflow-x:hidden.

Intrusive interstitials High

Newsletter or download pop-ups covering main content trigger ranking penalty.

Mobile load time above 3 seconds High

Mobile experience too slow. Prioritize Core Web Vitals optimization on mobile network.

Mobile pop-ups blocking content High

Intrusive interstitials demoted by Google on mobile.

Mobile usability errors in Search Console High

Property has open mobile usability flags. Audit each affected URL.

Page not mobile-friendly High

Search Console flags page as not mobile-friendly. Fix viewport, tap targets, font size.

Tap targets too small High

Buttons and links smaller than 48px × 48px. Hard to tap on mobile.

Viewport meta tag missing High

Page renders at desktop scale on mobile. Add viewport meta in <head>.

Viewport not set to device-width High

Viewport hardcoded to 980px or similar. Use width=device-width, initial-scale=1.

AMP errors in Search Console Medium

AMP pages with validation errors won't show in mobile search. Validate with AMP Validator.

Form inputs not properly labeled Medium

Input without <label> or aria-label. Hurts accessibility and conversion.

Hover-only interactions Medium

Touch users can't access hover-only menus. Add tap fallback.

Text too small to read on mobile Medium

Body text below 16px on mobile forces zoom. Bump base font size.

Auto-zoom on input focus Low

iOS zooms in when input font is below 16px. Set 16px+ to prevent zoom.

Missing PWA manifest Low

No web app manifest. Add for install prompt and theme color support.

No Apple touch icon Low

iOS home screen shortcut shows generic icon. Add apple-touch-icon link.

Theme color not set Low

Mobile address bar uses default color. Set <meta name="theme-color">.

International & Hreflang (10)

HTTPS & Security (15)

Form submitting over HTTP High

Form action points to HTTP endpoint. Browsers warn; switch to HTTPS.

Mixed content warnings High

HTTPS page loading HTTP resources. Browsers block; SEO ranks lower.

Resources loaded over HTTP High

Mixed-content sub-resources on HTTPS page. Audit all external scripts/images.

Site not on HTTPS High

HTTP-only site. Enable HTTPS with free Let's Encrypt cert; required for ranking + trust.

SSL certificate expired High

Expired cert breaks HTTPS. Set auto-renewal via Let's Encrypt + cron.

SSL certificate from untrusted CA High

Self-signed or untrusted cert. Browsers warn users; switch to Let's Encrypt.

SSL not installed on www variant High

www subdomain still on HTTP. Add SAN to cert covering both www and apex.

Vulnerable WordPress version High

Outdated WordPress core or plugins. Update + enable auto-updates.

Insecure cookies Medium

Cookies without Secure / HttpOnly / SameSite. Audit and tighten.

Insecure subdomain Medium

Subdomain serving over HTTP. Cookie scope means full domain is at risk.

Missing HSTS header Medium

HSTS forces HTTPS for all subsequent visits. Add Strict-Transport-Security header.

HSTS preload not enabled Low

Add includeSubDomains; preload to qualify for browser HSTS preload list.

Missing CSP header Low

Content-Security-Policy mitigates XSS. Add even a basic policy.

Missing X-Content-Type-Options header Low

Without nosniff, browsers may MIME-sniff. Add X-Content-Type-Options: nosniff.

Missing X-Frame-Options header Low

Prevents clickjacking. Set X-Frame-Options: SAMEORIGIN or use CSP frame-ancestors.

URL Structure & Redirects (15)

302 redirects for permanent moves High

302 doesn't pass full link equity. Use 301 for permanent moves.

HTTP vs HTTPS inconsistency High

Both HTTP and HTTPS serving content. Force HTTPS site-wide.

Redirect chains over 2 hops High

Each hop loses 0-15% link equity. Update final destination on source pages.

Redirect loops High

A → B → A indefinite. Browsers and crawlers stop. Audit redirect rules.

www vs non-www inconsistency High

Both versions accessible without redirect. Pick canonical and 301.

Mixed-case URL inconsistency Medium

URL casing inconsistent across links. Force one case via 301.

Old redirects still in HTML Medium

Internal links never updated post-migration. Use a crawler to find and replace.

Redirects on every internal link Medium

Every link goes through 301. Update source links to final URL.

Trailing slash inconsistency Medium

/page and /page/ both indexed. Pick one and 301 redirect the other.

URLs with multiple parameters Medium

Long parameter chains hurt CTR and create duplicates. Clean URLs preferred.

URLs with special characters Medium

Spaces, %20, &, ? mid-path break consistency. Use clean ASCII slugs.

URLs with uppercase letters Medium

Mixed-case URLs treated as duplicates. Force lowercase via redirect.

URL with stop words Low

URLs cluttered with the/and/of. Remove stop words for cleaner slugs.

URLs too long Low

URLs above 100 chars hurt CTR. Shorten where possible.

URLs with underscores Low

Underscores read as one word by Google. Use hyphens between words.

Content Quality (30)

Auto-generated content High

Programmatically templated content with no human review. Audit and humanize.

Content shifted by ad insertions High

Mid-content ads push text down, causing CLS. Reserve fixed slots.

Content syndicated without canonical High

Republished content treated as duplicate. Always canonical to original.

Doorway pages High

Pages targeting same intent with thin variations. Consolidate into one strong page.

Duplicate cross-domain content High

Content syndicated to other sites without canonical. Set canonical to original.

Excessive ads above the fold High

Page is mostly ads on first screen. Demoted by Page Layout algorithm.

Heavy keyword stuffing High

Keyword density above 3-4% looks spammy. Rewrite naturally.

Hidden text or links High

white-on-white text or display:none links. Manual action risk.

High duplicate content ratio across pages High

60%+ of body identical across pages. Rewrite uniquely or canonicalize.

Lorem Ipsum placeholder live High

Placeholder text in production. Replace before launch.

No expertise indicators on YMYL content High

Health/finance content without expert author hurts trust. Show credentials prominently.

Pages with no unique value High

Content that mirrors what's already abundant. Rewrite with original perspective.

Staging URLs leaked to production High

Internal links to staging.domain.com in HTML. Audit and replace.

Test pages live in production High

/test, /staging URLs accessible. Block via robots.txt + return 410.

Translated content without hreflang High

Same content in multiple languages causes self-cannibalization. Add hreflang.

Affiliate-heavy pages Medium

Page is mostly affiliate links with thin commentary. Add genuine analysis.

Coming soon pages indexed Medium

Empty placeholder pages in index. Noindex or 404 until ready.

Editorial content mixed with ads Medium

Hard to tell article from advertising. Disclose sponsored content clearly.

Low-quality user-generated content Medium

Spam comments / forum posts indexed. Moderate or noindex.

Missing E-E-A-T signals Medium

No experience indicators (credentials, citations, reviews). Add visibly.

Missing privacy policy Medium

No privacy policy hurts trust + breaks GDPR/CCPA compliance. Add page.

No About page Medium

Site without About page lacks entity / E-E-A-T signal. Create with team + history.

Outdated content over 24 months Medium

Stale content suppressed by freshness signal. Update or noindex.

Pages without author info Medium

Long-form content needs visible author for E-E-A-T. Add author bio + schema.

PDF pages without HTML alternative Medium

PDFs with valuable content but no HTML version. Provide HTML for ranking.

Thin content pages Medium

Pages under 300 words on commercial intent rank poorly. Expand with depth.

Generic Contact page Low

Contact page with only a form lacks trust signal. Add address, phone, hours.

Missing terms of service Low

Trust signal for commercial sites. Add visible link in footer.

Pages without dates Low

Time-sensitive content without visible date hurts trust. Show publishedAt prominently.

Stale last-updated dates Low

Article shows 2019 date in 2026. Refresh and update lastEditedAt.

Local SEO (15)

Inconsistent NAP across listings High

Name/address/phone differs across directories. Audit + standardize.

Mismatched website and GBP info High

Hours / phone differ between website and GBP. Standardize both.

Missing Google Business Profile High

Local business without GBP. Most impactful local SEO surface.

Missing local schema High

Site without LocalBusiness schema. Add with NAP + hours + service area.

Multiple GBPs for one location High

Duplicate listings split traffic + reviews. Merge or remove duplicates.

No GBP reviews High

Few or no reviews on GBP. Build review-request flow into customer journey.

Suspended GBP High

GBP suspended for policy violation. Review reasons and submit reinstatement.

Wrong primary business category High

GBP category doesn't match core service. Pick most specific accurate category.

Empty GBP description Medium

GBP description blank. Fill with 750-char keyword-aware summary.

Missing local citations Medium

Few citations beyond GBP. Submit to Yelp, Apple Maps, BBB, Bing Places, top directories.

Negative reviews not responded to Medium

Negative reviews ignored hurts trust. Respond professionally to every review.

No business hours set Medium

GBP without hours hurts UX. Set primary hours + special hours for holidays.

No location landing pages Medium

Multi-location business with single page. Build per-location landing pages.

Wrong service area set Medium

Service area too broad/narrow on GBP. Match actual coverage.

Outdated GBP photos Low

GBP photos years old. Refresh quarterly with high-quality interior + team photos.

XML Sitemap (10)

JavaScript SEO (15)

Content rendered only by client-side JS High

Page body empty without JS execution. Add SSR or pre-rendering.

Critical content behind lazy-load High

Above-fold content lazy-loaded. Eager-load critical path.

Hash-based routing without history API High

/#/about URLs not crawled. Migrate to pushState routing.

Infinite scroll without pushState High

Loading more items without URL change. Implement pushState pagination.

JavaScript-set redirects High

JS-only redirect (window.location). Use server-side 301 instead.

JS frameworks blocking crawl High

React/Vue without SSR returns shell HTML. Use Next.js / Nuxt / pre-rendering.

Links rendered as span instead of anchor High

JS framework renders <span onclick> instead of <a href>. Crawlers can't follow.

PageSpeed degraded by third-party JS High

GTM, chat widgets, analytics dragging speed. Audit and defer.

Server-side rendering errors High

SSR throwing exceptions silently. Monitor server logs and SSR error rate.

Console errors visible to crawlers Medium

JS errors break rendering. Monitor and fix uncaught exceptions.

Hydration mismatches Medium

Server HTML differs from client render. Fix to avoid React/Vue warnings + flicker.

JavaScript-only schema markup Medium

JSON-LD injected by JS may not be seen consistently. Render server-side.

JavaScript-set canonical Medium

Canonical added by client JS. Move to server-rendered HTML.

Tag manager bloat Medium

GTM with 100+ tags adds 1-2s of blocking JS. Audit and remove unused tags.

Tracking pixels firing on every page Low

Pixels add up to significant blocking time. Defer and lazy-load.

AI & AIO (10)

Find every issue on your site automatically.

60-second free atlookup audit — every issue from this library, scored and prioritized.

Run free audit