Pourquoi un audit SEO technique est la première étape de toute optimisation
Avant de publier un seul article de blog ou de modifier une balise title, il faut comprendre l'état réel de votre site. L'audit SEO technique est ce diagnostic initial : il révèle les freins cachés qui empêchent Google de crawler, d'indexer et de positionner correctement vos pages.
Un site avec des problèmes techniques — même avec un contenu excellent — n'a aucune chance de bien se positionner. Google ne peut pas ranker ce qu'il ne peut pas lire.
Voici la checklist complète que j'utilise sur chaque nouveau client.
1. Accessibilité et crawlabilité
Vérifier le fichier robots.txt
Accédez à https://votresite.fr/robots.txt. Ce fichier doit exister et ne pas bloquer les pages importantes.
User-agent: *
Allow: /
# Exclure les pages sans valeur SEO
Disallow: /admin/
Disallow: /connexion
Disallow: /panier
Disallow: /compte/
Sitemap: https://votresite.fr/sitemap.xml
Erreur fréquente : laisser Disallow: / d'un environnement de développement en production. Ça se voit dans la Search Console sous "Pages exclues > Bloquées par robots.txt".
Analyser le sitemap XML
Le sitemap doit lister toutes les pages indexables et uniquement celles-là :
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://votresite.fr/</loc>
<lastmod>2025-01-15</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<!-- ... -->
</urlset>
Points à vérifier :
- Toutes les URLs utilisent HTTPS
- Pas d'URLs avec redirections ou erreurs 4xx
- Le sitemap est soumis dans Google Search Console
- Les dates
lastmodsont réelles (pas toutes identiques)
Tester la vitesse de crawl
Avec Screaming Frog (version gratuite jusqu'à 500 URLs), crawlez votre site et vérifiez :
- Temps de réponse moyen < 200ms
- Profondeur de crawl < 4 clics depuis la homepage
- Pas de pages orphelines (sans aucun lien entrant interne)
2. Protocole HTTPS et sécurité
Certificat SSL valide
# Vérifier la date d'expiration
echo | openssl s_client -servername votresite.fr -connect votresite.fr:443 2>/dev/null | openssl x509 -noout -dates
Assurez-vous que :
- Le certificat n'expire pas dans moins de 30 jours
- La redirection HTTP → HTTPS est en place (301, pas 302)
- Les URLs en dur dans le HTML utilisent HTTPS (pas de mixed content)
Détecter le mixed content
Dans Chrome DevTools → Console, les avertissements Mixed Content indiquent des ressources chargées en HTTP sur une page HTTPS. Ça nuit à la sécurité ET aux signaux de confiance pour Google.
<!-- ❌ Bad -->
<img src="http://cdn.example.com/photo.jpg">
<script src="http://code.jquery.com/jquery.min.js"></script>
<!-- ✅ Good -->
<img src="https://cdn.example.com/photo.jpg">
<script src="https://code.jquery.com/jquery.min.js"></script>
3. Core Web Vitals — les métriques qui comptent
Google utilise les Core Web Vitals comme signal de classement depuis 2021. Ces trois métriques sont incontournables.
LCP — Largest Contentful Paint (< 2.5s)
Le LCP mesure le temps de chargement du plus grand élément visible. Causes fréquentes de LCP dégradé :
- Image hero non optimisée : utilisez WebP, avec
widthetheightdéfinis - Polices web trop lourdes : limitez-vous à 2 familles max, avec
font-display: swap - Ressources CSS/JS bloquantes : utilisez
deferouasync
<!-- Optimisation LCP -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preload" as="image" href="/hero-image.webp">
<img src="/hero-image.webp"
width="1200" height="600"
loading="eager"
fetchpriority="high"
alt="Description précise">
CLS — Cumulative Layout Shift (< 0.1)
Le CLS mesure la stabilité visuelle. Chaque saut de contenu imprévisto augmente ce score.
Causes principales :
- Images sans dimensions définies
- Publicités insérées dynamiquement
- Polices web qui remplacent les polices système
/* Réserver l'espace pour les images */
img {
aspect-ratio: attr(width) / attr(height);
height: auto;
width: 100%;
}
/* Stabiliser les polices */
@font-face {
font-family: 'MaPolice';
font-display: swap; /* Évite le FOIT */
}
INP — Interaction to Next Paint (< 200ms)
Remplaçant du FID depuis mars 2024, l'INP mesure la réactivité aux interactions. Optimisez le JavaScript long-running :
// ❌ Bloque le thread principal
function traiterGrandeListeSync(items) {
items.forEach(item => {
// traitement lourd
});
}
// ✅ Traitement asynchrone par chunks
async function traiterGrandeListe(items) {
for (let i = 0; i < items.length; i += 50) {
const chunk = items.slice(i, i + 50);
chunk.forEach(item => { /* traitement */ });
await new Promise(r => setTimeout(r, 0)); // libère le thread
}
}
4. Balises meta et données structurées
Title et meta description
Chaque page doit avoir un title unique et une meta description engageante :
<!-- Longueurs recommandées -->
<title>Mot-clé principal + Nom du site | 50-60 caractères max</title>
<meta name="description" content="Description engageante avec CTA implicite, mot-clé inclus naturellement. 150-160 caractères.">
Audit rapide en masse avec Screaming Frog :
- Filtre :
Title→ trier par longueur - Repérer : titles > 60 chars, titles dupliqués, pages sans title
- Filtre :
Meta Description→ repérer manquants et dupliqués
Open Graph pour les réseaux sociaux
<meta property="og:title" content="Titre de votre page">
<meta property="og:description" content="Description pour les partages sociaux">
<meta property="og:image" content="https://votresite.fr/og-image.jpg"> <!-- 1200x630px -->
<meta property="og:url" content="https://votresite.fr/page">
<meta property="og:type" content="website">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Titre de votre page">
<meta name="twitter:image" content="https://votresite.fr/og-image.jpg">
Schema.org — les données structurées
Les rich snippets (étoiles, FAQ, événements) sont obtenus via Schema.org. Voici les types les plus utiles :
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Benjamin Schweitzer — Développeur web",
"url": "https://www.benjamin-schweitzer.fr",
"telephone": "+33612345678",
"address": {
"@type": "PostalAddress",
"addressLocality": "Strasbourg",
"addressCountry": "FR"
},
"priceRange": "€€",
"description": "Développeur web freelance spécialisé en sites performants"
}
5. Redirections et architecture des URLs
Audit des redirections
Les chaînes de redirections (A → B → C) ralentissent le crawl et diluent le PageRank :
# Vérifier une chaîne de redirections
curl -L -s -o /dev/null -w "%{url_effective}
%{http_code}
%{redirect_url}
" https://votresite.fr/ancienne-url
Règles d'or :
- Maximum 1 redirection dans une chaîne
- Toujours des 301 (permanent) pour les redirections définitives
- Mettre à jour les liens internes qui pointent vers des pages redirigées
Canonicals
La balise canonical indique à Google quelle est la "vraie" URL d'une page, évitant le contenu dupliqué :
<!-- Sur toutes les pages dupliquées, pointer vers l'original -->
<link rel="canonical" href="https://votresite.fr/produit/chaussure-cuir">
<!-- La page originale pointe sur elle-même -->
<link rel="canonical" href="https://votresite.fr/produit/chaussure-cuir">
Cas fréquents nécessitant un canonical :
- Page produit accessible via plusieurs catégories
- Version imprimable d'un article
- Pages de pagination (
?page=2) - Paramètres de tracking dans l'URL (
?utm_source=...)
6. Performance des images
Les images représentent en moyenne 50% du poids d'une page. C'est le levier le plus facile à optimiser.
Conversion en WebP
# Convertir tous les JPEG/PNG en WebP (cwebp)
find ./images -name "*.jpg" -o -name "*.png" | while read f; do
cwebp -q 80 "$f" -o "${f%.*}.webp"
done
# Compression avancée avec squoosh-cli
npx @squoosh/cli --webp '{"quality":80}' images/*.jpg
Lazy loading natif
<!-- Images hors-viewport -->
<img src="photo.webp" loading="lazy" width="800" height="600" alt="...">
<!-- Image hero : toujours eager -->
<img src="hero.webp" loading="eager" fetchpriority="high" width="1200" height="600" alt="...">
Srcset pour le responsive
<img src="photo-800.webp"
srcset="photo-400.webp 400w,
photo-800.webp 800w,
photo-1200.webp 1200w"
sizes="(max-width: 768px) 100vw,
(max-width: 1200px) 50vw,
800px"
alt="Description" loading="lazy">
7. Maillage interne et structure de site
Vérifier la profondeur des pages
Aucune page importante ne devrait être à plus de 3 clics de la homepage. Avec Screaming Frog → "Crawl Depth", repérez les pages trop profondes.
Équilibrer les ancres de liens internes
<!-- ❌ Ancre générique — peu de valeur SEO -->
<a href="/services/referencement">Cliquez ici</a>
<!-- ✅ Ancre descriptive — signal thématique fort -->
<a href="/services/referencement">référencement naturel SEO</a>
Réparer les liens cassés
Un outil comme Screaming Frog ou Ahrefs Site Audit repère automatiquement les erreurs 404 internes. Corrigez-les ou redirigez-les — les liens cassés nuisent à l'expérience utilisateur ET au budget de crawl.
8. Indexation et Search Console
Vérifier les pages exclues
Dans Google Search Console → Indexation → Pages, vérifiez les catégories :
- Redirigées : normal si ce sont d'anciennes URLs
- Exclues par balise noindex : vérifiez que ce sont bien des pages à exclure
- Détectées mais non indexées : pages que Google a trouvées mais décidé de ne pas indexer (souvent faible valeur)
- Crawl anomaly : problèmes techniques à corriger
Forcer l'indexation des nouvelles pages
# Dans Search Console → Inspection d'URL
# Coller l'URL → "Demander l'indexation"
N'abusez pas de cette fonctionnalité — elle est limitée à quelques dizaines de requêtes par jour.
Prioriser les actions de l'audit
Après l'audit, classez les problèmes par impact × effort :
| Priorité | Action |
|---|---|
| 🔴 Critique | HTTPS, robots.txt bloquant, erreurs 5xx |
| 🟠 Important | Core Web Vitals, canonical manquants, titles dupliqués |
| 🟡 Modéré | Images non optimisées, maillage interne, profondeur de page |
| 🟢 Souhaitable | Schema.org, Open Graph, ancres de liens |
Pour aller plus loin : Google Search Console