DataFirefly Indexing API — Documentación
Instalación, configuración Google Indexing API + IndexNow, CRON, dashboard, cola, solución de problemas.
Resumen
DataFirefly Indexing API envía automáticamente los productos, categorías y páginas CMS de tu tienda PrestaShop a las dos APIs oficiales de envío directo: Google Indexing API (autenticación Service Account OAuth2, firma JWT RS256 nativa) e IndexNow mediante el relé api.indexnow.org que propaga a Bing, Yandex, Naver y Seznam en una sola llamada. El módulo se engancha a los hooks nativos de PrestaShop, encola cada cambio en una cola con deduplicación, y un CRON procesa el lote cada pocos minutos. Mantienes un registro completo de los envíos y un dashboard del tasa de aceptación.
Requisitos
- PrestaShop 8.0 a 8.99, o PrestaShop 9.x
- PHP 7.4 a 8.3
- Extensiones PHP
openssl(para la firma JWT RS256 de Google) ycurl(para las peticiones HTTP) - Un CRON del sistema o un servicio externo de CRON para llamar al procesamiento de la cola cada 5 a 15 minutos
- Opcional — para Google: una cuenta Google Cloud con un proyecto donde activar la Indexing API y crear un Service Account, y una propiedad Search Console verificada para tu dominio
Instalación
Paso 1 — Descarga
Descarga el ZIP dfindexingapi-1.0.0.zip desde tu cuenta DataFirefly tras la compra.
Paso 2 — Instalación desde el back-office
- Conéctate a tu back-office PrestaShop
- Ve a Módulos › Gestor de módulos › Subir un módulo
- Haz clic en Seleccionar archivo y elige el ZIP descargado
- Valida. PrestaShop descomprime e instala el módulo
- Una vez instalado, haz clic en Configurar
Paso 3 — Verificaciones post-instalación
En la instalación, el módulo crea automáticamente:
- Las dos tablas SQL
ps_df_indexapi_queue(cola) yps_df_indexapi_log(registro) - Una clave IndexNow alfanumérica de 32 caracteres
- Un token CRON aleatorio de 32 caracteres
- 5 pestañas en el menú admin: padre DataFirefly Indexing API, luego Dashboard, Cola, Registro, Configuración
Abre la pestaña Configuración para pasar al siguiente paso.
Configuración de Google Indexing API
La API Google Indexing requiere un Service Account de Google Cloud. El proceso tarda unos 5 minutos.
Paso 1 — Crear un proyecto Google Cloud
- Ve a console.cloud.google.com e inicia sesión
- Arriba, haz clic en el selector de proyecto, luego Nuevo proyecto
- Dale un nombre (por ejemplo Indexing API Tienda) y créalo
- Selecciona el proyecto recién creado
Paso 2 — Activar la Indexing API
- En el menú izquierdo, ve a APIs y servicios › Biblioteca
- Busca Indexing API
- Haz clic en Activar
Paso 3 — Crear un Service Account
- Ve a APIs y servicios › Credenciales
- Haz clic en Crear credenciales › Cuenta de servicio
- Dale un nombre (por ejemplo indexing-api-prestashop)
- No se necesita rol IAM — pasa al siguiente paso y finaliza la creación
- En la lista de cuentas de servicio, haz clic en la cuenta creada
- Pestaña Claves › Añadir clave › Crear nueva clave
- Formato JSON. Descarga y conserva el archivo — no podrá recuperarse después
Paso 4 — Añadir el Service Account a Search Console
- Copia el email del Service Account (forma
nombre@proyecto.iam.gserviceaccount.com) desde Google Cloud - Ve a Google Search Console
- Selecciona tu propiedad (el dominio de tu tienda)
- Ve a Configuración › Usuarios y permisos
- Haz clic en Añadir usuario, pega el email del Service Account, selecciona el rol Propietario
- Valida
403 Permission denied.Paso 5 — Pegar el JSON en el módulo
- Abre el archivo JSON descargado en un editor de texto
- Copia todo su contenido
- En la configuración del módulo, sección Google Indexing API, marca Activar Google Indexing API
- Pega el JSON completo en el campo Service Account JSON
- Guarda
Paso 6 — Probar la conexión
Haz clic en el botón Probar Google en la página de configuración. El módulo firma un JWT RS256, lo intercambia por un token OAuth2, y muestra el resultado. Si todo es correcto, ves un mensaje verde Autenticación OK.
Configuración de IndexNow
IndexNow es más simple de configurar: sin Service Account, sin OAuth, sin cuota. Solo una clave a publicar en la raíz de tu dominio.
Entender IndexNow
IndexNow es un protocolo abierto impulsado por Microsoft Bing y Yandex en 2021, al que se unieron Naver y Seznam. Generas una clave alfanumérica, la publicas en la raíz de tu dominio como un archivo accesible públicamente, y llamas a api.indexnow.org con una lista de URLs. El servidor verifica la clave leyendo el archivo en tu dominio, luego propaga las URLs a los motores participantes.
Método 1 — Reescritura .htaccess (recomendado)
Es el método más simple: el módulo sirve él mismo el contenido del archivo clave mediante un controlador frontend, y una regla .htaccess en la raíz de tu tienda redirige la petición a ese controlador.
- En la configuración del módulo, abre la pestaña IndexNow
- Marca Activar IndexNow
- Verifica el campo Host — debe corresponder al dominio de tu tienda sin el protocolo (por ejemplo
mi-tienda.es) - Guarda
- Copia el snippet
.htaccessmostrado en la página de configuración — se genera dinámicamente con tu clave actual - Pega este snippet en la parte superior del archivo
.htaccessen la raíz de PrestaShop, justo después del bloqueRewriteEngine on - Haz clic en Probar IndexNow en la configuración — el módulo llama a la URL del archivo clave en tu dominio y verifica que devuelve el contenido esperado como
text/plain
Método 2 — Archivo físico
Si no puedes modificar el .htaccess, crea manualmente un archivo físico en la raíz del dominio.
- Recupera tu clave IndexNow desde la configuración del módulo (campo Clave IndexNow)
- Crea un archivo cuyo nombre sea exactamente la clave + .txt (por ejemplo
a1b2c3d4e5f6.txt) en la raíz de tu dominio - El contenido del archivo debe ser únicamente la clave en sí, sin salto de línea
- Verifica que
https://tu-dominio.com/a1b2c3d4e5f6.txtdevuelve la clave comotext/plain - Haz clic en Probar IndexNow
.htaccess o el archivo físico en consecuencia.Configuración del CRON
El CRON es el elemento que hace funcionar el procesamiento de la cola. Sin un CRON llamado regularmente, los envíos se acumulan pero nunca salen.
Acción process — procesamiento de la cola
A llamar cada 5 a 15 minutos. El módulo procesa un lote configurable (predeterminado 50 trabajos) siguiendo la deduplicación y los filtros de indexación, luego actualiza el registro y la cola.
La URL exacta se muestra en la configuración. Tiene este aspecto:
https://tu-dominio.com/index.php?fc=module&module=dfindexingapi&controller=cron&dfaction=process&token=TU_TOKEN
Acción purge — limpieza del registro
A llamar una vez al día. El módulo elimina los trabajos y registros procesados más allá de la retención configurada (predeterminado 30 días).
https://tu-dominio.com/index.php?fc=module&module=dfindexingapi&controller=cron&dfaction=purge&token=TU_TOKEN
Acción key — archivo clave IndexNow
Solo utilizada por la reescritura .htaccess. Nunca llamas a esta URL manualmente.
Configurar tu CRON del sistema
En Linux/cPanel, añade dos líneas en crontab:
# Cada 10 minutos — procesamiento de la cola
*/10 * * * * curl -s "https://tu-dominio.com/index.php?fc=module&module=dfindexingapi&controller=cron&dfaction=process&token=TU_TOKEN" > /dev/null
# Una vez al día a las 3h — purga del registro
0 3 * * * curl -s "https://tu-dominio.com/index.php?fc=module&module=dfindexingapi&controller=cron&dfaction=purge&token=TU_TOKEN" > /dev/null
Seguridad del token CRON
El token es un secreto de 32 caracteres generado en la instalación. Sin el token correcto en el parámetro token=, el controlador devuelve HTTP 403. Puedes regenerar el token en cualquier momento desde la configuración (botón Regenerar token CRON) — recuerda actualizar tus líneas crontab con el nuevo token.
El Dashboard
La pestaña Dashboard es tu vista general en tiempo real.
Contadores de cola
Cinco tarjetas en la parte superior de la página:
- Pendiente — trabajos creados pero aún no procesados
- En curso — trabajos bloqueados en procesamiento por un CRON activo
- Enviado — trabajos procesados con éxito (acumulación histórica no purgada)
- Error — trabajos que han fallado tras N reintentos máximos
- Omitido — trabajos creados pero ignorados por un filtro (por ejemplo URL_DELETED para IndexNow)
Diagnóstico de proveedores
Dos tarjetas muestran el estado de configuración:
- Google Indexing API — activo, mal configurado, o desactivado. Indica si el JSON Service Account está presente y es válido
- IndexNow — activo, mal configurado, o desactivado. Indica si la clave y el host están configurados
Tasa de aceptación a 30 días
Tabla cruzada proveedor × estado sobre los últimos 30 días, con coloración semántica: verde por encima del 90%, naranja entre 60 y 90%, rojo por debajo. Si Google cae por debajo del 90%, generalmente es señal de que has superado la cuota o que las URLs ya no son accesibles.
Gráfico de envíos diarios
Gráfico Chart.js que superpone dos curvas diarias: total enviado y total aceptado. Útil para detectar rápidamente caídas o picos anómalos.
La Cola
La pestaña Cola lista todos los trabajos (pending, processing, submitted, error, skipped) con filtros nativos de PrestaShop por tienda, tipo de objeto, ID, proveedor, estado, fecha.
Estados de los trabajos
- pending — creado, en espera de procesamiento por el siguiente CRON
- processing — bloqueado por un CRON activo (transición lógica para evitar el procesamiento doble en paralelo)
- submitted — envío exitoso a la API. El contador de reintentos está congelado
- error — todos los reintentos han fallado. Permanece visible con el mensaje de error exacto devuelto por la API
- skipped — creado y luego ignorado (por ejemplo URL_DELETED IndexNow, o filtro desactivado)
Acciones individuales
Cada fila ofrece:
- Reintentar — pone el trabajo de nuevo en pending y reinicia el contador de reintentos
- Eliminar — borra el trabajo de la cola
Acciones en masa
Botones en la parte superior de la lista:
- Reintentar todos los trabajos en error — pone en pending todos los trabajos en estado error
- Purgar trabajos procesados — elimina todos los submitted/skipped sin importar su antigüedad
El Registro
La pestaña Registro lista cada envío individual realizado: proveedor, tipo, ID de objeto, URL enviada, acción (URL_UPDATED o URL_DELETED), código HTTP devuelto, indicador aceptado/rechazado, mensaje completo de respuesta y fecha. Filtrable, ordenable, exportable como CSV mediante el HelperList estándar de PrestaShop.
Filtros de indexación
En la configuración, puedes activar o desactivar independientemente tres tipos de objetos:
- Productos — envío en creación, modificación, eliminación, desactivación
- Categorías — envío en creación, modificación, eliminación. La raíz de categoría (ID 1 y 2) se ignora por seguridad
- Páginas CMS — envío en creación, modificación, eliminación
Desactivar un filtro detiene inmediatamente el encolado para ese tipo, pero no purga la cola existente.
Multi-tienda
El módulo es nativamente multi-tienda. La configuración (claves Google, clave IndexNow, host, activaciones) es independiente por sub-tienda. Los trabajos y registros están delimitados por id_shop — el mismo producto en dos sub-tiendas genera dos trabajos distintos con sus propias URLs canónicas.
Para configurar independientemente cada sub-tienda, usa el selector multistore en la parte superior del admin antes de abrir la configuración.
Hooks PrestaShop escuchados
El módulo registra los siguientes hooks en la instalación:
actionProductSave— creación o modificación de un producto. Si activo, encola URL_UPDATED; si no URL_DELETEDactionProductDelete— eliminación definitiva de un producto. Encola URL_DELETEDactionObjectCmsAddAfter— creación de página CMSactionObjectCmsUpdateAfter— modificación de página CMSactionObjectCmsDeleteAfter— eliminación de página CMSactionCategoryAdd— creación de categoríaactionCategoryUpdate— modificación de categoríaactionCategoryDelete— eliminación de categoríadisplayBackOfficeHeader— inyección de fragmento CSS para el estilo del dashboard
Cada hook construye la URL canónica mediante el objeto Link oficial de PrestaShop, lo que respeta tus preferencias SEO friendly URL y los prefijos de idioma multilingüe.
Solución de problemas
La prueba Google falla con código 401
La autenticación ha fallado. Verifica que:
- El JSON Service Account pegado está completo y bien formado
- La Indexing API está bien activada en Google Cloud (biblioteca)
- El reloj del sistema del servidor es correcto — un desfase de más de 5 minutos invalida el JWT
La prueba Google falla con código 403
La autenticación tiene éxito pero Google rechaza la petición. Causa habitual: el Service Account no ha sido añadido como Propietario de la propiedad Search Console. Re-verifica el paso 4 de la configuración Google.
La prueba IndexNow falla
El servidor api.indexnow.org no ha podido leer el archivo clave en tu dominio. Causas posibles:
- El snippet
.htaccessno ha sido pegado, o pegado en el lugar incorrecto (debe estar después deRewriteEngine on) - El archivo físico no ha sido creado, o no tiene el nombre correcto (debe ser exactamente la clave + .txt)
- El contenido del archivo no corresponde a la clave (errata, salto de línea adicional)
- El servidor web sirve el archivo con el Content-Type incorrecto (debe ser
text/plain) - El firewall o el CDN bloquea las peticiones del robot IndexNow
Abre https://tu-dominio.com/TU_CLAVE.txt en un navegador en navegación privada — debes ver únicamente la clave como texto plano.
Trabajos atascados en estado processing
Significa que un CRON ha bloqueado los trabajos pero nunca ha liberado el bloqueo (por ejemplo el proceso fue eliminado por un timeout PHP). Puedes desbloquearlos manualmente mediante phpMyAdmin:
UPDATE ps_df_indexapi_queue SET status = 'pending', attempts = 0 WHERE status = 'processing';
Si el problema se repite regularmente, aumenta el max_execution_time PHP de tu hosting, o reduce el tamaño del lote en la configuración del módulo.
Cuota Google superada
Google responde con código 429 o mensaje Quota exceeded. Tres opciones:
- Esperar 24h — la cuota se reinicia diariamente
- Solicitar un aumento de cuota a Google mediante Cloud Console (Cuotas y límites del sistema). Justifica explicando que tu tienda e-commerce necesita más envíos diarios
- Crear un segundo Service Account y alternar — cada Service Account tiene su propia cuota de 200 URLs/día
Reinicio completo
Para empezar desde cero (útil en caso de migración o problema complejo):
- Desinstalar el módulo desde Módulos › Gestor
- Reinstalar — las tablas se recrean, la clave IndexNow y el token CRON se regeneran
- Reconfigurar Google e IndexNow
- Actualizar el snippet
.htaccesscon la nueva clave - Actualizar las líneas crontab con el nuevo token
Limitaciones conocidas
- 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)
- Cuota Google limitada a 200 URLs/día por Service Account por defecto
- Variantes de productos no enviadas individualmente — la URL canónica del producto principal basta, Google consolida las variantes naturalmente
- Raíz de categoría ignorada (ID 1 y 2) para evitar enviar URLs no pertinentes
- API Indexing Google oficialmente limitada a páginas JobPosting o BroadcastEvent — la API acepta otros tipos y responde 200, pero Google puede ignorar la indexación final. Para la mayoría de las tiendas, IndexNow sigue siendo la solución más impactante en la práctica
Soporte
Para cualquier pregunta técnica: support@datafirefly.com — respuesta en 24h laborables en español, inglés o francés. Incluido durante 12 meses tras la compra.