PS PrestaShop Intermedio

Ofuscación de Enlaces SEO para PrestaShop

Instalación, configuración de los presets, escritura de selectores CSS y verificación de lo que reciben los rastreadores.

Actualizado Versión del módulo 1.0.0

Esta guía cubre la instalación, la configuración y la verificación del módulo dfobfuscator en PrestaShop 8 y 9.

Instalación

  1. Vaya a Módulos y Servicios, Subir un módulo en su back-office.
  2. Suelte el archivo dfobfuscator.zip y confirme.
  3. Haga clic en Configurar una vez terminada la instalación.

El módulo se registra en dos hooks: actionOutputHTMLBefore para la reescritura del HTML y actionFrontControllerSetMedia para la carga de los recursos del front. No se crea ningún override de archivos del core.

La extensión PHP DOM debe estar activa. Lo está por defecto en casi todos los alojamientos. Sin ella, el módulo permanece instalado pero deja el HTML sin cambios.

Configuración

Activar la ofuscación

El interruptor principal desactiva toda la reescritura sin desinstalar el módulo. Resulta útil para comparar el código fuente antes y después, o para aislar el módulo durante un diagnóstico.

Los tres presets

Preset Qué selecciona Por defecto
Navegación por facetas Los bloques de filtros y la lista de filtros activos Activado
Ordenación de productos El desplegable de ordenación Activado
Paginación Los enlaces a la página 2, 3 y siguientes Desactivado

Active la paginación solo si su sitemap XML y su enlazado interno hacen que cada ficha de producto sea accesible de otra forma. De lo contrario, corta la única vía de rastreo hacia una parte de su catálogo.

Selectores CSS personalizados

Un selector por línea. También se aceptan comas en una misma línea. Cada enlace que coincida con un selector se ofusca.

#footer .account-links a
.block-tags a
.my-custom-block a[data-filter]

El convertidor interno soporta la etiqueta, el identificador, la clase, los atributos (presencia o valor exacto), el combinador descendiente y el combinador de hijo directo. Si su tienda incluye symfony/css-selector en su vendor, el módulo lo usa de forma prioritaria y dispone entonces de la sintaxis CSS completa.

Líneas XPath

Para las selecciones que el CSS no permite expresar, prefije la línea con xpath::

xpath://div[@id='js-product-list']//a[contains(@href,'?order=')]

Controladores excluidos

Lista de nombres de controladores del front separados por comas. En esas páginas no se produce ninguna reescritura y los recursos no se cargan. Valor por defecto: order,cart. Añada cualquier controlador cuyo recorrido no deba depender de JavaScript.

Cómo funciona la reescritura

En el hook actionOutputHTMLBefore, el módulo recibe el HTML completo de la página. Primero comprueba que se trata de un documento HTML entero, lo que descarta las respuestas AJAX y JSON. Después carga el documento en DOMDocument, convierte cada selector en una consulta XPath y sustituye los enlaces encontrados por elementos span.

Cada elemento ofuscado recibe:

  • un atributo data-o con la URL en base64 invertido;
  • la clase df-obf además de sus clases originales;
  • tabindex="0" y role="link" para la accesibilidad;
  • data-t cuando el enlace original llevaba un atributo target.

Los enlaces cuya URL empieza por #, mailto:, tel: o javascript: se ignoran. El atributo rel se elimina, el atributo target se conserva como data-t.

Repliegue automático

Si el análisis del documento falla, o si ningún selector coincide con un enlace, se devuelve el HTML original sin modificar. El módulo no puede, por tanto, romper una página por un marcado inesperado.

Contenido cargado por AJAX

La actualización de filtros y el scroll infinito reinyectan enlaces tras el renderizado inicial. El archivo front.js instala un MutationObserver que aplica los mismos selectores a esos nuevos enlaces, en el navegador. Los selectores se transmiten al front mediante Media::addJsDef. Las líneas XPath quedan excluidas de este mecanismo, ya que el navegador no las evalúa.

Verificar que funciona

  1. Abra una página de categoría con filtros y muestre el código fuente de la página (Ctrl+U, no el inspector de elementos).
  2. Busque df-obf: debe encontrar elementos span donde antes había enlaces de filtro.
  3. Busque una URL de filtro, por ejemplo ?q=: ya no debe aparecer en un atributo href.

El inspector de elementos muestra el DOM tras la ejecución del JavaScript, no el HTML servido. Para juzgar el resultado desde el punto de vista del rastreador, use siempre el código fuente o una herramienta como curl.

En cuanto a la navegación, pruebe el clic izquierdo, el clic central, el ctrl+clic (cmd+clic en macOS) y la tecla Intro tras llegar a un filtro con el tabulador.

Resolución de problemas

No se ofusca nada

Compruebe por orden: el interruptor principal está activo, hay al menos un preset o un selector configurado, el controlador actual no está en la lista de exclusiones, la extensión PHP DOM está disponible. Después vacíe la caché de PrestaShop.

Un tema personalizado no queda cubierto

Los presets apuntan a los selectores del tema Classic. En un tema a medida, inspeccione el bloque de filtros para anotar el identificador o la clase de su contenedor y añada una línea de selector personalizado.

Un enlace ofuscado por error

Reduzca el alcance del selector apuntando a un contenedor más preciso, o retire el preset implicado y sustitúyalo por selectores personalizados más estrechos.

Un módulo de búsqueda AJAX pierde sus enlaces

Algunos módulos de terceros reconstruyen por completo su bloque de filtros. Si el comportamiento difiere entre la primera visualización y la actualización, compruebe que su selector personalizado se aplica al contenedor reconstruido y no a un elemento destruido en cada actualización.

Preguntas frecuentes

¿Esto es cloaking?

No. El HTML servido es idéntico para todos: sin prueba de user-agent, sin variante de página. El enlace no existe para nadie en el código fuente, y el navegador lo reconstruye en el momento de la interacción.

¿Desaparecen las URLs ya indexadas?

No. La ofuscación actúa sobre el descubrimiento de nuevas URLs. Para las URLs que ya están en el índice, mantenga sus directivas noindex o sus redirecciones hasta que Google las revisite.

¿Qué impacto tiene en el rendimiento?

Un análisis DOM de la página final, del orden de unos milisegundos en una página de categoría estándar. En el front, 5 KB de JavaScript y 0,2 KB de CSS.

¿Hay que desactivar el módulo durante una auditoría SEO?

No, al contrario: la auditoría debe reflejar lo que ven los rastreadores. Si su herramienta señala una caída del número de enlaces internos en las páginas de categoría, ese es el resultado esperado.

¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte