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.

By , founder of Porteur · Updated 13 September 2026 · Markdown

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.

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.

Questions

Sources

Check my site, free

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, no card
  • Read-only, your own accounts
  • Readable by your agent

Read next