Explorer les preuves de l’audit

Six cas HTTP locaux, pas un scan de votre site. Les réponses avant et après sont testées localement ; indexation Google, trafic et positions restent inconnus.

La priorité dépend de l’objectif de l’exemple, pas d’un score SEO universel. Une réponse correcte ne prouve pas l’indexation.

A01 · La page publique contient noindex

Priorité: Élevée

Observation
GET /launch renvoie 200 et une balise meta robots noindex. L’objectif est une page publique éligible à la recherche.
Enjeu
La directive contredit cet objectif. Sa présence est confirmée, pas sa lecture par Google.
Action proposée
Retirer la directive involontaire du modèle public. Vérifier également les en-têtes et le HTML rendu.
Responsable
Développeur web
Critère de validation
/fixed/launch renvoie 200 sans noindex. Retester le déploiement réel et utiliser séparément une inspection d’URL autorisée.

Confirmé dans ce cas local ; périmètre de production et résultats de recherche non vérifiés.

Avant

GET /launch
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><meta name="robots" content="noindex"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Après

GET /fixed/launch
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/fixed/launch"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A02 · Robots empêche la lecture de l’exclusion

Priorité: Élevée

Observation
robots.txt bloque /blocked/ tandis que /blocked/page contient noindex. L’objectif est l’exclusion de la recherche, pas la restriction d’accès.
Enjeu
Un robot respectueux des règles ne peut lire la directive. Robots ne remplace pas l’authentification.
Action proposée
Autoriser l’exploration de la page en conservant noindex. Protéger les contenus privés par authentification.
Responsable
Responsable de plateforme
Critère de validation
/fixed/blocked/page est hors du préfixe bloqué et conserve noindex. Vérifier les règles réelles et l’indexation ultérieure séparément.

Confirmé dans ce cas local ; périmètre de production et résultats de recherche non vérifiés.

Avant

GET /robots.txt
HTTP 200
Content-Type: text/plain; charset=utf-8

User-agent: *
Disallow: /blocked/


────────

GET /blocked/page
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><meta name="robots" content="noindex"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Après

GET /robots.txt
HTTP 200
Content-Type: text/plain; charset=utf-8

User-agent: *
Disallow: /blocked/


────────

GET /fixed/blocked/page
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><meta name="robots" content="noindex"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A03 · La redirection permanente aboutit à une erreur

Priorité: Élevée

Observation
/old-guide renvoie 301 vers /missing-guide, qui renvoie 404. /guide est supposé être un remplacement pertinent.
Enjeu
Le chemin ne livre pas le contenu voulu. Une redirection ne prouve pas le bon fonctionnement de sa destination.
Action proposée
Rediriger directement vers le remplacement pertinent et actualiser les liens internes. Ne pas envoyer toutes les pages supprimées à l’accueil.
Responsable
Développeur du routage
Critère de validation
/fixed/old-guide produit une seule 301 puis /guide en 200 avec le contenu attendu. Vérifier toute la chaîne après déploiement.

Confirmé dans ce cas local ; périmètre de production et résultats de recherche non vérifiés.

Avant

GET /old-guide
HTTP 301
Location: /missing-guide



────────

GET /missing-guide
HTTP 404
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title></head><body><h1>Not found</h1></body></html>

Après

GET /fixed/old-guide
HTTP 301
Location: /guide



────────

GET /guide
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A04 · Canonical désigne un contenu sans rapport

Priorité: Moyenne

Observation
/variant déclare /other-topic comme canonical alors que son contenu duplique /guide.
Enjeu
La préférence contredit la relation entre contenus. Elle ne révèle pas le canonical choisi par Google.
Action proposée
Confirmer l’équivalence puis aligner canonical, liens internes et sitemap sur /guide. Garder distincts les contenus aux fonctions différentes.
Responsable
Responsable SEO et développeur
Critère de validation
/fixed/variant déclare /guide et la destination répond correctement. Contrôler séparément le choix de Google dès que possible.

Confirmé dans ce cas local ; périmètre de production et résultats de recherche non vérifiés.

Avant

GET /variant
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/other-topic"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Après

GET /fixed/variant
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A05 · La page absente renvoie un succès

Priorité: Moyenne

Observation
/gone répond 200 avec un titre Not found. Aucun remplacement adapté n’est prévu.
Enjeu
Contenu d’erreur et statut de succès sont incohérents : candidat soft 404, pas classification Google observée.
Action proposée
Renvoyer le statut approprié de ressource absente et retirer les liens internes obsolètes. Conserver une page d’erreur utile.
Responsable
Développeur web
Critère de validation
/fixed/gone renvoie 404 avec le contenu d’erreur. Une observation Search Console ultérieure constitue une preuve distincte.

Confirmé dans ce cas local ; périmètre de production et résultats de recherche non vérifiés.

Avant

GET /gone
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title></head><body><h1>Not found</h1></body></html>

Après

GET /fixed/gone
HTTP 404
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title></head><body><h1>Not found</h1></body></html>

A06 · Le témoin fonctionnel ne nécessite pas de correction spéculative

Priorité: Aucun changement

Observation
/guide renvoie 200, se déclare canonical et n’est pas bloqué par ces règles robots. Cette réponse ne contient pas noindex.
Enjeu
Ces tests locaux réussissent. Ils ne prouvent ni qualité, rendu, découverte, indexation, ni classement.
Action proposée
Documenter le témoin valide. Explorer d’autres signaux seulement si une question précise le justifie.
Responsable
Relecteur de l’audit
Critère de validation
Les réponses avant et après restent identiques. Conserver cette preuve sans inventer un défaut pour augmenter le compteur.

Confirmé dans ce cas local ; périmètre de production et résultats de recherche non vérifiés.

Avant

GET /guide
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Après

GET /guide
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Exécuter les cas

Exécuter les cas

Six cas HTTP locaux, pas un scan de votre site. Les réponses avant et après sont testées localement ; indexation Google, trafic et positions restent inconnus.

Python 3.10 ou ultérieur. Décompressez le ZIP localement. La vérification démarre un serveur temporaire de bouclage, teste chaque cas, affiche du JSON puis s’arrête. Aucun site externe n’est contacté.

python3 audit_lab.py --verify

Pour une inspection manuelle, démarrez le serveur ci-dessous, ouvrez les URL locales puis arrêtez avec Ctrl+C. Choisissez un autre port si 8765 est occupé.

python3 audit_lab.py --port 8765

http://127.0.0.1:8765/robots.txt

http://127.0.0.1:8765/launch

http://127.0.0.1:8765/fixed/launch

http://127.0.0.1:8765/blocked/page

http://127.0.0.1:8765/fixed/blocked/page

http://127.0.0.1:8765/old-guide

http://127.0.0.1:8765/missing-guide

http://127.0.0.1:8765/fixed/old-guide

http://127.0.0.1:8765/guide

http://127.0.0.1:8765/variant

http://127.0.0.1:8765/fixed/variant

http://127.0.0.1:8765/gone

http://127.0.0.1:8765/fixed/gone

http://127.0.0.1:8765/guide

http://127.0.0.1:8765/guide

Les commandes et chemins sont des identifiants techniques ; le rapport est traduit.

Résultat d’indexation : inconnu

Résultat d’indexation : inconnu