SEO Cannibalization Detector — Guía completa PrestaShop 8 & 9
Detecte y resuelva la canibalización SEO de su tienda PrestaShop mediante Google Search Console: instalación, configuración, escaneos y redirecciones 301.
SEO Cannibalization Detector se conecta en modo solo lectura a su propiedad de Google Search Console, identifica cada consulta donde varias URLs de su tienda PrestaShop se canibalizan, y propone una acción concreta: consolidar, redireccionar 301, diferenciar o vigilar. Esta documentación cubre la instalación, la configuración del service account Google, el lanzamiento de su primer escaneo, la lectura del informe y la gestión de redirecciones.
Requisitos previos
- PrestaShop 8.0 a 9.x
- PHP 8.1 o superior, con las extensiones
openssl,curlyjson - Un proyecto Google Cloud (la cuenta gratuita basta, sin crédito requerido)
- Una propiedad Google Search Console ya verificada para el dominio de su tienda
echo extension_loaded('openssl') ? 'OK' : 'KO'; en un archivo PHP de prueba.
Instalación
- Descargue el ZIP
dfcannibalization-1.0.0.zipdesde su área de cliente DataFirefly. - En el back-office PrestaShop, vaya a Módulos → Gestor de módulos.
- Haga clic en Cargar un módulo y seleccione el ZIP.
- Una vez completada la instalación, haga clic en Configurar.
El módulo crea 4 tablas SQL (scan, query, page, action), una pestaña de admin «DataFirefly Cannibalization» bajo IMPROVE, y un token único para los escaneos programados.
Crear una service account Google
Una service account es una cuenta técnica Google que permite a su tienda leer los datos de Search Console sin requerir autenticación interactiva. Es gratuita y limitada a solo lectura.
1. Activar la API Search Console
- Abra console.cloud.google.com.
- Cree un nuevo proyecto (ej. «DataFirefly SEO») o seleccione uno existente.
- En el menú de navegación, vaya a APIs y servicios → Biblioteca.
- Busque Google Search Console API y haga clic en Activar.
2. Crear la service account
- En el mismo menú, vaya a APIs y servicios → Credenciales.
- Haga clic en Crear credenciales → Cuenta de servicio.
- Asígnele un nombre explícito (ej. «datafirefly-cannibalization») y confirme. Puede omitir los pasos opcionales de roles y acceso de usuario.
3. Generar la clave JSON
- Haga clic en la cuenta de servicio creada.
- Pestaña Claves → Añadir clave → Crear nueva clave.
- Seleccione el formato JSON y confirme. El archivo se descarga automáticamente.
Autorizar la service account en Search Console
La service account tiene su propio email (visible en el JSON bajo la clave client_email, ej. datafirefly-cannibalization@proyecto-123.iam.gserviceaccount.com). Hay que autorizarla en lectura sobre su propiedad.
- Abra search.google.com/search-console.
- Seleccione su propiedad (URL-prefix o dominio).
- Haga clic en Configuración → Usuarios y permisos.
- Haga clic en Añadir usuario.
- Pegue el email
client_emailde la service account y elija el permiso Restringido (solo lectura). - Confirme.
Configurar el módulo
Vuelva al back-office PrestaShop, en la configuración del módulo.
Service account y propiedad
- Service account JSON: abra el archivo descargado, copie y pegue su contenido entero en el campo.
- URL del sitio (propiedad GSC): reproduzca exactamente el formato mostrado en Search Console.
- Para una propiedad URL-prefix:
https://www.ejemplo.com/(con barra final). - Para una propiedad de dominio:
sc-domain:ejemplo.com(sin protocolo, con prefijosc-domain:).
- Para una propiedad URL-prefix:
Umbrales de detección
- Período de análisis: 7 a 490 días. 90 días es un buen compromiso entre frescura y volumen estadístico.
- Impresiones mínimas: ignora consultas muy bajas. 30 por defecto. Establezca 10 si su tienda es reciente.
- Clics mínimos: umbral de clics por consulta para ser analizada. 1 por defecto. Establezca 0 para incluir también las consultas con impresiones sin clic (útil para sitios jóvenes).
- Posición máxima: ignora consultas donde la mejor URL está más allá de esta posición. 30 por defecto.
Redirecciones 301 automáticas
Activa la interceptación a través del hook dispatcher de PrestaShop. Desactive si prefiere gestionar las redirecciones manualmente en Tráfico y SEO → Redirecciones.
Haga clic en Guardar, luego en Probar conexión GSC. Si la conexión tiene éxito, el módulo muestra un mensaje verde.
Lanzar un escaneo
Haga clic en Lanzar escaneo ahora. El módulo:
- Consulta la API Search Console para el período configurado (paginación hasta 200 000 filas).
- Agrupa las filas por consulta.
- Filtra según sus umbrales (impresiones, clics, posición).
- Conserva solo las consultas con al menos 2 URLs distintas.
- Calcula la puntuación de gravedad y la recomendación.
- Persiste todo en base de datos.
Para un sitio medio (10 000 a 50 000 páginas), un escaneo completo de 90 días tarda entre 30 segundos y 3 minutos.
Leer el informe
Una vez completado el escaneo, ábralo desde la pestaña Historial de escaneos. El informe lista cada consulta canibalizada con:
- La palabra clave (la consulta Google).
- La puntuación de gravedad como insignia coloreada (low / medium / high / critical).
- El número de URLs en competencia.
- La recomendación (REDIRECT 301, CONSOLIDATE, DIFFERENTIATE, MONITOR).
- El estado (pendiente, examinado, resuelto, ignorado).
Haga clic en una consulta para ver el detalle: la lista de URLs competidoras con clics, impresiones, posición media, CTR y tipo de página (producto, categoría, CMS, blog, etc.). La URL identificada como «ganadora» está resaltada en verde.
Comprender la puntuación de gravedad
La puntuación es sobre 100, combinando 4 factores ponderados:
- Número de páginas competidoras (25 puntos máx.) — fórmula:
min((n-1)/3, 1) × 25. A partir de 4 URLs competidoras, el factor es máximo. - Reparto de clics (30 puntos máx.) — basado en un índice HHI invertido. Una canibalización 50/50 entre dos URLs es peor que un 95/5. Fórmula:
((1-HHI)/(1-1/n)) × 30. - Diferencia de posición (30 puntos máx.) — ponderada por la posición del mejor resultado. Multiplicador × 1.0 si la mejor posición ≤ 10, × 0.7 si ≤ 20, × 0.4 más allá.
- Volumen de impresiones (15 puntos máx.) — escala logarítmica:
min(log10(impr+1)/4, 1) × 15.
Niveles: low < 26, medium < 51, high < 76, critical ≥ 76.
Las 4 recomendaciones
REDIRECT 301
El módulo propone esta acción cuando una URL capta al menos el 70% de los clics con una posición media ≤ 15. Es la URL «ganadora»: Google la considera claramente como la mejor respuesta. Las otras URLs se redirigen hacia ella en 301. El contenido puede fusionarse editorialmente antes de la redirección si es necesario.
CONSOLIDATE
El rendimiento está repartido (sin ganadora clara). Recomendación: fusionar el contenido de las dos URLs en una sola, luego redirigir la otra en 301. Este trabajo es editorial, no automatizable. El módulo identifica el caso pero no realiza la fusión por usted.
DIFFERENTIATE
Las páginas son de tipos diferentes (ejemplo: una ficha de producto y un artículo de blog). La canibalización indica un problema de targeting de etiquetas title/meta más que un verdadero conflicto de contenido. Recomendación: rehacer las etiquetas para apuntar a consultas distintas (long-tail en el blog, consulta principal en el producto).
MONITOR
La puntuación es baja (< 26). Ninguna acción urgente. El módulo mantiene la consulta en el informe pero la clasifica como «a vigilar».
Aplicar una redirección 301
Desde el detalle de una consulta recomendada REDIRECT 301:
- Haga clic en el botón Seleccionar como origen al lado de la URL a redirigir (la que no es la ganadora).
- La URL destino (la ganadora) se rellena previamente de forma automática.
- Haga clic en Aplicar redirección.
La regla se guarda y se sirve inmediatamente desde el hook actionDispatcherBefore. Rendimiento: un solo SELECT por worker PHP-FPM gracias a una caché estática en memoria.
curl -I https://su-tienda.com/url-antigua. Debe ver un HTTP/1.1 301 y una cabecera Location: apuntando a la nueva URL.
Gestionar las redirecciones activas
La pestaña Redirects 301 lista todas las redirecciones activas con su contador de hits. Puede:
- Desactivar una redirección sin eliminarla (útil para probar una marcha atrás).
- Eliminar definitivamente una redirección.
- Ver el número de hits desde su creación (mide la eficacia).
Escaneos programados mediante cron
El módulo expone un front controller protegido por token. La URL se muestra en la configuración del módulo en la forma:
https://su-tienda.com/index.php?fc=module&module=dfcannibalization&controller=cron&token=XXXX
Cron Linux estándar
En un servidor Linux/Unix con acceso SSH, edite su crontab:
crontab -e
Por ejemplo, añada un escaneo cada domingo a las 23h:
0 23 * * 0 curl -s "https://su-tienda.com/index.php?fc=module&module=dfcannibalization&controller=cron&token=XXXX" > /dev/null
Tareas programadas OVH / o2switch / Infomaniak
Todos estos hostings ofrecen un planificador en su back-office. Introduzca la URL completa y la frecuencia deseada. Para la mayoría de tiendas, un escaneo semanal basta ampliamente.
Multi-tienda
Todas las tablas incluyen una columna id_shop. Los escaneos están acotados según la tienda activa en el selector del back-office. Cada tienda tiene su propia configuración (service account, URL GSC, umbrales) y su propio historial de escaneos.
Si gestiona varios dominios desde un mismo back-office, cree una service account distinta por propiedad, o autorice la misma service account en todas sus propiedades Search Console.
Solución de problemas
«OpenSSL extension required»
Pida a su hosting que active la extensión PHP OpenSSL. En el 99% de hostings modernos, está activada por defecto.
«Invalid service account JSON»
El JSON pegado está incompleto o corrupto. Vuelva a descargar la clave desde Google Cloud Console y péguela entera, sin modificar.
«Site URL must match exactly the GSC property»
Verifique el formato en Search Console. Una propiedad URL-prefix se escribe https://www.ejemplo.com/ (barra final). Una propiedad de dominio se escribe sc-domain:ejemplo.com (sin protocolo, sin barra).
«403 User does not have sufficient permissions»
La service account no ha sido autorizada en Search Console, o ha sido autorizada en otra propiedad. Verifique Configuración → Usuarios y permisos.
El escaneo se ejecuta pero no encuentra ninguna canibalización
Sus umbrales tal vez sean demasiado altos para su volumen. Pruebe a bajar las impresiones mínimas a 5 y los clics mínimos a 0.
Una redirección 301 no se dispara
Verifique que (1) la opción «Redirecciones 301 automáticas» esté bien activada en la configuración, (2) la regla esté marcada como activa en la pestaña Redirects 301, (3) la caché de PrestaShop haya sido vaciada después de activar el módulo.
Ir más allá
- Política de revisión: en las consultas critical, intervenga en menos de 7 días. En las high, en menos de 30 días. En las medium, en el marco de una revisión trimestral.
- Estrategia 301 versus consolidación: la redirección 301 transfiere el PageRank pero pierde la posibilidad de tener dos páginas indexadas. Privilegie la diferenciación para intenciones de búsqueda distintas.
- Caso particular de las fichas de producto: si dos variantes muy cercanas se canibalizan, fusiónelas en un producto con declinaciones en vez de en dos productos separados.