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.
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
- Vaya a Módulos y Servicios, Subir un módulo en su back-office.
- Suelte el archivo
dfobfuscator.zipy confirme. - 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-ocon la URL en base64 invertido; - la clase
df-obfademás de sus clases originales; tabindex="0"yrole="link"para la accesibilidad;data-tcuando 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
- 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).
- Busque
df-obf: debe encontrar elementos span donde antes había enlaces de filtro. - 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.