Technical SEO Checklist for Website Developers
Technical SEO is the part of search work that lives in the codebase rather than in a content calendar. It is largely a checklist, and most of it is verifiable rather than a matter of opinion.
This guide is that checklist, grouped by the problem each item prevents, with the mistakes that are common enough to be worth naming.
Indexing controls#
The purpose here is that exactly the pages you want indexed are indexed, and nothing else — no staging copies, no filter permutations, no printer-friendly duplicates.
- One canonical hostname; every other variant 301s to it — including HTTP and the www/non-www twin.
- Self-referencing canonical on every indexable page.
- noindex, follow on thin or duplicate pages: internal search results, filter combinations, thank-you pages.
- Never block a page in robots.txt that carries a noindex tag — the tag can then never be read, so the URL lingers in the index.
- Staging blocked by HTTP authentication, not only by robots.txt.
- Parameter handling decided: which query strings create a distinct page and which do not.
noindex and a robots.txt block do opposite jobs and cancel each other out. If you want a page gone, allow crawling so the noindex can be seen.
Redirects and status codes#
Redirects are where relaunches quietly lose traffic. The failures are mechanical and easy to test before launch.
| Situation | Correct response | Common mistake |
|---|---|---|
| Page moved permanently | 301 to the equivalent page | 302, or redirect to the homepage |
| Page deleted, no equivalent | 410 or 404 | Soft 404: a "not found" page returning 200 |
| Temporarily unavailable | 503 with Retry-After | Returning 200 with an error message |
| Trailing slash variants | One canonical form, other 301s | Both serving the same content at 200 |
| Old domain | 301 mapped page by page | Everything to the new homepage |
| Redirect chains | Collapse to a single hop | A → B → C → D, losing signal at each step |
Pagination, facets and duplication#
Listing pages generate the largest index problems, because a handful of filters can produce thousands of URL combinations that all look like near-duplicates.
- Paginated pages: real crawlable links, each page self-canonical — do not canonicalise page 2 to page 1.
- Filter combinations: noindex, follow by default; index only the small number that match real search demand.
- Sort orders: never create a new indexable URL. Same content, different sequence.
- Session identifiers and tracking parameters: strip them, or canonicalise to the clean URL.
- Printer-friendly and AMP-style duplicates: canonical to the main version.
- Products in multiple categories: one canonical URL, linked from all of them.
Faceted navigation left open is the most common cause of index bloat, and it clears slowly. It is much cheaper to prevent at build time than to unwind afterwards.
Structured data and international setup#
Two areas where a mechanical error silently disables the whole feature.
| Item | Rule | Failure mode |
|---|---|---|
| Article markup | Only on real articles, with genuine dates | Fake freshness dates get the feature ignored |
| Product markup | Price and availability must match the page | Mismatch triggers a manual action |
| FAQ markup | Only for questions visible on the page | Hidden content is a policy violation |
| Breadcrumbs | Must match the visible trail | Diverging paths are simply ignored |
| hreflang | Reciprocal on every page in the set | One-way tags mean the whole cluster is dropped |
| hreflang codes | Same code in HTML and in the sitemap | Two different codes for the same page breaks the cluster |
| x-default | Points at the language selector or default version | Missing it costs the fallback behaviour |
Frequently asked questions
How do I find technical SEO problems on an existing site?
Crawl it with a desktop crawler and compare what you get against your sitemap and against Search Console coverage. The three lists disagreeing is where the problems are: URLs in the crawl but not the sitemap, URLs indexed but not in the crawl, and pages excluded for reasons you did not intend.
Do redirect chains really matter?
Yes, for two reasons. Each hop adds latency for real users, and crawlers stop following after a few. After a couple of migrations it is common to find chains four or five deep that nobody planned. Collapse them so every old URL points directly at the final destination.
Should I noindex tag and category pages?
Only if they are genuinely thin. A category page with a real description, a curated list and internal links is a legitimate landing page and often a strong one. A tag page with two posts and no text is index bloat. Judge each template on whether it answers a query someone actually has.
What breaks hreflang most often?
Non-reciprocal tags. If the English page lists the German alternate but the German page does not list the English one, the cluster is discarded. The second most common failure is declaring one code in the HTML and a different one in the sitemap for the same page. Generate both from the same source so they cannot diverge.
technical seoseo checklistcanonical tagsredirectshreflangstructured data