# Technical SEO checklist for a small site

You ship the site and can fix it. This checklist gives you the 20 technical checks that move the needle on a site under 1,000 pages. It shows how to test each one for free and what a good fix looks like.

Updated 2026-09-13 · Source: https://porteur.ai/guides/technical-seo-checklist

## The twenty checks, in order

1. **Confirm the site resolves to one canonical host** Pick one version: https, not http. Choose either with or without www. Type http and https, with and without www, in a browser. Only the canonical should load, the others 301 to it. Use a redirect checker to spot 301 vs 302 and avoid chains.
2. **Serve valid status codes on core pages** Check /, /pricing and one blog post. They should return HTTP 200. A missing page should return 404, not 200. A retired page can return 410. Test with curl or any header checker. Fixed looks like /old-page 301s once to /new-page, not via a soft 404.
3. **Unblock crawl in robots.txt** Open yoursite.com/robots.txt. Do not disallow /. Do not block /assets that render content. List your XML sitemap at the end. Test syntax with a robots.txt tester. Fixed looks like Disallow rules that only hide admin and cart pages.
4. **Remove accidental noindex** View source on key pages. Meta robots should not contain noindex on URLs you want in Google. Check HTTP x‑robots‑tag too. Verify with URL Inspection in Search Console once you connect it. Fixed looks like noindex only on staging, test and thank-you pages.
5. **Make important content public** Google cannot fill forms or log in. Test your product list and knowledge base in a logged-out browser. Avoid gating crawler-only routes. Fixed looks like content rendered on the first HTML response, without a paywall for the snippet.
6. **Generate a clean XML sitemap** Create /sitemap.xml with only canonical, indexable 200 URLs. Keep lastmod dates accurate. Link it in robots.txt. Validate with an XML sitemap checker. Fixed looks like one index sitemap if you have many sections, sizes under common limits.
7. **Use one canonical URL per page** Set <link rel="canonical"> to the preferred URL. Avoid self-referencing errors and cross-canonicals across unrelated pages. Check with a canonical tag checker. Fixed looks like /guides/getting-started canonical to itself, UTM variants canonical to it.
8. **Normalise parameters and duplicates** UTM, sort and filter parameters create dupes. Canonical these to the clean URL. Noindex thin filter pages. Crawl with parameters to see variants. Fixed looks like /shirts?color=blue canonical to /shirts, only index colour pages if unique content exists.
9. **Flatten redirect chains** A to B to C wastes crawl. Map your redirects and collapse each chain to a single hop. Use a redirect checker on common legacy URLs. Fixed looks like http to https to www collapsed to http to https://www in one 301.
10. **Fix broken internal links** Crawl your site and list 4xx and 5xx targets. Update or remove links. Broken images and scripts count too. Re-run until zero remain. Fixed looks like /blog links updated after a slug change, images loading from the right path.
11. **Find and connect orphan pages** Pages with no internal links rarely rank. Export your URLs from the CMS or sitemap. Compare to a crawl. Link or remove or noindex. Fixed looks like /partners added under /about and linked from the footer and a relevant blog post.
12. **Set strong, unique title tags** Keep titles under about 60 characters. Put the main term first. Avoid duplicates. Spot dupes with a crawl export. Fixed looks like /pricing titled “Pricing | YourProduct” not “Home” everywhere.
13. **Write helpful meta descriptions** Descriptions do not rank, but they drive clicks. Keep them 120 to 155 characters. Describe the result plainly. Fixed looks like /guides/getting-started describing the steps the reader will take.
14. **Improve speed on a phone first** Run PageSpeed Insights on a few key pages. Aim for LCP under 2.5 seconds, CLS under 0.1, INP under 200 ms. Tackle the biggest issues first. Fixed looks like a smaller hero image, proper caching and fewer third-party scripts.
15. **Ensure mobile-friendly rendering** Open pages on a real phone. Check font sizes, tap targets, nav menus and cookie banners. Test key forms. Fixed looks like a responsive layout with a meta viewport tag and no horizontal scroll.
16. **Add structured data where it helps** Use schema.org types that match the page: Product, SoftwareApplication, Article, FAQPage, BreadcrumbList, Organization. Validate with Google’s Rich Results Test. Fixed looks like /pricing marking up prices in Product or SoftwareApplication.
17. **Use clear internal linking** Link related pages with descriptive anchor text. Add breadcrumb links. Keep key pages within a few clicks. Crawl to see depth. Fixed looks like /guides linking to /pricing and /features where relevant, not just “click here”.
18. **Set hreflang for multiple languages** If you run en, fr and de, add reciprocal hreflang tags between variants plus x-default. The canonical stays language-specific. Validate by checking each variant returns the right set. Fixed looks like /fr pointing to /en, /de and itself with correct codes.
19. **Handle pagination and archives** For /blog?page=2 and category pages, keep unique titles. Link to page 1 and to deeper pages. Do not canonical every page to page 1. Fixed looks like self-canonicals per page and clear next, previous links in the HTML.
20. **Monitor indexation and coverage** After fixes, check what is in Google. Use site:yourdomain.com for a quick sense. Once Search Console is connected, use the Indexing reports. Fixed looks like most canonical URLs in the sitemap also present in Google within a few crawls.

## Crawlability first: let Google fetch what matters

You win nothing if Google cannot fetch the page. Check robots.txt, authentication walls and server responses before you touch titles or links.

- Robots.txt: keep Disallow tight. Do not hide pages you want to rank.
- Status codes: 200 for live, 301 for permanent moves, 404 or 410 for gone.
- Rendering: do not block JS and CSS that draw the page.
- Public access: do not require a login for core marketing pages.

Why it matters on a small site: you do not have crawl budget issues, but one misplaced Disallow or noindex can remove half your site. Fixing crawl issues brings pages back without any new content.

How to do it: load /robots.txt in a browser. Test a few important paths with a robots tester. Use a header checker on /, /pricing and /blog/my-post. Browse in an incognito window to see the public view. A fixed site loads, renders and links in one request, no blocked assets and no soft 404s on thin pages.

## Indexation control, canonicals and duplicates

Get one indexable URL per piece of content. Canonicals and noindex tell Google what to show. Duplicates waste crawl and split signals.

- Self-canonical on every indexable page.
- Cross-canonical only for true duplicates like print views or UTM variants.
- Parameters: canonical to clean URLs for sort and tracking. Keep index only when content is unique.
- Noindex: thank-you pages, internal search results and thin filter pages.
- Redirects: one 301 from any old URL to its final canonical. Avoid chains and loops.

Why it matters: small sites often create duplicates with CMS settings, tags and filters. Fixing these gives each page a clear signal and improves click-through. It also makes sitemaps and internal links cleaner.

How to do it: crawl the site and export canonicals, status codes and titles. Sort by canonical target to spot many-to-one patterns. Test suspicious pairs in a browser. A fixed page shows one clean URL in search, with the right title and no stray parameter versions indexed.

## Sitemaps, robots and structure you can maintain

An XML sitemap is a list, not a fix. It should reflect what you want indexed, and nothing else. Keep it current and linked in robots.txt.

- Sitemap URLs must be 200, canonical and indexable.
- Keep lastmod accurate. Update when content changes, not on every deploy.
- Break into multiple sitemaps if your CMS supports it, for clarity.
- List the sitemap in robots.txt to aid discovery.
- Do not include noindex or redirected URLs.

Then, make the structure easy to crawl. Link key pages from your header, footer and relevant content. Keep depth shallow. Add breadcrumbs to give Google context and sitelinks paths.

How to do it: use a sitemap checker to validate the XML and fetch a sample of URLs. Crawl to measure click depth and to find orphan pages that are in the sitemap but not linked. A fixed site shows every sitemap URL reachable by links and returning 200.

## Titles and descriptions that earn clicks

You control titles. You influence descriptions. Both shape click-through when you do appear. Fix them while you audit duplicates.

- Keep titles unique and under about 60 characters.
- Front-load the key term and the page’s value: “Pricing for startups” beats “Home”.
- Template titles in your CMS to avoid repeats on tags and archives.
- Write plain meta descriptions between 120 and 155 characters that match the query intent.
- Avoid repeating the same keyword four times. It reads badly and will be rewritten.

How to do it: export titles and descriptions from a crawl, sort by duplicates and length. Spot gaps, then fix in templates first. Use a title checker to preview truncation. A fixed /pricing shows a tight title and a description that names plans and billing terms.

## Speed on a phone: Core Web Vitals targets

Performance affects bounce, conversions and rankings at the margin. For technical SEO, hit the Core Web Vitals on your key templates first.

- Largest Contentful Paint under 2.5 seconds on mobile.
- Cumulative Layout Shift under 0.1.
- Interaction to Next Paint under 200 ms.

How to do it: run PageSpeed Insights on /, /pricing, a feature page and one blog post. Fix the top issues it lists for those pages. Typical wins are smaller hero images, proper image formats, preloading the hero image, deferring non-critical JS and setting caching for static assets. A fixed page paints the hero fast and does not jump when fonts load or a cookie banner appears.

> Do not chase a perfect Lighthouse score. Hit the Core Web Vitals and move on to content and links.

## Structured data that matches your pages

Schema helps machines understand your content. Use it where it fits. Do not mark up what is not on the page.

- Organization on the homepage with your name, logo and sameAs profiles.
- BreadcrumbList sitewide if you show breadcrumbs.
- Product or SoftwareApplication on product pages, with prices and availability shown on the page.
- Article on blog posts, with author and date.
- FAQPage only when you show the questions and answers on the page.

How to do it: add JSON-LD in the head or body. Validate with Google’s Rich Results Test. Check a few URLs after deploy. A fixed /pricing with SoftwareApplication shows name, offers and price that match the visible content, and the test passes without warnings you can avoid.

## International setups: hreflang without harm

Only add hreflang if you have language or regional variants. Get the pairs right. Keep canonicals pointing to the same language version, not to a different one.

- Add hreflang links on each variant, pointing to all others including itself.
- Use the right codes, like en-gb for British English and en-us for US.
- Add x-default for a selector page.
- Keep titles and content localised to support the tags.

How to do it: view source on /, /fr and /de. Confirm each links to the others. Click between them to see language content. A fixed setup keeps users on their language and avoids Google swapping them in the results.

## Broken links, 404s and redirect hygiene

Links rot. Keep your internal graph clean. This protects crawl, user journeys and signals you pass with links.

- Fix all 4xx and 5xx internal targets, including images and scripts.
- Use 301 for permanent moves, 302 only for temporary ones.
- Return 404 or 410 on gone pages, not a soft 404 that shows a pretty page with a 200.
- Update internal links after any slug change, do not rely on redirects forever.
- Keep one hop only from any legacy URL to the current one.

How to do it: run a broken link check after each release. Test popular backlinks you know about and keep their target live or neatly redirected. A fixed site lets users and crawlers move through /blog, /features and /docs without hitting a wall or bouncing through chains.

## Questions

### How do I do a technical SEO audit step by step?

Work in this order: make the site crawlable, control indexation with canonicals and noindex, fix duplicates and redirects, clean your sitemap, tighten titles and internal links, then sort speed, structured data and hreflang. Check a few URLs per template, then scale the fixes in your CMS.

### What is the 80/20 rule for SEO?

On a small site, a handful of areas do most of the work: crawlability, canonicals and noindex, internal links, page titles and mobile speed. Fix those before chasing edge cases like complex parameter rules.

### Which free tools can I use for these checks?

Use your browser, curl or a header checker for status codes, a simple crawler to list URLs, Google’s PageSpeed Insights for performance and Google’s Rich Results Test for structured data. Search Console helps once you connect it, for indexing and coverage.

### How often should I run this checklist?

Run a full pass after major changes to templates, routing or hosting. Otherwise, spot check monthly: broken links, redirects, sitemap and Core Web Vitals on your top pages. Re-test after each fix.

### Do I need hreflang if I only serve English?

No. Hreflang is for language or regional variants. If you have only one language, skip it. Focus on clearer internal links and speed.

### Should every page be in the XML sitemap?

No. Only include canonical, indexable 200 pages you want in Google. Leave out redirects, parameter URLs, tag archives you noindex and thank-you pages.

## Read next

- [On-page SEO checklist: the twelve things on the page](https://porteur.ai/guides/on-page-seo-checklist): The twelve page elements that move clicks and rankings, with examples you can copy to your own product pages today.
- [How to use Google Search Console in ten minutes a week](https://porteur.ai/guides/how-to-use-google-search-console): A quick weekly routine: set four filters, compare 28 days, check pages then queries, and fix three findings, without getting lost in noise.
- [Canonical tags: what they do and the mistakes that cost rankings](https://porteur.ai/guides/canonical-tag): What a canonical tag does, when to use one, the mistakes that cost rankings, and how to check and fix canonicals on a small site.
- [Alternate page with proper canonical tag: what Search Console means](https://porteur.ai/guides/alternate-page-with-proper-canonical-tag): What this Search Console status means, when to ignore it, when it hides the wrong page, and the exact checks and fixes to set the right canonical.
- [Internal linking for a small site: which pages link to which](https://porteur.ai/guides/internal-linking-for-seo): Decide which pages rank. Build hubs, write clear anchors, fix orphans, and crawl your site to map links you control.
- [SEO for SaaS: a strategy for a team of one](https://porteur.ai/guides/seo-for-saas): What to rank and why for a SaaS site: the page families that work, pricing and comparisons, how to avoid thin content, and how to measure signups.
- [Shopify SEO: what the platform fixes, what it leaves to you](https://porteur.ai/guides/shopify-seo): What Shopify handles for SEO, what you must change, and a practical checklist for a new store: URLs, canonicals, data, speed, and Merchant Center.
- [Technical SEO](https://porteur.ai/glossary/technical-seo): Technical SEO is the machinery that lets Google crawl, render, index and serve your site. Here is what to check, how to measure it and what to fix first.

Drop your homepage URL and get a free technical read in about thirty seconds, with three findings on crawlability, indexation and speed you can fix today. Free check: https://porteur.ai/
