PS PrestaShop Intermedio

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.

Actualizado Versión del módulo 1.0.0

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, curl y json
  • 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
Verificar OpenSSL: en la mayoría de hostings (o2switch, OVH, Hetzner, Infomaniak), OpenSSL está activado por defecto. Para verificar, añada temporalmente echo extension_loaded('openssl') ? 'OK' : 'KO'; en un archivo PHP de prueba.

Instalación

  1. Descargue el ZIP dfcannibalization-1.0.0.zip desde su área de cliente DataFirefly.
  2. En el back-office PrestaShop, vaya a Módulos → Gestor de módulos.
  3. Haga clic en Cargar un módulo y seleccione el ZIP.
  4. 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

  1. Abra console.cloud.google.com.
  2. Cree un nuevo proyecto (ej. «DataFirefly SEO») o seleccione uno existente.
  3. En el menú de navegación, vaya a APIs y servicios → Biblioteca.
  4. Busque Google Search Console API y haga clic en Activar.

2. Crear la service account

  1. En el mismo menú, vaya a APIs y servicios → Credenciales.
  2. Haga clic en Crear credenciales → Cuenta de servicio.
  3. 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

  1. Haga clic en la cuenta de servicio creada.
  2. Pestaña Claves → Añadir clave → Crear nueva clave.
  3. Seleccione el formato JSON y confirme. El archivo se descarga automáticamente.
Conserve este archivo en un lugar seguro: contiene la clave privada de la service account. Cualquiera que posea este JSON puede leer sus datos de Search Console.

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.

  1. Abra search.google.com/search-console.
  2. Seleccione su propiedad (URL-prefix o dominio).
  3. Haga clic en Configuración → Usuarios y permisos.
  4. Haga clic en Añadir usuario.
  5. Pegue el email client_email de la service account y elija el permiso Restringido (solo lectura).
  6. 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 prefijo sc-domain:).

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.

«403 User does not have sufficient permissions»: la service account no ha sido añadida en Search Console, o la propiedad introducida no coincide exactamente con la mostrada en GSC. Verifique ambos lados.

Lanzar un escaneo

Haga clic en Lanzar escaneo ahora. El módulo:

  1. Consulta la API Search Console para el período configurado (paginación hasta 200 000 filas).
  2. Agrupa las filas por consulta.
  3. Filtra según sus umbrales (impresiones, clics, posición).
  4. Conserva solo las consultas con al menos 2 URLs distintas.
  5. Calcula la puntuación de gravedad y la recomendación.
  6. 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:

  1. Haga clic en el botón Seleccionar como origen al lado de la URL a redirigir (la que no es la ganadora).
  2. La URL destino (la ganadora) se rellena previamente de forma automática.
  3. 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.

Verificar que una redirección funciona: abra la URL de origen en un navegador en modo privado, o use 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.

Regenerar el token: desinstale y reinstale el módulo si cree que su token ha sido filtrado. Se generará un nuevo token en la instalación.

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.
¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte