Une entreprise locale existe en ligne dans des dizaines d’endroits qu’elle ne contrôle pas : applications cartographiques, sites d’avis, annuaires professionnels, agrégateurs de données, profils sociaux. Chacun détient sa propre copie du nom, de l’adresse et du numéro de téléphone de l’entreprise, ce que le SEO local appelle le NAP. Quand l’entreprise déménage, change de numéro ou se rebrande, la plupart de ces copies restent inchangées.
Le résultat : un client qui appelle un numéro déconnecté, un livreur à l’ancienne adresse, et des moteurs de recherche et applications cartographiques qui détiennent des informations contradictoires sur la même entreprise. De nombreux petits sites copient leurs données depuis des sites plus importants, si bien qu’une donnée erronée a tendance à se propager.
Un audit NAP détecte ces incohérences de façon systématique. Ce guide couvre ce qu’il faut collecter, comment comparer les fiches pour que le bruit lié au formatage ne noie pas les véritables problèmes, le code pour le faire, et comment prioriser les corrections.
Ce que vérifie un audit NAP
Pour chaque endroit où une entreprise est référencée, un audit répond à trois questions :
- Nom : est-ce le véritable nom de l’entreprise, tel qu’utilisé sur sa devanture et son site web, sans mots-clés ajoutés ni ancienne marque ?
- Adresse : est-ce l’adresse actuelle, avec le numéro de suite ou d’unité, et le bon code postal ?
- Téléphone : est-ce le numéro principal actuel, plutôt qu’une ancienne ligne ou un numéro de suivi auquel personne ne répond ?
De nombreux audits vérifient aussi l’URL du site web, les horaires d’ouverture et la catégorie principale, car ces informations se périment de la même manière. La méthode ci-dessous s’étend facilement à ces éléments.
Étape 1 : établir la fiche canonique
Tout est comparé à une seule fiche : le NAP de l’entreprise tel qu’il devrait apparaître partout. Récupérez-le auprès de l’entreprise elle-même, pas d’un annuaire, et écrivez-le en entier : suffixes juridiques retirés, adresse postale exactement telle que la poste la connaît, numéro de téléphone principal. Pour une entreprise multi-sites, conservez une fiche canonique par site, avec un identifiant stable.
Cela semble évident, et c’est pourtant là que la plupart des audits échouent. Si la fiche canonique elle-même est obsolète, chaque comparaison se trompe dans le même sens.
Étape 2 : collecter les fiches
Les fiches à collecter se répartissent en trois groupes :
| Source | Exemples | Comment collecter |
|---|---|---|
| Plateformes majeures | Google Business Profile, Apple Business Connect, Bing Places, Facebook | Les tableaux de bord et API officielles de l’entreprise |
| Sites d’avis et annuaires | Annuaires généraux et sectoriels, plateformes d’avis | Les API officielles quand elles existent, sinon la page publique de la fiche |
| Agrégateurs de données | Les entreprises qui alimentent de nombreux petits annuaires | Leurs portails professionnels |
Utilisez les API officielles et les propres comptes de l’entreprise partout où ils existent : ils sont plus fiables et autorisés. Pour les annuaires sans API, la page de la fiche est publique, et collecter une page par entreprise et par annuaire reste une tâche légère et occasionnelle. Les fiches peuvent aussi différer selon le pays et la ville, il faut donc les vérifier comme le ferait un client local ; notre guide sur la collecte de données d’entreprises locales couvre le volet collecte.
Enregistrez les valeurs brutes exactement telles qu’elles apparaissent, avec l’URL et la date. L’audit compare des valeurs normalisées, mais la correction doit savoir précisément ce qui est erroné sur chaque site.
Étape 3 : comparer sans se noyer dans le bruit
Une comparaison naïve signale presque tout. « St » contre « Street », « (312) 555-0142 » contre « 312-555-0142 », « LLC » ou pas de « LLC » : rien de tout cela n’est un vrai problème, et un audit qui en est rempli cache la fiche qui a encore le numéro de téléphone de l’année dernière.
La solution consiste à normaliser chaque champ avant de comparer, et à classer le résultat :
| Statut | Signification | Priorité |
|---|---|---|
| match | Identique à la fiche canonique | Aucune |
| format | Texte différent, valeur identique après normalisation | Faible : à corriger quand c’est pratique |
| close | Presque identique, comme un numéro de suite manquant ou une faute de frappe | Moyenne : à vérifier et corriger |
| mismatch | Une valeur différente : une autre adresse, un autre numéro, un autre nom | Élevée : à corriger en priorité |
| missing | Le champ est vide sur cette fiche | Moyenne : à ajouter |
Le code ci-dessous normalise chaque champ d’une manière qui lui est adaptée. Les noms perdent la ponctuation, les accents, un « The » initial et les suffixes juridiques. Les adresses développent les abréviations standards (« Street » devient « st », « Suite » devient « ste ») et perdent l’extension ZIP+4. Les numéros de téléphone sont analysés avec phonenumbers, le portage Python de la librairie téléphonique de Google, et comparés au format international, de sorte que tout formatage d’un même numéro corresponde.
import re
import unicodedata
from difflib import SequenceMatcher
import phonenumbers
LEGAL_SUFFIXES = {"llc", "inc", "ltd", "co", "corp", "gmbh", "plc", "sl", "srl"}
ADDRESS_WORDS = {
"street": "st", "avenue": "ave", "boulevard": "blvd", "road": "rd", "drive": "dr",
"lane": "ln", "court": "ct", "place": "pl", "suite": "ste", "floor": "fl",
"north": "n", "south": "s", "east": "e", "west": "w", "apartment": "apt", "unit": "ste",
}
def _words(text):
text = unicodedata.normalize("NFKD", text).encode("ascii", "ignore").decode().lower()
text = text.replace("&", " and ").replace("#", " ste ")
return re.sub(r"[^a-z0-9 ]+", " ", text).split()
def norm_name(name):
words = [w for w in _words(name) if w not in LEGAL_SUFFIXES]
return " ".join(words[1:] if words[:1] == ["the"] else words)
def norm_address(address):
# Drop the ZIP+4 extension, so "60607-1234" matches "60607".
address = re.sub(r"\b(\d{5})-\d{4}\b", r"\1", address)
return " ".join(ADDRESS_WORDS.get(w, w) for w in _words(address))
def norm_phone(phone, region="US"):
try:
number = phonenumbers.parse(phone, region)
except phonenumbers.NumberParseException:
return None
if not phonenumbers.is_valid_number(number):
return None
return phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164)
def compare(field, canonical, listed, region="US"):
"""'match', 'format' (same after normalising), 'close', 'mismatch' or 'missing'."""
if not listed:
return "missing"
if listed.strip() == canonical.strip():
return "match"
if field == "phone":
a, b = norm_phone(canonical, region), norm_phone(listed, region)
return "format" if a and a == b else "mismatch"
normalise = norm_name if field == "name" else norm_address
a, b = normalise(canonical), normalise(listed)
if a == b:
return "format"
return "close" if SequenceMatcher(None, a, b).ratio() >= 0.9 else "mismatch"
def audit(canonical, listings, region="US"):
"""One row per directory: the status of name, address and phone."""
rows = []
for source, listing in listings.items():
row = {"source": source}
for field in ("name", "address", "phone"):
row[field] = compare(field, canonical[field], listing.get(field), region)
rows.append(row)
return rows
L’argument region indique à l’analyseur de téléphone quel pays supposer pour les numéros écrits sans indicatif de pays, de sorte que le même code fonctionne pour une entreprise allemande ou brésilienne avec region="DE" ou region="BR". Les abréviations d’adresse sont en anglais ; étendez ADDRESS_WORDS pour d’autres marchés.
Exécuter un audit
Voici l’audit d’une entreprise comparée à quatre fiches d’annuaires (un exemple illustratif, pas des fiches réelles) :
from nap import audit
canonical = {
"name": "Corner Bakery",
"address": "123 North Main Street, Suite 4, Chicago, IL 60607",
"phone": "(312) 555-0142",
}
listings = {
"Directory A": {"name": "Corner Bakery", "address": "123 N Main St #4, Chicago IL 60607",
"phone": "312-555-0142"},
"Directory B": {"name": "The Corner Bakery LLC", "address": "123 North Main Street, Suite 4, Chicago, IL 60607",
"phone": "(312) 555-0142"},
"Directory C": {"name": "Corner Bakery", "address": "88 West Lake Street, Chicago, IL 60601",
"phone": "(312) 555-0199"},
"Directory D": {"name": "Corner Bakery & Cafe", "address": "123 N Main St, Chicago, IL 60607"},
}
print(f"{'source':<12} {'name':<9} {'address':<9} phone")
for row in audit(canonical, listings):
print(f"{row['source']:<12} {row['name']:<9} {row['address']:<9} {row['phone']}")
source name address phone
Directory A match format format
Directory B format match match
Directory C match mismatch mismatch
Directory D mismatch close missing
En lisant ligne par ligne :
- Directory A formate l’adresse et le téléphone différemment, mais chaque valeur est correcte. Rien à corriger.
- Directory B ajoute « The » et « LLC » au nom. C’est également sans gravité, bien que cela mérite d’être nettoyé.
- Directory C a le bon nom avec une ancienne adresse et un ancien numéro de téléphone. C’est la fiche qui envoie les clients au mauvais endroit, et celle à corriger en priorité.
- Directory D a un nom différent (« Corner Bakery & Cafe »), il manque le numéro de suite et il n’y a aucun numéro de téléphone.
Étape 4 : corriger dans le bon ordre
- Les erreurs sur les plateformes majeures d’abord. Ces fiches touchent le plus de monde, et de nombreux petits sites copient à partir d’elles.
- Les erreurs partout ailleurs, en commençant par les annuaires les plus pertinents pour le secteur de l’entreprise et ceux qui se classent dans les résultats de recherche pour le nom de l’entreprise.
- Les champs manquants, en particulier le numéro de téléphone.
- Les correspondances proches comme un numéro de suite manquant.
- Les différences de formatage en dernier, si tant est qu’il faille les corriger.
Certaines fiches peuvent être modifiées directement via le propre compte de l’entreprise. D’autres nécessitent une procédure de revendication ou une demande au support, et les agrégateurs de données exigent souvent que les corrections soient soumises via leurs propres portails, après quoi le changement se propage aux sites qu’ils alimentent. Il faut s’attendre à ce que les corrections sur certains annuaires mettent des semaines à apparaître.
Étape 5 : réauditer selon un calendrier
Les fiches redérivent. Les agrégateurs peuvent écraser les corrections, les utilisateurs peuvent suggérer des modifications sur certaines plateformes, et d’anciennes données resurgissent de sources que plus personne ne se rappelle. Relancez l’audit mensuellement pour les plateformes majeures et trimestriellement pour la longue traîne, et toujours après un déménagement, un changement de numéro ou un rebranding.
Conservez les résultats de chaque audit avec sa date. La tendance compte plus que n’importe quel audit isolé : une fiche qui revient à l’ancienne adresse après chaque correction pointe vers une source en amont qui détient encore la mauvaise donnée.
Pour les entreprises où le classement cartographique compte, associez l’audit à une mesure du classement sur toute la zone desservie par l’entreprise. Notre guide sur le suivi de classement par grille géographique montre comment mesurer cela, et comment déterminer si la visibilité s’améliore une fois les fiches nettoyées.
Causes fréquentes d’incohérence du NAP
- Déménagements et changements de numéro mis à jour sur la fiche principale mais nulle part ailleurs.
- Numéros de suivi d’appels ajoutés pour une campagne publicitaire et jamais retirés.
- Rebrandings où l’ancien nom survit sur des annuaires de longue traîne.
- Numéros de suite et d’unité supprimés par des annuaires qui n’ont pas de champ prévu pour cela.
- Fiches en double, souvent créées automatiquement, chacune avec ses propres données légèrement différentes.
- Entreprises multi-sites où les données d’un site ont été copiées sur la fiche d’un autre site.
FAQ
Qu’est-ce que la cohérence NAP ?
NAP signifie nom, adresse et numéro de téléphone. La cohérence NAP signifie que le NAP d’une entreprise est identique, et correct, partout où elle est référencée en ligne : applications cartographiques, annuaires, sites d’avis et son propre site web.
Les différences de formatage comme « St » et « Street » comptent-elles ?
Beaucoup moins que des données erronées. Un audit doit normaliser le formatage avant de comparer, afin que les fiches comportant une ancienne adresse ou un ancien numéro de téléphone ressortent au lieu de se perdre parmi des différences inoffensives.
À quelle fréquence faut-il auditer les fiches d’entreprise ?
Un rythme mensuel pour les plateformes majeures et trimestriel pour les autres annuaires est raisonnable, plus un audit supplémentaire après tout déménagement, changement de numéro ou rebranding.
Faut-il utiliser des numéros de téléphone de suivi sur les fiches d’annuaire ?
À utiliser avec prudence. Un numéro de suivi retiré après une campagne laisse une fiche avec un numéro mort. Si vous en utilisez un, assurez-vous que le numéro principal est aussi référencé là où la plateforme le permet, et notez quelle fiche porte quel numéro.
En résumé
Un audit NAP est un travail de qualité des données : une fiche canonique unique, chaque fiche collectée avec sa source et sa date, des valeurs normalisées avant d’être comparées, et des résultats classés pour que les véritables problèmes ressortent. Corrigez d’abord les erreurs sur les plus grandes plateformes, puis descendez dans la liste, et réauditez selon un calendrier car les fiches dérivent. Le code ci-dessus gère la comparaison ; la discipline consiste à maintenir la fiche canonique exacte et à agir sur ce que révèle l’audit.