Un negocio local existe en línea en docenas de lugares que no controla: aplicaciones de mapas, sitios de reseñas, directorios sectoriales, agregadores de datos, perfiles sociales. Cada uno guarda su propia copia del nombre, dirección y teléfono del negocio, conocido en SEO local como NAP. Cuando el negocio se muda, cambia de número o se renombra, la mayoría de esas copias se quedan como estaban.
El resultado es un cliente que llama a un número desconectado, un repartidor en la dirección antigua, y motores de búsqueda y aplicaciones de mapas con datos contradictorios sobre el mismo negocio. Muchos sitios más pequeños copian sus datos de otros más grandes, así que un listado erróneo tiende a propagarse.
Una auditoría de NAP encuentra esas inconsistencias de forma sistemática. Esta guía cubre qué recopilar, cómo comparar listados para que el ruido de formato no ahogue los problemas reales, el código para hacerlo y cómo priorizar las correcciones.
Qué comprueba una auditoría de NAP
Para cada lugar en el que aparece listado un negocio, una auditoría responde a tres preguntas:
- Nombre: ¿es el nombre real del negocio, el usado en su local y en su web, sin palabras clave añadidas ni una marca antigua?
- Dirección: ¿es la dirección actual, incluido el piso o la unidad, con el código postal correcto?
- Teléfono: ¿es el número principal actual, en lugar de una línea antigua o un número de seguimiento que nadie contesta?
Muchas auditorías también comprueban la URL del sitio web, el horario de apertura y la categoría principal, ya que estos datos quedan obsoletos de la misma manera. El método que sigue se extiende a ellos fácilmente.
Paso 1: anotar el registro canónico
Todo se compara contra un único registro: el NAP del negocio tal como debería aparecer en todas partes. Tómalo del propio negocio, no de un directorio, y escríbelo completo: sin sufijos legales añadidos, la dirección postal exactamente como la tiene correos, el número de teléfono principal. Para un negocio con varias ubicaciones, mantén un registro canónico por ubicación, con un ID estable.
Esto parece obvio, y es donde la mayoría de las auditorías se equivocan. Si el propio registro canónico está desactualizado, cada comparación falla en la misma dirección.
Paso 2: recopilar los listados
Los listados que hay que recopilar se dividen en tres grupos:
| Fuente | Ejemplos | Cómo recopilar |
|---|---|---|
| Plataformas principales | Google Business Profile, Apple Business Connect, Bing Places, Facebook | Los propios paneles del negocio y las API oficiales |
| Sitios de reseñas y directorios | Directorios generales y sectoriales, plataformas de reseñas | API oficiales donde existan, si no la página pública del listado |
| Agregadores de datos | Las empresas que surten a muchos directorios más pequeños | Sus portales para empresas |
Usa API oficiales y las propias cuentas del negocio siempre que existan: son más fiables y están permitidas. Para directorios sin API, la página del listado es pública, y recopilar una página por negocio y por directorio es una tarea ligera y ocasional. Los listados también pueden variar por país y ciudad, así que compruébalos como los vería un cliente local; nuestra guía sobre recopilación de datos de negocios locales cubre el lado de la recopilación.
Registra los valores en bruto exactamente como aparecen, junto con la URL y la fecha. La auditoría compara valores normalizados, pero la corrección necesita saber exactamente qué está mal en cada sitio.
Paso 3: comparar sin ahogarse en ruido
Una comparación ingenua marca casi todo. “St” frente a “Street”, “(312) 555-0142” frente a “312-555-0142”, “LLC” o sin “LLC”: ninguno de estos es un problema real, y una auditoría llena de ellos esconde el listado que todavía tiene el número de teléfono del año pasado.
La solución es normalizar cada campo antes de compararlo, y clasificar el resultado:
| Estado | Significado | Prioridad |
|---|---|---|
| match | Idéntico al registro canónico | Ninguna |
| format | Texto distinto, mismo valor tras normalizar | Baja: ordenar cuando convenga |
| close | Casi igual, como un número de piso que falta o una errata | Media: revisar y corregir |
| mismatch | Un valor distinto: otra dirección, otro número, otro nombre | Alta: corregir primero |
| missing | El campo está vacío en ese listado | Media: añadirlo |
El código siguiente normaliza cada campo de la forma que le conviene. Los nombres eliminan la puntuación, los acentos, un “The” inicial y los sufijos legales. Las direcciones se expanden a abreviaturas estándar (“Street” a “st”, “Suite” a “ste”) y eliminan la extensión ZIP+4. Los números de teléfono se analizan con phonenumbers, el port en Python de la biblioteca de números de teléfono de Google, y se comparan en formato internacional, de modo que cualquier formato del mismo número coincide.
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
El argumento region indica al analizador de teléfonos qué país debe asumir para los números escritos sin prefijo de país, de modo que el mismo código sirve para un negocio alemán o brasileño con region="DE" o region="BR". Las abreviaturas de direcciones son en inglés; amplía ADDRESS_WORDS para otros mercados.
Ejecutar una auditoría
Aquí hay una auditoría de un negocio frente a cuatro listados de directorios (un ejemplo ilustrativo, no listados reales):
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
Leyéndolo fila por fila:
- Directory A da formato distinto a la dirección y al teléfono, pero todos los valores son correctos. Nada que corregir.
- Directory B añade “The” y “LLC” al nombre. También está bien, aunque merece la pena ordenarlo.
- Directory C tiene el nombre correcto con una dirección antigua y un teléfono antiguo. Este es el listado que envía a los clientes al lugar equivocado, y el que hay que corregir primero.
- Directory D tiene un nombre distinto (“Corner Bakery & Cafe”), le falta el número de piso y no tiene teléfono alguno.
Paso 4: corregir en el orden correcto
- Discrepancias en las plataformas principales primero. Estos listados llegan a más gente, y muchos sitios más pequeños copian de ellos.
- Discrepancias en el resto, empezando por los directorios más relevantes para el sector del negocio y los que posicionan en búsquedas por el nombre del negocio.
- Campos ausentes, especialmente el número de teléfono.
- Coincidencias cercanas, como un número de piso que falta.
- Diferencias de formato al final, si acaso.
Algunos listados se pueden editar directamente a través de la propia cuenta del negocio. Otros necesitan un proceso de reclamación o una solicitud de soporte, y los agregadores de datos a menudo necesitan correcciones enviadas a través de sus propios portales, tras lo cual el cambio fluye a los sitios a los que surten. Espera que las correcciones en algunos directorios tarden semanas en aparecer.
Paso 5: volver a auditar con regularidad
Los listados vuelven a desviarse. Los agregadores pueden sobrescribir correcciones, los usuarios pueden sugerir ediciones en algunas plataformas, y datos antiguos resurgen de fuentes que nadie recordaba. Vuelve a ejecutar la auditoría mensualmente para las plataformas principales y trimestralmente para la cola larga, y siempre después de una mudanza, un cambio de teléfono o un cambio de marca.
Guarda los resultados de cada auditoría con su fecha. La tendencia importa más que cualquier ejecución aislada: un listado que vuelve a la dirección antigua después de cada corrección señala una fuente anterior en la cadena que todavía tiene los datos erróneos.
Para negocios en los que importan las posiciones en los mapas, combina la auditoría con la medición de posicionamiento en toda el área que atiende el negocio. Nuestra guía sobre seguimiento de posicionamiento con geo-grid muestra cómo medir eso, y cómo saber si la visibilidad mejora tras limpiar los listados.
Causas habituales de un NAP inconsistente
- Mudanzas y cambios de teléfono que se actualizaron en el perfil principal pero en ningún otro sitio.
- Números de seguimiento de llamadas añadidos para una campaña publicitaria y nunca eliminados.
- Cambios de marca en los que el nombre antiguo sobrevive en directorios de cola larga.
- Números de piso y unidad eliminados por directorios que no tienen campo para ellos.
- Listados duplicados, a menudo creados automáticamente, cada uno con sus propios datos ligeramente distintos.
- Negocios con varias ubicaciones en los que los datos de una ubicación se copiaron en el listado de otra.
Preguntas frecuentes
¿Qué es la consistencia de NAP?
NAP son las siglas en inglés de nombre, dirección y número de teléfono. La consistencia de NAP significa que el NAP de un negocio es el mismo, y correcto, en todos los lugares donde aparece listado en línea: aplicaciones de mapas, directorios, sitios de reseñas y su propia web.
¿Importan las diferencias de formato como “St” y “Street”?
Mucho menos que los datos erróneos. Una auditoría debería normalizar el formato antes de comparar, de modo que los listados con una dirección o un teléfono antiguos destaquen en lugar de perderse entre diferencias inofensivas.
¿Con qué frecuencia debo auditar los listados de un negocio?
Mensualmente para las plataformas principales y trimestralmente para los demás directorios es un ritmo razonable, además de una auditoría extra tras cualquier mudanza, cambio de teléfono o cambio de marca.
¿Debería usar números de teléfono de seguimiento en los listados de directorios?
Úsalos con cuidado. Un número de seguimiento que se elimina después de una campaña deja un listado con un número muerto. Si usas uno, asegúrate de que el número principal también aparece listado donde la plataforma lo permita, y anota qué listados llevan qué número.
Conclusión
Una auditoría de NAP es un trabajo de calidad de datos: un registro canónico, cada listado recopilado con su fuente y fecha, valores normalizados antes de compararlos, y resultados clasificados para que los problemas reales destaquen. Corrige primero las discrepancias en las plataformas más grandes, luego sigue bajando, y vuelve a auditar con regularidad porque los listados se desvían. El código anterior se encarga de la comparación; la disciplina consiste en mantener correcto el registro canónico y actuar según lo que encuentre la auditoría.