Ofuscação de Ligações SEO para PrestaShop: documentação
Instalação, configuração das predefinições, escrita dos seletores CSS e verificação do resultado servido aos rastreadores.
Este guia cobre a instalação, a configuração e a verificação do módulo dfobfuscator no PrestaShop 8 e 9.
Instalação
- Vá a Módulos e Serviços, Carregar um módulo no seu back-office.
- Coloque o ficheiro
dfobfuscator.zipe confirme. - Clique em Configurar assim que a instalação terminar.
O módulo regista-se automaticamente em dois hooks: actionOutputHTMLBefore para a reescrita do HTML e actionFrontControllerSetMedia para o carregamento dos recursos do front-office. Não é criado qualquer override de ficheiro do core.
A extensão PHP DOM tem de estar ativa. Está-o por predefinição na quase totalidade dos alojamentos. Na sua ausência, o módulo mantém-se instalado mas deixa o HTML inalterado.
Configuração
Ativar a ofuscação
O interruptor principal desativa toda a reescrita sem desinstalar o módulo. Prático para comparar o código-fonte antes e depois, ou para isolar o módulo durante um diagnóstico.
As três predefinições
| Predefinição | O que abrange | Predefinido |
|---|---|---|
| Navegação por facetas | Os blocos de filtros e a lista de filtros ativos | Ativa |
| Ordenação dos produtos | O menu pendente de ordenação | Ativa |
| Paginação | As ligações para a página 2, 3 e seguintes | Inativa |
Só ative a paginação se o seu sitemap XML e as suas ligações internas tornarem cada ficha de produto acessível por outra via. Caso contrário, corta o único caminho de exploração para uma parte do seu catálogo.
Seletores CSS personalizados
Um seletor por linha. As vírgulas na mesma linha também são aceites. Cada ligação correspondente a um seletor é ofuscada.
#footer .account-links a
.block-tags a
.my-custom-block a[data-filter]
O conversor interno suporta a etiqueta, o identificador, a classe, os atributos (presença ou valor exato), o combinador descendente e o combinador de filho direto. Se a sua loja incluir symfony/css-selector na pasta vendor, o módulo dá-lhe prioridade e passa a dispor da sintaxe CSS completa.
Linhas XPath
Para as seleções que o CSS não permite exprimir, prefixe a linha com xpath::
xpath://div[@id='js-product-list']//a[contains(@href,'?order=')]
Controladores excluídos
Lista de nomes de controladores de front-office separados por vírgulas. Nessas páginas não há qualquer reescrita e os recursos não são carregados. Valor predefinido: order,cart. Acrescente qualquer controlador cujo percurso não deva depender de JavaScript.
Como funciona a reescrita
No hook actionOutputHTMLBefore, o módulo recebe o HTML completo da página. Começa por verificar que se trata mesmo de um documento HTML inteiro, o que exclui as respostas AJAX e JSON. Depois carrega o documento em DOMDocument, converte cada seletor numa consulta XPath e substitui as ligações encontradas por elementos span.
Cada elemento ofuscado recebe:
- um atributo
data-ocom o URL em base64 invertido; - a classe
df-obfalém das suas classes de origem; tabindex="0"erole="link"para acessibilidade;data-tquando a ligação original tinha um atributo target.
As ligações cujo URL começa por #, mailto:, tel: ou javascript: são ignoradas. O atributo rel é retirado e o atributo target é conservado sob a forma de data-t.
Recurso automático
Se a análise do documento falhar, ou se nenhum seletor corresponder a uma ligação, o HTML de origem é devolvido sem alterações. O módulo não pode, por isso, partir uma página por causa de marcação inesperada.
Conteúdo carregado por AJAX
A atualização dos filtros e o scroll infinito voltam a injetar ligações depois da apresentação inicial. O ficheiro front.js instala um MutationObserver que aplica os mesmos seletores a essas novas ligações, do lado do navegador. Os seletores são transmitidos ao front-office através de Media::addJsDef. As linhas XPath ficam excluídas deste mecanismo, uma vez que o navegador não as avalia.
Verificar que está a funcionar
- Abra uma página de categoria com filtros e mostre o código-fonte da página (Ctrl+U, não o inspetor de elementos).
- Procure
df-obf: deve encontrar elementos span no lugar das ligações de filtros. - Procure um URL de filtro, por exemplo
?q=: já não deve aparecer num atributo href.
O inspetor de elementos mostra o DOM depois da execução do JavaScript, não o HTML servido. Para avaliar o resultado do lado do rastreador, use sempre a visualização do código-fonte ou uma ferramenta como o curl.
Do lado da navegação, teste o clique esquerdo, o clique no botão do meio, o ctrl+clique (cmd+clique no macOS) e a tecla Enter depois de chegar a um filtro com a tabulação.
Resolução de problemas
Nada é ofuscado
Verifique por esta ordem: o interruptor principal está ativo, há pelo menos uma predefinição ou um seletor preenchido, o controlador atual não consta da lista de exclusões e a extensão PHP DOM está disponível. Limpe depois a cache do PrestaShop.
Um tema personalizado não fica coberto
As predefinições visam os seletores do tema Classic. Num tema à medida, inspecione o bloco de filtros para identificar o seu identificador ou a classe do contentor e acrescente uma linha de seletor personalizado.
Uma ligação ofuscada por engano
Reduza o alcance do seletor visando um contentor mais preciso, ou retire a predefinição em causa e substitua-a por seletores personalizados mais estreitos.
O módulo de pesquisa AJAX perde as suas ligações
Alguns módulos de terceiros reconstroem por completo o seu bloco de filtros. Se o comportamento diferir entre a primeira apresentação e a atualização, confirme que o seletor personalizado se aplica ao contentor reconstruído e não a um elemento destruído a cada atualização.
Perguntas frequentes
Isto é cloaking?
Não. O HTML servido é idêntico para todos: sem teste de user-agent e sem variantes de página. A ligação não existe para ninguém no código-fonte, e o navegador reconstitui-a no momento da interação.
Os URL já indexados desaparecem?
Não. A ofuscação atua sobre a descoberta de novos URL. Para os URL já no índice, mantenha as suas diretivas noindex ou os seus redirecionamentos até que o Google os volte a visitar.
Qual é o impacto no desempenho?
Uma análise DOM da página final, da ordem de alguns milissegundos numa página de categoria normal. Do lado do front-office, 5 KB de JavaScript e 0,2 KB de CSS.
É preciso desativar o módulo durante uma auditoria SEO?
Não, pelo contrário: a auditoria deve refletir aquilo que os rastreadores veem. Se a sua ferramenta de auditoria assinalar uma queda no número de ligações internas nas páginas de categoria, é esse o resultado esperado.