Offuscamento Link SEO per PrestaShop
Installazione, configurazione dei preset, scrittura dei selettori CSS e verifica di ciò che ricevono i crawler.
Questa guida copre installazione, configurazione e verifica del modulo dfobfuscator su PrestaShop 8 e 9.
Installazione
- Andate su Moduli e Servizi, Carica un modulo nel vostro back-office.
- Rilasciate il file
dfobfuscator.zipe confermate. - Cliccate su Configura a installazione completata.
Il modulo si registra su due hook: actionOutputHTMLBefore per la riscrittura dell’HTML e actionFrontControllerSetMedia per il caricamento degli asset del front. Non viene creato alcun override di file core.
L’estensione PHP DOM deve essere attiva. Lo è per impostazione predefinita su quasi tutti gli hosting. In sua assenza il modulo resta installato ma lascia l’HTML invariato.
Configurazione
Attivare l’offuscamento
L’interruttore principale disattiva tutta la riscrittura senza disinstallare il modulo. Utile per confrontare il codice sorgente prima e dopo, o per isolare il modulo durante una diagnosi.
I tre preset
| Preset | Cosa seleziona | Predefinito |
|---|---|---|
| Navigazione a faccette | I blocchi di filtri e l’elenco dei filtri attivi | Attivo |
| Ordinamento prodotti | Il menu a tendina di ordinamento | Attivo |
| Paginazione | I link alla pagina 2, 3 e successive | Disattivo |
Attivate la paginazione solo se la vostra sitemap XML e i vostri link interni rendono ogni scheda prodotto raggiungibile in altro modo. Altrimenti tagliate l’unico percorso di scansione verso una parte del catalogo.
Selettori CSS personalizzati
Un selettore per riga. Sono accettate anche le virgole su una stessa riga. Ogni link che corrisponde a un selettore viene offuscato.
#footer .account-links a
.block-tags a
.my-custom-block a[data-filter]
Il convertitore interno supporta il tag, l’identificatore, la classe, gli attributi (presenza o valore esatto), il combinatore discendente e il combinatore figlio diretto. Se il vostro negozio include symfony/css-selector nel suo vendor, il modulo lo usa in via prioritaria e disponete allora della sintassi CSS completa.
Righe XPath
Per le selezioni che il CSS non permette di esprimere, anteponete xpath: alla riga:
xpath://div[@id='js-product-list']//a[contains(@href,'?order=')]
Controller esclusi
Elenco di nomi di controller front separati da virgole. Su quelle pagine non avviene alcuna riscrittura e gli asset non vengono caricati. Valore predefinito: order,cart. Aggiungetevi qualsiasi controller il cui percorso non debba dipendere da JavaScript.
Come funziona la riscrittura
Sull’hook actionOutputHTMLBefore il modulo riceve l’HTML completo della pagina. Verifica prima che si tratti di un documento HTML intero, il che esclude le risposte AJAX e JSON. Carica poi il documento in DOMDocument, converte ogni selettore in una query XPath e sostituisce i link trovati con elementi span.
Ogni elemento offuscato riceve:
- un attributo
data-ocontenente l’URL in base64 invertito; - la classe
df-obfoltre alle sue classi originali; tabindex="0"erole="link"per l’accessibilità;data-tquando il link originale portava un attributo target.
I link il cui URL inizia con #, mailto:, tel: o javascript: vengono ignorati. L’attributo rel viene rimosso, l’attributo target viene conservato come data-t.
Ripiego automatico
Se l’analisi del documento fallisce, o se nessun selettore corrisponde a un link, l’HTML originale viene restituito senza modifiche. Il modulo non può quindi rompere una pagina a causa di un markup inatteso.
Contenuti caricati via AJAX
L’aggiornamento dei filtri e lo scroll infinito reinseriscono link dopo il rendering iniziale. Il file front.js installa un MutationObserver che applica gli stessi selettori a questi nuovi link, lato browser. I selettori vengono trasmessi al front tramite Media::addJsDef. Le righe XPath sono escluse da questo meccanismo, poiché il browser non le valuta.
Verificare che funzioni
- Aprite una pagina categoria con filtri, poi visualizzate il codice sorgente della pagina (Ctrl+U, non l’ispettore degli elementi).
- Cercate
df-obf: dovete trovare elementi span al posto dei link di filtro. - Cercate un URL di filtro, ad esempio
?q=: non deve più comparire in un attributo href.
L’ispettore degli elementi mostra il DOM dopo l’esecuzione del JavaScript, non l’HTML servito. Per giudicare il risultato dal punto di vista del crawler, usate sempre la visualizzazione del sorgente o uno strumento come curl.
Lato navigazione, provate il clic sinistro, il clic centrale, il ctrl+clic (cmd+clic su macOS) e il tasto Invio dopo aver raggiunto un filtro con il tabulatore.
Risoluzione dei problemi
Non viene offuscato nulla
Verificate nell’ordine: l’interruttore principale è attivo, almeno un preset o un selettore è impostato, il controller corrente non è nell’elenco delle esclusioni, l’estensione PHP DOM è disponibile. Svuotate poi la cache di PrestaShop.
Un tema personalizzato non è coperto
I preset puntano ai selettori del tema Classic. Su un tema su misura, ispezionate il blocco dei filtri per annotare l’identificatore o la classe del contenitore, poi aggiungete una riga di selettore personalizzato.
Un link offuscato per errore
Riducete la portata del selettore puntando a un contenitore più preciso, oppure togliete il preset coinvolto e sostituitelo con selettori personalizzati più stretti.
Un modulo di ricerca AJAX perde i suoi link
Alcuni moduli di terze parti ricostruiscono interamente il loro blocco di filtri. Se il comportamento differisce tra la prima visualizzazione e l’aggiornamento, verificate che il vostro selettore personalizzato si applichi al contenitore ricostruito e non a un elemento distrutto a ogni aggiornamento.
Domande frequenti
È cloaking?
No. L’HTML servito è identico per tutti: nessun test di user-agent, nessuna variante di pagina. Il link non esiste per nessuno nel codice sorgente, e il browser lo ricostruisce al momento dell’interazione.
Gli URL già indicizzati spariscono?
No. L’offuscamento agisce sulla scoperta di nuovi URL. Per gli URL già presenti nell’indice, mantenete le vostre direttive noindex o i vostri reindirizzamenti finché Google non li rivisita.
Qual è l’impatto sulle prestazioni?
Un’analisi DOM della pagina finale, nell’ordine di qualche millisecondo su una pagina categoria standard. Sul front, 5 KB di JavaScript e 0,2 KB di CSS.
Bisogna disattivare il modulo durante un audit SEO?
No, al contrario: l’audit deve riflettere ciò che vedono i crawler. Se il vostro strumento segnala un calo del numero di link interni sulle pagine categoria, è il risultato atteso.