How to Optimize Your Website for Search Engines
Technical SEO from the ground up: crawling, rendering, indexing, page speed, mobile and site structure — in the order that actually fixes things.
Technical SEO is not a ranking tactic. It is the set of conditions that have to hold before ranking is even possible: the crawler can reach your pages, render them, understand them, and decide they are worth storing. Get this wrong and no amount of content work compensates.
This is the order I work in on a site audit, because each stage depends on the one above it.
1. Crawlability — can the bot reach it?
A page nothing links to and that appears in no sitemap effectively does not exist. Before optimising anything, confirm there is a path to every page you care about.
- Every important page should be reachable within three clicks of the homepage. Deeper than that and crawl frequency drops sharply.
- Links must be real anchor tags with real hrefs. A div with an onclick handler is not a link and is not followed.
- robots.txt should block only what you genuinely want unseen. Blocking your CSS or JS stops the page rendering correctly and is a classic self-inflicted wound.
- Your XML sitemap should contain canonical, indexable URLs only — no redirects, no 404s, no noindex pages.
# robots.txt — permissive by default, specific about exclusions.
User-agent: *
Disallow: /api/
Disallow: /admin/
Disallow: /*?sort= # faceted duplicates, not content
# Never do this — it stops the page rendering at all:
# Disallow: /_next/static/
Sitemap: https://example.com/sitemap.xml2. Rendering — can the bot see the content?
Search engines execute JavaScript, but rendering is queued and expensive, and anything that fails silently in that queue is content the engine never sees. If your main copy only exists after a client-side fetch, you are gambling.
The test takes ten seconds: disable JavaScript in your browser and load the page. What remains is roughly the reliable case. If the page is blank, move your primary content to server-rendered or statically generated HTML.
3. Indexability — will the bot keep it?
Crawled ≠ indexed. Four things commonly cause a fetched page to be discarded, and all four are worth checking explicitly rather than assuming.
- A noindex meta tag or X-Robots-Tag header, often left over from a staging environment.
- A canonical tag pointing somewhere else, telling the engine the real version lives elsewhere.
- Near-duplicate content — the same page reachable at several URLs through parameters, trailing slashes, or http/https and www variants.
- Thin content the engine judged not worth storing. Tag archives and paginated pages with nothing unique on them are the usual culprits.
<!-- Every page states its own canonical URL, absolute and self-referencing.
Ambiguity here is what turns one page into four in the index. -->
<link rel="canonical" href="https://example.com/guides/technical-seo" />
<!-- And pick one host + protocol, enforced with a 301 at the edge:
http://example.com -> https://example.com
https://www.example.com -> https://example.com -->4. Site structure — does it make sense?
Structure tells the engine which pages matter and how topics relate. A flat pile of a thousand pages with no hierarchy gives it nothing to work with.
- Group content into topic clusters: one substantial hub page per topic, with focused pages linking up to it and to each other.
- Use descriptive URL paths that mirror that hierarchy. /guides/technical-seo tells you something; /p?id=8891 does not.
- Internal link with meaningful anchor text. 'Read more' passes no information; 'crawl budget' does.
- Keep one page per intent. Two pages targeting the same query compete with each other and split their own signals.
5. Speed and Core Web Vitals
Speed is a threshold, not a lever — being fast will not push you past a better answer, but being slow will drop you below an equal one. Three metrics matter, and they fail for different reasons.
- LCP — how long until the largest visible element paints. Usually an unoptimised hero image, a render-blocking font, or a slow server response.
- INP — how long the page takes to respond to an interaction. Usually too much JavaScript executing on the main thread.
- CLS — how much the layout jumps. Almost always images and ad slots without reserved dimensions.
<!-- Reserving the box removes the shift entirely: the browser knows the
aspect ratio before the bytes arrive. -->
<img src="/hero.webp" width="1600" height="900" alt="..."
fetchpriority="high" decoding="async" />
<!-- Self-hosted and preloaded, so text paints once rather than twice. -->
<link rel="preload" href="/fonts/inter.woff2" as="font"
type="font/woff2" crossorigin />Measure with field data, not lab scores. A Lighthouse run on your laptop tells you about your laptop. The Core Web Vitals report in Search Console tells you about your actual visitors, which is what is being judged.
6. Mobile
Indexing is mobile-first: the mobile rendering of your page is the version that gets indexed. If content is hidden, truncated or omitted on small screens, it is omitted from the index too.
Test on a real mid-range phone on a throttled connection, not a desktop browser resized to 375px. The two are not the same experience, and the gap is where most mobile problems live.
7. Structured data
Schema markup does not raise rankings directly. It removes ambiguity about what a page is, which makes eligibility for rich results and AI citations far more likely.
Add the types that genuinely describe your content — Article, Product, FAQPage, Organization, BreadcrumbList — and make sure the markup matches what is visible on the page. Schema that describes content the user cannot see is a manual action waiting to happen.
An audit order that finds real problems
- Search Console → Pages report. Read the 'not indexed' reasons. This is the highest-signal ten minutes available to you.
- Crawl the site and compare the URLs found against the URLs indexed. The gap is your problem list.
- Load key templates with JavaScript disabled. Anything missing is at risk.
- Check canonicals and redirects on one URL per template — errors here are systematic, not one-off.
- Only then look at Core Web Vitals, and only using field data.
The reason to work in this order is that technical problems cascade. A rendering failure looks like thin content; a canonical mistake looks like a ranking drop; a crawl trap looks like an indexing budget problem. Fix the top of the chain and a surprising number of symptoms below it disappear on their own.
Frequently asked questions
- What is technical SEO?
- The work of making sure search engines can crawl, render, index and understand a site — site architecture, speed, mobile rendering, canonicals, sitemaps and structured data. It is the precondition for ranking rather than a ranking tactic itself.
- Why are my pages crawled but not indexed?
- Most often a canonical pointing elsewhere, a leftover noindex tag, near-duplicate content across parameter variants, or content that only appears after client-side JavaScript. Check in that order.
- Does page speed affect rankings?
- It acts as a threshold. Being fast will not push you above a better answer, but being slow can drop you below an equally good one — and it measurably affects conversions regardless of ranking.
- Do I need structured data for SEO?
- It does not raise rankings directly, but it removes ambiguity about what a page is, which is what makes rich results and AI-answer citations possible. Mark up what is genuinely on the page and nothing more.
Working on something like this?
I take on product engineering, growth architecture and AI integration work.
mr@mrva.comKeep reading