The Foundational Layer
Technical SEO is the foundation everything else sits on. The best content and strongest backlinks won't move rankings if Googlebot can't crawl your pages efficiently, or if your Core Web Vitals are failing.
Here is the complete 25-point checklist:
Security and Protocol
1. HTTPS everywhere — All pages must serve over HTTPS. HTTP pages won't rank competitively in 2026 and Chrome shows security warnings. Check: curl -I http://yourdomain.com — should redirect 301 to https.
2. HSTS header — Add Strict-Transport-Security header to prevent protocol downgrade attacks and signal long-term HTTPS commitment.
3. Mixed content — No HTTP resources (images, scripts, fonts) on HTTPS pages. Check Chrome DevTools Security panel.
Crawl and Indexation
4. XML sitemap — Submit at /sitemap.xml or /sitemap-index.xml. Must contain only indexable URLs (no noindex pages, no 404s, no redirects). Auto-update on deploy.
5. robots.txt — Test with GSC's robots.txt tester. Ensure you're not accidentally blocking /api/ routes, /blog/, or other important paths. Don't block CSS/JS — Googlebot needs to render your pages.
6. Canonical tags — Every page must have a self-referencing canonical tag. For paginated content, each page canonicals to itself (not to page 1). For duplicate content variants (URL params), canonical to the clean URL.
7. No redirect chains — Redirects should resolve in maximum 1 hop. A → B → C is a chain; it should be A → C. Use Screaming Frog to audit.
8. Custom 404 page — Return proper 404 HTTP status for missing pages (not 200 with "page not found" text — that's a soft 404). Include navigation links to help users find content.
9. No index bloat — Don't let tag pages, author pages, pagination, faceted navigation URLs, and URL parameters all get indexed. Use noindex, canonical, or robots.txt appropriately.
Mobile and Accessibility
10. Viewport meta tag — <meta name="viewport" content="width=device-width, initial-scale=1"> in every page's head.
11. No horizontal scroll on mobile — Test at 375px width. Horizontal overflow causes CLS and poor mobile experience.
12. Touch targets minimum 48px — Buttons and links must be large enough to tap accurately. GSC reports mobile usability issues.
13. Legible font sizes — Minimum 16px body text on mobile. GSC flags "Text too small to read" under mobile usability.
Page Speed and Core Web Vitals
14. LCP under 2.5 seconds — Largest Contentful Paint. Check in GSC Core Web Vitals report and PageSpeed Insights. Main fixes: preload hero image, use CDN, convert to WebP/AVIF, eliminate render-blocking resources.
15. CLS under 0.1 — Cumulative Layout Shift. Always set explicit width and height on images and video. Reserve space for ads and dynamic content.
16. INP under 200ms — Interaction to Next Paint. Break long tasks, defer non-critical JS, avoid synchronous work in event handlers.
17. Time to First Byte under 800ms — TTFB. If your server is slow, no amount of front-end optimization compensates. Use a CDN for static assets, optimize database queries, implement response caching.
Structured Data
18. Valid structured data — Test all schema markup with Rich Results Test. Fix any errors (warnings are lower priority). Invalid JSON-LD can be worse than no structured data.
19. No schema errors in GSC — Check Enhancements section for your schema types. Address errors before warnings.
URL and Site Architecture
20. Logical URL structure — URLs should be human-readable, hierarchical, and consistent. /blog/technical-seo-guide is better than /p?id=4821.
21. Internal linking depth — No important page should be more than 3 clicks from the homepage. Orphan pages (no internal links pointing to them) won't rank.
22. Pagination handled correctly — For blog listings, use rel=prev/rel=next (still honored by Google for crawl efficiency) or canonical each page to the main listing page.
JavaScript SEO
23. Critical content in server-rendered HTML — If your framework is client-side only, Googlebot may not execute JavaScript correctly. Use SSR or SSG for content that needs to rank.
24. No render-blocking scripts in head — Move non-critical scripts to end of body or use async/defer. Every render-blocking resource adds to LCP.
25. Dynamic rendering as fallback — For complex SPAs where SSR is impractical, consider prerendering (via Prerender.io or self-hosted solution) so Googlebot receives fully rendered HTML.
Links: Google Search documentation | Screaming Frog SEO Spider