You publish, you polish your titles, you add the right keywords, and the curve does not move. Before concluding that SEO does not work, check something far more down to earth: can the search engines even read your site? Technical SEO does not push a page up; it removes what is stopping it from rising. Here is a technical SEO audit in seven families of checks, ranked by real impact, with the commands and the thresholds to run it yourself; if the problem turns out to be editorial, our ten actions to improve your Google rankings cover the other half of the subject.
The prerequisite: are your pages even being crawled?
A search engine works in four stages: it crawls, it renders, it indexes, it ranks. A blockage at the first link in the chain makes the next three pointless, and these failures are silent ones: nobody receives an alert when a noindex tag is left in place after a site goes live.
- The robots.txt file. The most widespread misconception: a
Disallowdoes not prevent indexing, it prevents reading. A blocked address can appear in the results with no description, the worst of both worlds. To remove a page from the index, leave it crawlable and give it anoindex. - Indexing directives. They live in two places: the
meta name="robots"tag and theX-Robots-TagHTTP header, which nobody ever looks at and which overrides everything else. - The actual response code. A page that displays “content not found” with a 200 code is a soft 404: the engines keep it in memory and go on visiting it for months.
- Orphan pages. Compare the addresses in your sitemap with those reached by a crawler starting from the home page. The difference is the pages that no link leads to.
The first two checks fit into two lines of terminal:
curl -sIL https://exemple.fr/services/ | grep -iE "^HTTP|x-robots-tag|^location"
curl -s https://exemple.fr/services/ | grep -io '<meta[^>]*robots[^>]*>'
A word on crawl budget, which turns up, wrongly, in nine out of ten audits we read. Google explicitly reserves it for sites with more than a million addresses, or more than ten thousand addresses that change every day. A 60-page brochure site is not concerned. Redirect chains and the thousands of parameter addresses spawned by a catalogue filter, on the other hand, do genuinely waste crawling.
Structure: what your site says about itself
A site’s architecture is a statement of importance. A page linked from the main navigation and cited in ten articles says clearly, “I matter.” A page reachable only from page 4 of a pagination says the opposite, however much care went into its content.
The famous three-click rule has never been a search engine criterion. The real criterion is easier to handle: list the twenty pages that make your turnover, then measure their distance in clicks from the home page. Any important page more than three clicks away, with no contextual link pointing to it, is a page you have abandoned without knowing it.
Two checks complete the picture. Category coherence first: a taxonomy of ten categories for forty articles structures nothing, it dilutes. Then internal linking, which remains the cheapest and most under-used lever in SEO. A well-placed contextual link, with a descriptive anchor rather than a “read more”, costs thirty seconds and works for years.
Duplicates and dispersion
Duplicate content carries no penalty, despite a persistent legend to the contrary. It produces something more insidious: dispersion. Three addresses serving the same content share the links and the engine’s attention between them, and none of the three reaches the level a single one would have reached. The causes always come back in the same order.
| Cause | What the engine sees | Fix |
|---|---|---|
| Trailing slash, www, HTTP | Up to eight variants of the same page | A single canonical form, the others on a 301 redirect |
| Tracking parameters (utm, gclid) | A new address with every campaign | Canonical tag pointing to the clean address |
| Catalogue filters and sorts | Hundreds of crawlable combinations | nofollow links or non-crawlable parameters, canonical to the category |
| Pagination | Pages 2 to 40 competing with page 1 | Each page canonical to itself, never to page 1 |
| Cloned local pages | Ten identical pages, give or take a town name | Merge them, or rewrite them with genuinely local content |
One clarification that changes the way you work: the canonical tag is a signal, not an order. Google says so in black and white and sometimes settles on a different address, particularly when the internal links contradict the canonical. And when two pages have been fighting over the same search intent for months, settling it with a canonical is the wrong reflex: merge them and redirect. The subject overlaps with the most common SEO mistakes, of which cannibalisation is the most stubborn.
Structured data, without the mythology
Structured data describes your page in a vocabulary that machines understand, the vocabulary of Schema.org. It helps comprehension and makes certain rich results possible. It does not move a page up the rankings, and no search engine has ever claimed otherwise.
The landscape has shifted recently, and many audits have yet to take it in. Google stopped showing FAQ rich results on May 7, 2026, then withdrew the corresponding documentation on June 15, 2026; HowTo markup had met the same fate before that. A strategy built on stacking up blocks of questions to take up room in the results therefore no longer has any purpose. Our own articles keep this markup, this one included, because conversational answer engines can still read it, but we no longer present it as a lever for visibility in the results.
For a service business, four types do the job: Organization, LocalBusiness where there is an address and opening hours, Article for the blog, BreadcrumbList for navigation. Add Product and Offer if you sell, and Review only if the reviews are real and verifiable. The recommended format is JSON-LD:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://exemple.fr/"},
{"@type": "ListItem", "position": 2, "name": "Services", "item": "https://exemple.fr/services/"},
{"@type": "ListItem", "position": 3, "name": "Technical audit"}
]
}
</script>
Rendering: when the content does not exist for the engine
Between crawling and indexing slips a stage that the audits we read almost always leave out: rendering. The engine first fetches the raw source code. If the text is not in it, because JavaScript injects it afterwards, the page goes into a queue, with a variable delay and no guarantee of a result.
The check takes ten seconds and needs no tool at all:
curl -s https://exemple.fr/services/ | grep -c "your opening line"
If the counter returns 0 while the sentence displays perfectly in the browser, your content does not exist on the first pass. Applied to navigation links, the test is even more telling: links built in JavaScript that do not appear as <a href> tags in the raw source pass on nothing.
The fix never consists of removing the JavaScript, but of deciding where the HTML is made. Server-side rendering or pre-generation: in both cases, the engine receives a complete page at the first attempt. It is one of the criteria for choosing a technical foundation, which we detail in our comparison of Astro vs WordPress, and it is the first subject to deal with for the SEO of a headless WordPress site.
Performance and stability signals
Three indicators count, measured on real visitors, at the 75th percentile, over a rolling 28-day window. A useful reminder, because the mistake is common: INP replaced FID among the Core Web Vitals in March 2024. An audit that still talks to you about FID is working from material written before that date.
| Indicator | What it measures | “Good” threshold |
|---|---|---|
| LCP | Display of the largest visible element | 2.5 s or less |
| INP | Responsiveness to the visitor’s interactions | 200 ms or less |
| CLS | Visual stability while the page loads | 0.1 or less |
Two principles to keep your bearings. Field data takes precedence over lab tests: a score of 98 on a one-off measuring tool says nothing about what your visitors experience on a mid-range phone over 4G. And separate your leading pages from the secondary ones: optimising an article read twelve times a month while the pricing page takes four seconds to appear is a misallocation of effort. The full diagnostic chain is set out in our method for diagnosing a slow website, and the commercial stakes in page speed and its effect on SEO and conversions. Round it off with a check for recurring 5xx errors: they signal saturation, not an SEO problem, but they cost you crawling and trust.
Our position: what an audit should produce
An audit that hands you three hundred anomalies is not an audit, it is an export. We see them regularly: forty pages generated by a tool and delivered just as they came out, half the lines concerning attributes with no effect. The client pays, understands nothing, fixes nothing. A useful audit produces ten decisions, each with an estimated gain, an estimated effort, an owner and a deadline. The sorting goes like this:
| Family | Impact if it fails | Effort to fix |
|---|---|---|
| Crawling and indexing | Total: the page does not exist | Low, often a single line |
| Content rendering | High, content only partly seen | High, touches the foundations |
| Duplicates and canonicals | High, dispersion of signals | Medium |
| Structure and internal linking | Medium to high, cumulative | Low, purely editorial |
| Field performance | Medium, acts on conversions | Variable |
| Structured data | Low today | Low |
| Recurring server errors | Medium | Depends on the hosting |
Our stance: we never deliver a report without having fixed at least the blockages in the first row. A site whose three service pages carry a forgotten noindex does not need a document; it needs someone to remove the tag the same day. That is the logic behind our SEO support.
This technical audit is the first step of any SEO engagement with our agency in Pau, in south west France.
Frequently asked questions
Is technical SEO enough to rank well?
No. It takes the brakes off; it does not create demand. A technically impeccable site with no useful content and no reputation stays invisible. The reverse is also true: excellent content on a site that blocks crawling will never surface.
How often should you audit?
Once a year for a stable site, and systematically after a redesign, a migration, a change of host or the addition of a catalogue. Between two audits, a monthly look at the indexing report is enough.
Do you need a paid tool?
Not to begin with. Search Console, the free version of a site crawler and the curl command cover 80% of the checks described here. Paid tools save time on large catalogues, not on a 200-page site.
My pages are indexed but invisible. Why?
Indexing and ranking are two different things. If your pages are properly indexed, the problem is no longer technical: it is editorial, competitive or tied to the reputation of the domain.
Technical SEO does not win you anything; it stops you losing. A sound site gives every piece of content the chance it deserves; an unsound one silently wastes every hour spent writing. Start with the two commands in the first section: within five minutes they will tell you whether the rest of your work stands a chance.
Also worth reading: 7 SEO mistakes killing your Google visibility


