seo checklist
The working checklist we run on client sites, from meta tags to Core Web Vitals, grouped by priority so the tasks that matter most come first.
priority
critical
| Task | Why it matters | Priority | Resources |
|---|---|---|---|
| Meta tags: title and description | Write a unique title (50 to 60 characters, keyword near the front) and meta description (150 to 160 characters) for every page, because they decide whether searchers click. | critical | |
| Server side rendering | Serve main content and internal links in the raw HTML, not injected by JavaScript, because search engines render JavaScript inconsistently and most AI crawlers don't run it. | critical | |
| Core Web Vitals and page speed | Make every key template pass Core Web Vitals on real-user data (LCP 2.5s or less, INP 200ms or less, CLS 0.1 or less), since slow pages lose visitors and rankings. | critical | |
| Site architecture with subfolders | Group related pages into logical subfolders like /services/ and /blog/, so users and search engines can see where each page sits and sections are easy to measure. | critical | |
| SEO friendly URL structure and naming | Use short, lowercase, hyphenated slugs built on the page's target keyword, because clear URLs help searchers and mixed-case versions create duplicate pages. | critical | |
| Custom 404 page | Serve a helpful branded 404 page that returns a real 404 status, never a homepage redirect or a 200 OK, so search engines don't index dead pages as live. | critical | |
| Crawl the live website for issues | Crawl the live site with a tool like Screaming Frog or Sitebulb right after launch to catch broken links, redirect chains, duplicate titles and leftover noindex tags. | critical |
priority
high
| Task | Why it matters | Priority | Resources |
|---|---|---|---|
| Accessibility compliance: WCAG and ARIA roles | Meet WCAG basics (alt text, form labels, color contrast, keyboard navigation, correct ARIA roles), because accessible markup serves every visitor and is easier for crawlers to parse. | high | |
| Keywords in body content | Put the primary keyword in the H1 and the first 100 words, then use it only where it reads naturally, alongside related terms that make the topic unambiguous. | high | |
| Robots.txt | Publish a robots.txt that blocks only genuine crawl waste and points to your sitemap, and make sure no staging Disallow: / rule survives launch and blocks the whole site. | high | |
| Server response time under 200ms | Keep average response time to Googlebot under 200ms (check Search Console's crawl stats), since slower servers waste crawl budget and signal hosting problems. | high | |
| Date information for Google and AI | Show a visible published or last updated date on articles and match it in datePublished and dateModified structured data, so Google and AI tools can judge freshness. | high | |
| Security headers check | Scan the site at securityheaders.com, add the HTTP security headers it flags as missing, and re-scan to confirm the grade improved, since they protect visitors and build trust. | high | |
| Preferred sources in Google Search | Prompt regular readers to pick your site as a preferred source in Google, which makes your content more likely to show in Top Stories and AI Overviews. | high | |
| Self-referencing canonical tags | Add a self-referencing canonical tag pointing to each page's preferred final URL, so signals consolidate instead of splitting across parameter, http and www variants. | high | |
| Analytics setup: GA4 and Search Console | Install GA4 and verify a Search Console domain property as soon as the site is live, because several other checks on this list depend on their data. | high | |
| XML sitemap | Keep an auto-updated XML sitemap of only canonical, indexable 200 URLs (max 50,000 URLs or 50MB per file) and submit it in Search Console to speed up discovery. | high | |
| Page indexing report | Work through each reason in Search Console's page indexing report, so the index holds exactly the pages you want ranked rather than a bloated mix. | high |
priority
medium
| Task | Why it matters | Priority | Resources |
|---|---|---|---|
| Favicon | Add a square favicon larger than 48x48 pixels that isn't blocked by robots.txt, because Google shows it next to your site name in search results. | medium | |
| Image SEO | Give images descriptive filenames and alt text, declare width and height, compress to under 100KB in WebP or AVIF, and lazy-load below the fold for speed and image search. | medium | |
| Heading hierarchy with one H1 | Use one H1 for the page topic and nest H2s and H3s without skipping levels, so the headings alone read as a clear outline for readers and search engines. | medium | |
| Blog template best practices | Build trust signals into the blog template (author boxes, table of contents, breadcrumbs, published and updated dates, cited sources), since they help readers and search engines judge credibility. | medium | |
| Press or newsroom section | Add a press or newsroom page linking to third-party coverage of the company, because journalists check it when researching you and it shows independent credibility. | medium | |
| Footer as a categorized site index | Turn the footer into a categorized index of key pages in labeled columns, so visitors and crawlers can reach important sections from anywhere on the site. | medium | |
| Breadcrumbs | Add breadcrumbs that mirror the folder hierarchy and mark them up with BreadcrumbList schema, so visitors know where they are and search results show a clean path. | medium | |
| Trust building: E-E-A-T and company pages | Publish real About, Contact, team, author and legal pages and cite sources visibly, because Google's quality guidelines treat trust as the core of E-E-A-T (experience, expertise, authoritativeness, trust). | medium | |
| Pagination best practices | Give each paginated page its own URL (like ?page=2) joined by crawlable links, so search engines can reach every item; Google no longer uses rel=next/prev. | medium | |
| Don't hide content in accordions | Keep important content visible rather than hidden in accordions, tabs or read-more toggles, because Google is less likely to use hidden text in snippets. | medium | |
| Table of contents anchors | Give major headings stable id anchors and link them from a table of contents, so readers can jump to sections and Google can deep-link to them from results. | medium | |
| Open Graph and Twitter Card tags | Add Open Graph and Twitter Card tags that mirror your meta title, description and canonical, with a 1200 x 630 image, so shared links show a proper preview. | medium | |
| Semantic HTML5 markup | Use semantic tags (main, header, article, section, time, figure) instead of generic divs and keep pages under 900 DOM nodes, so crawlers understand the structure easily. | medium | |
| Nofollow tags for external links | Mark paid links rel="sponsored", user-generated links rel="ugc" and links you don't vouch for rel="nofollow", so search engines know which sources you actually endorse. | medium | |
| HTML sitemap | Publish a human-readable sitemap page of key pages grouped by section, giving visitors a one-page map and crawlers a shallow path to deeper pages. | medium | |
| Domain resolution test | Redirect every http, https, www and non-www variant to one preferred domain with a single 301 hop, so ranking signals aren't split across duplicate versions. | medium | |
| W3C markup validation | Run key templates through the W3C markup validator and fix errors like unclosed tags and duplicate ids, because clean markup parses predictably for browsers and crawlers. | medium | |
| Schema markup | Add JSON-LD structured data that fits each page type (Organization, Article, FAQPage, Product) and validate it in Google's Rich Results Test, so pages qualify for rich results. | medium | |
| Thank-you page with a 303 redirect | Answer successful form posts with a 303 redirect to one thank-you URL, so refreshing never resubmits the form and analytics gets one clean conversion goal. | medium |
Rather have it done for you? This is the work we do every day.