PS PrestaShop Intermédio

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.

Atualizado Versão do módulo 1.0.0

Este guia cobre a instalação, a configuração e a verificação do módulo dfobfuscator no PrestaShop 8 e 9.

Instalação

  1. Vá a Módulos e Serviços, Carregar um módulo no seu back-office.
  2. Coloque o ficheiro dfobfuscator.zip e confirme.
  3. 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-o com o URL em base64 invertido;
  • a classe df-obf além das suas classes de origem;
  • tabindex="0" e role="link" para acessibilidade;
  • data-t quando 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

  1. 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).
  2. Procure df-obf: deve encontrar elementos span no lugar das ligações de filtros.
  3. 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.

Esta página foi útil?

Ainda com dúvidas? Contacte o suporte