Liste de contrôle d'audit technique SEO : guide en 100 points
Un audit technique de référencement ne concerne pas les balises méta et la densité des mots clés : il s'agit d'un examen technique systématique de la qualité de la communication de votre site avec les moteurs de recherche. L'exploration, l'indexation, les Core Web Vitals, les données structurées, la canonisation et les signaux internationaux affectent tous votre classement avant qu'un seul élément de contenu ne soit évalué. En 2026, alors que les moteurs de recherche basés sur l’IA et l’AEO (Answer Engine Optimization) deviennent aussi importants que le référencement traditionnel, la base technique compte plus que jamais.
Cette liste de contrôle en 100 points est organisée par catégorie. Parcourez-le systématiquement et suivez les résultats dans une feuille de calcul. Corrigez les éléments critiques (marqués C) avant tout autre travail d’optimisation – ils peuvent empêcher le reste d’avoir un effet.
Points clés à retenir
- L'exploration est la première porte : si Googlebot ne peut pas accéder à vos pages, rien d'autre n'a d'importance
- Core Web Vitals (LCP, INP, CLS) sont des signaux de classement confirmés ; cible LCP < 2,5 s, INP < 200 ms, CLS < 0,1
- Les balises canoniques empêchent la dilution du contenu en double - chaque page a besoin d'une pointant vers elle-même
- hreflang est obligatoire pour les sites multilingues ; x-default doit être défini pour chaque groupe d'URL
- Les données structurées (JSON-LD) permettent des résultats riches et sont essentielles pour l'attribution des sources AI/LLM
- Le HTTPS est un enjeu de table en 2026 ; le contenu mixte bloque l'indexation des pages concernées
- L'indexation axée sur le mobile signifie que votre expérience mobile est ce que Google évalue
- Les liens internes avec un texte d'ancrage descriptif distribuent le PageRank et signalent la pertinence du sujet
Section 1 : Crawlabilité et indexation (C = Critique)
robots.txt
- (C)
robots.txtest accessible à/robots.txtet renvoie 200 - (C) URL du plan du site déclarée :
Sitemap: https://example.com/sitemap.xml-[ ] Les pages clés ne sont pas accidentellement bloquées parDisallow - Directives de taux d'exploration séparées pour les robots agressifs
- Les robots d'exploration IA explicitement autorisés ou interdits par politique (GPTBot, ClaudeBot, OAI-SearchBot)
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /auth/
Sitemap: https://ecosire.com/sitemap.xml
# Allow AI indexers
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
Plan du site XML
- (C) Le plan du site renvoie 200 avec le
Content-Type: application/xmlcorrect - (C) Toutes les URL canoniques incluses ; aucune URL bloquée par robots.txt ou noindex
- Les dates
<lastmod>sont exactes (pas toutes les mêmes dates statiques) -
<priority>et<changefreq>définis de manière appropriée par type de page -[ ] Plan du site divisé en index + sous-sitemaps pour les sites avec plus de 50 000 URL - Plan du site soumis à Google Search Console et Bing Webmaster Tools
- Plan du site avec images inclus pour les pages contenant beaucoup d'images
- URL de langues alternatives dans le plan du site (hreflang)
// Next.js sitemap.ts — programmatic with correct lastmod
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getAllBlogPosts();
return [
{
url: 'https://ecosire.com',
lastModified: new Date(),
changeFrequency: 'daily',
priority: 1.0,
},
...posts.map((post) => ({
url: `https://ecosire.com/blog/${post.slug}`,
lastModified: new Date(post.updatedAt),
changeFrequency: 'weekly' as const,
priority: 0.8,
})),
];
}
Budget d'exploration
- Les pages de pagination utilisent
rel="next"/rel="prev"(ou défilement infini avec SSR) - Les URL de navigation à facettes sont soit canonisées, soit non indexées.
- ID de session et paramètres de suivi exclus des URL indexées
- Chaînes de redirection limitées à un saut (A vers B, pas A vers B vers C)
- Pas de soft 404 — 404 pages renvoient HTTP 404, pas 200
Section 2 : HTTPS et sécurité
- (C) Toutes les pages servies via HTTPS avec un certificat valide
- (C) Redirection HTTP vers HTTPS (301, pas 302)
- (C) Aucun avertissement de contenu mixte (ressources HTTP sur les pages HTTPS)
-[ ] HSTS activé avec
max-age=31536000; includeSubDomains; preload - Il reste plus de 90 jours au certificat SSL
- Le certificat couvre les variantes www et non-www
- Chaîne de certificats complète (aucune autorité de certification intermédiaire manquante)
# Nginx HTTPS configuration
server {
listen 443 ssl http2;
server_name ecosire.com;
ssl_certificate /etc/letsencrypt/live/ecosire.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ecosire.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
Section 3 : Éléments essentiels du Web
Largest Contentful Paint (LCP) — Cible : moins de 2,5 s
-[ ] (C) Élément LCP identifié dans CrUX/PageSpeed Insights
- Image/vidéo de héros préchargée avec
<link rel="preload" as="image">-[ ] Image LCP diffusée avec l'attributfetchpriority="high"correct -[ ] Images au format WebP ou AVIF, et non PNG/JPEG si possible - Images dimensionnées de manière appropriée (aucune image de 4 000 px affichée à 800 px)
- CDN servant des actifs statiques avec mise en cache périphérique
- Serveur TTFB sous 800 ms (réduit la fenêtre LCP)
// Next.js: priority prop preloads the hero image
<Image
src="/hero.webp"
alt="Hero image"
width={1200}
height={630}
priority
sizes="100vw"
/>
Interaction avec Next Paint (INP) – Cible : moins de 200 ms
- Tâches longues (plus de 50 ms) identifiées et découpées
- JavaScript lourd différé ou chargé paresseux
-[ ] Les gestionnaires d'événements sont efficaces et ne provoquent pas de recalculs de mise en page
-[ ] Scripts tiers chargés avec
asyncoudefer
Cumulative Layout Shift (CLS) — Cible : inférieure à 0,1
- (C) Toutes les images et vidéos ont des attributs explicites
widthetheight - Les polices Web utilisent
font-display: optionalouswapavec ajustement de la taille - Les espaces publicitaires ont des dimensions réservées -[ ] Contenu injecté dynamiquement au-dessus de la ligne de flottaison évité
- Les animations utilisent uniquement
transformetopacity(pastop,left,width)
Section 4 : Structure des URL et canonisation
- (C) Chaque page a une balise canonique auto-référencée
- (C) L'URL de la balise canonique correspond à l'URL réellement servie (barre oblique finale cohérente)
- redirection www et non-www vers la version canonique - [ ] Les URL sont en minuscules, avec des traits d'union comme séparateurs de mots, sans traits de soulignement.
- Profondeur de l'URL au maximum à 4 niveaux à partir de la racine pour les pages importantes
- Aucun paramètre d'URL créant du contenu en double sans canonisation
- Les séries paginées sont canonisées jusqu'à la première page (ou chaque page auto-canonique)
// Next.js generateMetadata with canonical
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale, slug } = await params;
const base = locale === 'en' ? '' : `/${locale}`;
const canonicalUrl = `https://ecosire.com${base}/blog/${slug}`;
return {
alternates: {
canonical: canonicalUrl,
languages: buildHreflangUrls(slug), // all 11 locales
},
};
}
Section 5 : Métadonnées et référencement sur la page
- (C) Chaque page a une balise
<title>unique (50-60 caractères) - (C) Chaque page a un
<meta name="description">unique (150-160 caractères) - Les titres suivent le modèle :
Primary Keyword | Brand Name - Aucune balise de titre en double sur le site
- Balises Open Graph :
og:title,og:description,og:image,og:url,og:type - Balises de la carte Twitter/X :
twitter:card,twitter:title,twitter:image-[ ] Les images OG font 1 200 x 630 px, moins de 8 Mo, diffusées à partir du CDN. -
<meta name="robots">utilisé uniquement pour restreindre (non redondantindex,follow) -
<html lang="en">défini correctement pour toutes les pages
Section 6 : Données structurées (JSON-LD)
- (C) JSON-LD préféré à Microdata/RDFa (plus facile à maintenir, convivial pour l'analyseur)
- Schéma d'organisation sur la page d'accueil avec les URL de profil social
sameAs - Schéma du site Web avec
SearchActionpour la zone de recherche des liens annexes - Schéma BreadcrumbList sur toutes les pages sous la page d'accueil
- Schéma d'article sur les articles de blog avec
datePublished,dateModified,author - Schéma FAQPage sur les pages avec des sections FAQ
- Schéma du produit sur les pages produits avec
offers,aggregateRating - Schéma de service sur les pages de service avec
areaServed,serviceType - Propriété
inLanguagesur tous les schémas pour l'attribution d'IA multilingue -[ ] Données structurées validées dans le test Rich Results de Google
// JSON-LD with XSS protection
// The .replace() encodes the less-than sign to prevent </script> breakout,
// making this safe for use in a script tag (no untrusted HTML rendered)
export function JsonLd({ data }: { data: Record<string, unknown> }) {
const safeJson = JSON.stringify(data).replace(/</g, '\\u003c');
return (
<script
type="application/ld+json"
// Safe: safeJson is a sanitized JSON string, not HTML
dangerouslySetInnerHTML={{ __html: safeJson }}
/>
);
}
// Usage
const schema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
inLanguage: locale,
mainEntity: faqs.map((faq) => ({
'@type': 'Question',
name: faq.question,
acceptedAnswer: { '@type': 'Answer', text: faq.answer },
})),
};
<JsonLd data={schema} />
Section 7 : Référencement international
- (C) balises hreflang sur toutes les pages avec variantes linguistiques
- (C)
x-defaulthreflang défini pour chaque groupe d'URL - les attributs hreflang sont bidirectionnels (si /en/ est lié à /fr/, /fr/ doit renvoyer à /en/) -[ ] Les URL de paramètres régionaux utilisent les codes de langue ISO 639-1 + les codes de région ISO 3166-1 si nécessaire
-
<html lang="xx">correspond aux paramètres régionaux hreflang de cette page - Les langues RTL (arabe, hébreu, ourdou) utilisent
dir="rtl"sur<html> - Le contenu est traduit, pas seulement traduit automatiquement sans révision
- Ciblage géographique défini dans Google Search Console par sous-répertoire de paramètres régionaux
// Next.js hreflang via generateMetadata
const locales = ['en', 'zh', 'es', 'ar', 'pt', 'fr', 'de', 'ja', 'tr', 'hi', 'ur'];
// In generateMetadata:
// alternates.languages keys must be BCP 47 language tags
alternates: {
languages: Object.fromEntries([
['x-default', `https://ecosire.com/blog/${slug}`],
['en', `https://ecosire.com/blog/${slug}`],
['zh', `https://ecosire.com/zh/blog/${slug}`],
['ar', `https://ecosire.com/ar/blog/${slug}`],
// ... all 11 locales
]),
},
Section 8 : Performances et infrastructure
- Actifs statiques servis depuis CDN (CloudFront, Cloudflare, Fastly)
- Mise en cache du navigateur :
Cache-Control: public, max-age=31536000, immutablepour les actifs hachés - Compression Gzip ou Brotli activée sur le serveur
- HTTP/2 ou HTTP/3 activé
- DNS TTL 3 600 ou moins pour un basculement agile
- Temps de réponse du serveur inférieur à 200 ms pour HTML (mesure TTFB)
- Bundle JavaScript de moins de 250 Ko de charge initiale (gzippé)
- JavaScript inutilisé éliminé (tree-shaking, code splitting)
- CSS purgé des règles inutilisées en production
# Nginx compression + caching headers
gzip on;
gzip_types text/html text/css application/javascript application/json image/svg+xml;
gzip_min_length 1024;
location /_next/static/ {
expires max;
add_header Cache-Control "public, max-age=31536000, immutable";
}
Section 9 : Expérience mobile et utilisateur
- (C) Balise méta de la fenêtre :
<meta name="viewport" content="width=device-width, initial-scale=1">-[ ] Tous les éléments interactifs ont des cibles tactiles d'au moins 48x48px - Pas de défilement horizontal sur mobile (largeur maximale : 100 vw)
- Taille de police d'au moins 16 px pour le corps du texte (empêche le zoom automatique iOS sur le focus d'entrée)
- Navigation mobile testée sur des appareils réels (iOS Safari, Chrome Android)
- Les pop-ups et les interstitiels ne couvrent pas le contenu principal sur mobile
- Appuyez pour appeler sur des numéros de téléphone pour les visiteurs mobiles
Section 10 : AEO (Optimisation du moteur de réponse)
De plus en plus important pour les moteurs de recherche IA et les assistants vocaux :
- Réponses clés enveloppées dans l'attribut
data-speakable -
<details>/<summary>utilisé pour le contenu de la FAQ pliable (explorable, sémantique) -[ ]/llms.txtet/.well-known/llms.txtpubliés pour les robots d'exploration IA - Paragraphes de réponses concis et factuels en haut des sections clés (optimisation des extraits de code)
- Relations d'entité claires dans les données structurées (Organisation vers Services vers Produits)
- Nom de marque cohérent sur toutes les pages, profils sociaux et répertoires
- API IndexNow utilisée pour la soumission instantanée d'URL après la publication d'un nouveau contenu
Questions fréquemment posées
À quelle fréquence dois-je effectuer un audit technique de référencement ?
Exécutez un audit complet tous les trimestres et une analyse légère (Screaming Frog ou Sitebulb) mensuellement. Tout changement important sur le site (nouvelle pile technologique, migration, ajout de contenu international, refonte majeure) justifie un audit immédiat. Configurez une surveillance continue via les alertes de Google Search Console en cas de baisse soudaine des pages indexées ou d'erreurs d'exploration.
De quels outils ai-je besoin pour un audit technique de référencement ?
Au minimum : Google Search Console (gratuit, canonique), Screaming Frog ou Sitebulb (analyse d'exploration), PageSpeed Insights (Core Web Vitals), Google Rich Results Test (données structurées), WebAIM Contrast Checker (accessibilité/UX) et Ahrefs ou Semrush (backlinks, classement des mots clés). Pour les sites utilisant beaucoup de JavaScript, ajoutez Rendertron ou Botify pour l'exploration du rendu.
Quel est le problème SEO critique le plus fréquemment rencontré lors des audits ?
Les mauvaises configurations des balises canoniques sont le résultat critique le plus courant : soit elles sont entièrement manquantes, pointent vers la mauvaise URL (souvent un domaine de développement ou de préparation laissé en production), soit elles sont incompatibles avec l'utilisation d'une barre oblique finale. La deuxième plus courante concerne les directives noindex accidentelles provenant des plugins CMS ou des configurations intermédiaires laissées dans les versions de production.
Next.js App Router facilite-t-il le référencement technique ?
Oui, de manière significative. Le rendu côté serveur signifie que tout le contenu se trouve dans la réponse HTML initiale (aucun JavaScript n'est requis pour l'exploration). Les métadonnées generateMetadata() par page évitent les erreurs de métadonnées statiques globales. Les conventions sitemap.ts et robots.ts facilitent la maintenance de ces fichiers par programme. Le composant Image intégré applique la largeur et la hauteur pour la prévention CLS et génère automatiquement des variantes WebP/AVIF.
Comment gérer le référencement pour le contenu paginé ?
Pour les archives de blog paginées ou les listes de produits, chaque page doit avoir un canonique auto-référencé (et non canonique à la page 1), un titre descriptif indiquant le numéro de page, et si le contenu est substantiel, autoriser l'indexation. Pour les pages à pagination fine, envisagez de noindex sur les pages au-delà de la page 3. Google a rendu obsolète rel="next"/rel="prev" en 2019, mais il est toujours utilisé par d'autres moteurs de recherche.
Prochaines étapes
Un audit technique SEO est un investissement ponctuel qui multiplie le retour sur investissement de tout votre travail de contenu et de marketing. Les 100 points de cette liste de contrôle couvrent toute l’étendue de ce que les moteurs de recherche évaluent avant de classer votre contenu.
ECOSIRE met en œuvre les meilleures pratiques techniques de référencement dans le cadre de chaque projet Next.js – des plans de site programmatiques et hreflang pour 11 paramètres régionaux aux données structurées, à l'optimisation Core Web Vitals et à l'intégration de l'API IndexNow. Découvrez nos services de développement Web pour découvrir comment nous créons une visibilité dans les recherches dès le premier jour.
Rédigé par
ECOSIRE Research and Development Team
Création de produits numériques de niveau entreprise chez ECOSIRE. Partage d'analyses sur les intégrations Odoo, l'automatisation e-commerce et les solutions d'entreprise propulsées par l'IA.
Articles connexes
Audit Preparation Checklist: Getting Your Books Ready
Complete audit preparation checklist covering financial statement readiness, supporting documentation, internal controls documentation, auditor PBC lists, and common audit findings.
Industry-Specific Compliance Checklist: Healthcare, Finance, Retail, Manufacturing
Comprehensive compliance checklists for healthcare, financial services, retail, and manufacturing sectors covering key regulations, technical controls, and implementation priorities.
Content Marketing Strategy for Shopify Stores
Build a high-converting content marketing strategy for your Shopify store with SEO-driven blog posts, buying guides, and product content that ranks.