Todo lo que querrías saber antes de instalar.
Una mirada detallada a cómo funciona DataFirefly Indexing API — Envío automático Google Indexing API e IndexNow (Bing, Yandex, Naver) para PrestaShop 8 y 9, por qué lo construimos así y la lógica detrás de las características anteriores.
El problema: Googlebot y Bingbot tardan en rastrear
Es el punto ciego SEO de cualquier tienda en crecimiento. Publicas un nuevo producto el lunes por la mañana y Google no lo indexa hasta el jueves por la noche. Corriges una errata en una ficha y Bing sigue mostrando la versión antigua dos semanas después. Durante ese retraso de indexación, pierdes tráfico orgánico, pierdes conversiones, y tus usuarios ven información desactualizada en los resultados de búsqueda. Para una tienda que publica o modifica 20 productos por semana, son cientos de URLs perpetuamente atrasadas. El envío por sitemap.xml y el ping clásico no ayudan: Google y Bing ya no se precipitan sobre ellos desde hace mucho. La única forma de pedir una indexación prioritaria en tiempo real es a través de las APIs oficiales de envío directo.
Google Indexing API: cómo funciona
Google expone un endpoint REST oficial en indexing.googleapis.com que acepta notificaciones de actualización o eliminación de URL. La autenticación es vía un Service Account de Google Cloud: creas un Service Account, descargas su clave en formato JSON, lo añades como propietario de tu propiedad de Search Console, y listo. El módulo firma un JWT RS256 con la clave privada del Service Account, intercambia ese JWT por un token de acceso OAuth2 en oauth2.googleapis.com, mantiene ese token en caché durante 55 minutos, y lo usa para autenticar cada envío. La cuota predeterminada es de 200 URLs por día por Service Account, suficiente para la gran mayoría de tiendas. Google puede conceder una cuota mayor bajo solicitud motivada. A tener en cuenta: Google ha limitado oficialmente el uso de esta API a páginas con datos estructurados JobPosting o BroadcastEvent. La API aún acepta otros tipos y responde 200, pero Google puede ignorar la indexación real: el módulo envía de todos modos por completitud, y el dashboard refleja la respuesta de la API, no la decisión final de indexación.
IndexNow: Bing, Yandex, Naver, Seznam en una sola llamada
IndexNow es un protocolo abierto impulsado por Microsoft Bing y Yandex en 2021, al que se unieron Naver (el motor dominante en Corea del Sur) y Seznam (el motor histórico en República Checa). El principio: generas una clave alfanumérica, la publicas en la raíz de tu dominio (archivo clave.txt), y llamas al endpoint api.indexnow.org con una lista de URLs a indexar. La llamada es gratuita, ilimitada y se propaga automáticamente a todos los motores participantes. Sin cuota, sin Service Account, sin OAuth: solo una clave y una llamada HTTP. El módulo genera la clave automáticamente al instalarse, ofrece dos métodos para servirla en la raíz (reescritura .htaccess con snippet generado, o archivo físico), y agrupa URLs hasta 100 por llamada para ahorrar peticiones.
Los hooks PrestaShop escuchados
El módulo se engancha a los hooks oficiales del ciclo de vida de los objetos PrestaShop. Para productos: actionProductSave se llama en la creación y en cada modificación: si el producto está activo, la URL se encola como URL_UPDATED, si no como URL_DELETED. actionProductDelete se llama en la eliminación definitiva: URL_DELETED encolado. Para páginas CMS: actionObjectCmsAddAfter (creación), actionObjectCmsUpdateAfter (actualización), actionObjectCmsDeleteAfter (eliminación). Para categorías: actionCategoryAdd, actionCategoryUpdate, actionCategoryDelete: la raíz de categoría (ID 1 y 2) se ignora por seguridad. Cada hook construye la URL canónica mediante el objeto Link oficial de PrestaShop, lo que garantiza el respeto de las preferencias SEO friendly URL, los prefijos de idioma y las reglas multilingües.
La cola: por qué y cómo
Enviar de forma sincrónica en cada hook sería doblemente malo: la latencia ralentizaría la administración (una llamada a Google puede tardar 2 a 5 segundos), y un fallo de API impediría guardar el producto. El módulo encola cada envío en una tabla persistente (df_indexapi_queue) y un CRON procesa el lote cada pocos minutos. La deduplicación es clave: si modificas un producto tres veces en una hora, el módulo reconoce que ya existe un trabajo para esa tupla (tienda, tipo, ID, proveedor, acción) y simplemente actualiza su URL y fecha, no crea tres. El bloqueo lógico pending a processing evita el procesamiento doble si dos CRONs paralelos reclaman de la cola al mismo tiempo. Y cada fallo incrementa un contador de reintentos, activando un reintento automático en el siguiente CRON hasta un máximo configurable (predeterminado 5): más allá, el trabajo pasa a error y permanece visible en la pantalla Cola con el mensaje exacto de la API.
El registro y el dashboard
Cada envío produce una entrada en la tabla df_indexapi_log: proveedor Google o IndexNow, tipo y ID de objeto, URL exacta enviada, acción URL_UPDATED o URL_DELETED, código HTTP devuelto, indicador aceptado o rechazado, mensaje completo de respuesta y fecha. La pantalla Registro expone estos datos en un HelperList estándar de PrestaShop con filtros nativos (proveedor, código HTTP, aceptado), ordenación y exportación CSV. El Dashboard agrega todo: cinco tarjetas para los contadores por estado de la cola, dos tarjetas de diagnóstico de proveedor (Service Account de Google configurado o no, clave y host IndexNow configurados o no), una tabla de tasa de aceptación a 30 días por proveedor con coloración semántica (verde por encima de 90, naranja entre 60 y 90, rojo por debajo), y un gráfico Chart.js de envíos diarios superponiendo total enviado y total aceptado. Ves de un vistazo si la indexación funciona y dónde falla.
Seguridad del CRON y archivo clave
El controlador CRON está expuesto en una URL frontend estándar de PrestaShop, pero protegido por un token aleatorio de 32 caracteres generado al instalar y regenerable con un clic desde la configuración. Sin el token correcto, el controlador devuelve 403. Se admiten tres acciones: process procesa un lote de la cola (a llamar cada 5 a 15 minutos por tu CRON de hosting), purge elimina trabajos y registros procesados más allá de la retención configurada (a llamar una vez al día), y key sirve el contenido del archivo clave IndexNow como text/plain para la reescritura .htaccess (protegido por el conocimiento previo de la clave en el parámetro k). El snippet .htaccess exacto a pegar en la raíz de PrestaShop se genera automáticamente en la página Configuración con la clave actual.
Casos de uso típicos
Tienda en crecimiento con 50 nuevos productos por semana: el módulo encola cada creación, el CRON envía a Google e IndexNow en 10 minutos: tus nuevos productos están en SERP en cuestión de horas en lugar de días. Tienda multilingüe con catálogo de 5000 productos: en cada cambio de ficha, las URLs canónicas de todos los idiomas se encolan y envían: te beneficias de la ganancia SEO en todos tus mercados simultáneamente. Tienda B2B con catálogo técnico frecuentemente actualizado (precios, stocks, fichas técnicas): la deduplicación evita saturar las APIs en ráfagas de cambios: un único trabajo por producto incluso si lo modificas veinte veces en un día. Recuperación SEO tras migración: un botón Reintentar todos los trabajos en la pantalla Cola permite reenviar en masa tras resolver un problema de configuración o cuota.
Limitaciones conocidas y buenas prácticas
IndexNow no gestiona URL_DELETED: el protocolo considera que un 404 o 410 en la URL es la forma adecuada de señalar una eliminación. El módulo ignora por tanto los trabajos IndexNow en URL_DELETED (Google los envía correctamente, ya que admite ese tipo de acción). La cuota Google está limitada a 200 URLs por día por Service Account por defecto: para una tienda que modifica más, debes solicitar un aumento a Google, o crear un segundo Service Account con su propia cuota. El módulo no envía variantes ni combinaciones de productos: la URL canónica del producto principal basta para Google, que consolida las variantes naturalmente. Y la raíz de categoría (ID 1 y 2) se ignora para evitar enviar URLs no relevantes.
No hay valoraciones aún.