Links verhullen voor SEO in PrestaShop
Installatie, instellen van de voorinstellingen, het schrijven van CSS-selectors en het controleren van wat de crawlers te zien krijgen.
Deze gids behandelt de installatie, de configuratie en de controle van de module dfobfuscator op PrestaShop 8 en 9.
Installatie
- Ga in uw backoffice naar Modules en diensten, Een module uploaden.
- Plaats het bestand
dfobfuscator.zipen bevestig. - Klik na de installatie op Configureren.
De module registreert zich automatisch op twee hooks: actionOutputHTMLBefore voor het herschrijven van de HTML en actionFrontControllerSetMedia voor het laden van de bestanden aan de frontzijde. Er wordt geen enkele override van een kernbestand aangemaakt.
De PHP-uitbreiding DOM moet actief zijn. Dat is bij vrijwel elke hosting standaard het geval. Ontbreekt zij, dan blijft de module geïnstalleerd maar laat hij de HTML ongewijzigd.
Configuratie
Het verhullen inschakelen
Met de hoofdschakelaar zet u het hele herschrijven uit zonder de module te verwijderen. Handig om de broncode vóór en na te vergelijken, of om de module bij een diagnose apart te zetten.
De drie voorinstellingen
| Voorinstelling | Waarop zij mikt | Standaard |
|---|---|---|
| Facetnavigatie | De filterblokken en de lijst met actieve filters | Aan |
| Producten sorteren | Het uitklapmenu om te sorteren | Aan |
| Paginering | De links naar pagina 2, 3 en volgende | Uit |
Zet de paginering alleen aan als uw XML-sitemap en uw interne linkstructuur elke productfiche ook langs een andere weg bereikbaar maken. Anders snijdt u het enige verkenningspad naar een deel van uw catalogus door.
Eigen CSS-selectors
Eén selector per regel. Komma’s op eenzelfde regel worden ook aanvaard. Elke link die met een selector overeenkomt, wordt verhuld.
#footer .account-links a
.block-tags a
.my-custom-block a[data-filter]
De interne omzetter ondersteunt de tag, de identificatie, de klasse, de attributen (aanwezigheid of exacte waarde), de afstammelingscombinator en de combinator voor een rechtstreeks kind. Draagt uw winkel symfony/css-selector in haar vendor-map, dan gebruikt de module die bij voorrang en beschikt u over de volledige CSS-syntaxis.
XPath-regels
Voor selecties die u met CSS niet kunt uitdrukken, zet u xpath: vooraan de regel:
xpath://div[@id='js-product-list']//a[contains(@href,'?order=')]
Uitgesloten controllers
Een lijst met namen van frontcontrollers, gescheiden door komma’s. Op die pagina’s wordt niets herschreven en worden de bestanden niet geladen. De standaardwaarde is order,cart. Voeg er elke controller aan toe waarvan het traject van geen enkele JavaScript mag afhangen.
Hoe het herschrijven werkt
Op de hook actionOutputHTMLBefore krijgt de module de volledige HTML van de pagina. Hij gaat eerst na of het wel om een volledig HTML-document gaat, wat de AJAX- en JSON-antwoorden uitsluit. Daarna laadt hij het document in DOMDocument, zet hij elke selector om in een XPath-query en vervangt hij de gevonden links door span-elementen.
Elk verhuld element krijgt:
- een attribuut
data-omet de URL in omgekeerde base64; - de klasse
df-obf, naast zijn oorspronkelijke klassen; tabindex="0"enrole="link"voor de toegankelijkheid;data-twanneer de oorspronkelijke link een target-attribuut droeg.
Links waarvan de URL met #, mailto:, tel: of javascript: begint, blijven ongemoeid. Het attribuut rel verdwijnt, het attribuut target blijft als data-t behouden.
Automatische terugval
Mislukt de analyse van het document, of komt geen enkele selector met een link overeen, dan gaat de oorspronkelijke HTML ongewijzigd terug. De module kan een pagina dus niet stukmaken door onverwachte opmaak.
Inhoud die via AJAX laadt
Het verversen van de filters en het oneindig scrollen zetten na de eerste weergave opnieuw links in de pagina. Het bestand front.js plaatst een MutationObserver die dezelfde selectors aan die nieuwe links toepast, aan browserzijde. De selectors gaan via Media::addJsDef naar de frontzijde. De XPath-regels vallen buiten dat mechanisme, want de browser evalueert die niet.
Controleren of het werkt
- Open een categoriepagina met filters en bekijk daarna de broncode van de pagina (Ctrl+U, niet de elementinspecteur).
- Zoek naar
df-obf: u hoort span-elementen te vinden op de plaats van de filterlinks. - Zoek naar een filter-URL, bijvoorbeeld
?q=: die hoort niet meer in een href-attribuut te staan.
De elementinspecteur toont het DOM nadat de JavaScript is uitgevoerd, niet de uitgeleverde HTML. Om het resultaat aan crawlerzijde te beoordelen, gebruikt u altijd de weergave van de broncode of een hulpmiddel als curl.
Test aan navigatiezijde de linkermuisklik, de klik met het muiswiel, ctrl+klik (cmd+klik op macOS) en de Enter-toets nadat u met de tabtoets bij een filter bent gekomen.
Problemen oplossen
Er wordt niets verhuld
Controleer in deze volgorde: de hoofdschakelaar staat aan, er is minstens één voorinstelling of selector ingevuld, de huidige controller staat niet in de uitsluitingslijst, en de PHP-uitbreiding DOM is beschikbaar. Leeg daarna de PrestaShop-cache.
Een eigen thema wordt niet gedekt
De voorinstellingen mikken op de selectors van het Classic-thema. Bekijk bij een maatwerkthema het filterblok om de identificatie of de klasse van zijn container te noteren, en voeg daarna een regel met een eigen selector toe.
Een link is per ongeluk verhuld
Beperk het bereik van de selector door op een preciezere container te mikken, of haal de betrokken voorinstelling weg en vervang die door nauwere eigen selectors.
De AJAX-zoekmodule verliest zijn links
Sommige externe modules bouwen hun filterblok volledig opnieuw op. Verschilt het gedrag tussen de eerste weergave en het verversen, ga dan na of de eigen selector wel op de heropgebouwde container slaat en niet op een element dat bij elke bijwerking verdwijnt.
Veelgestelde vragen
Is dit cloaking?
Nee. De uitgeleverde HTML is voor iedereen dezelfde: geen enkele test op de user-agent, geen enkele paginavariant. De link bestaat voor niemand in de broncode, en de browser maakt die op het moment van de interactie opnieuw.
Verdwijnen de al geïndexeerde URL’s?
Nee. Het verhullen werkt op het ontdekken van nieuwe URL’s. Houd voor de URL’s die al in de index staan uw noindex-richtlijnen of uw omleidingen aan, tot Google ze opnieuw bezoekt.
Wat is de impact op de prestaties?
Eén DOM-analyse van de uiteindelijke pagina, in de orde van enkele milliseconden op een gewone categoriepagina. Aan de frontzijde komt er 5 kB JavaScript en 0,2 kB CSS bij.
Moet ik de module tijdens een SEO-audit uitzetten?
Nee, integendeel: de audit hoort te weerspiegelen wat de crawlers zien. Meldt uw auditinstrument een daling van het aantal interne links op de categoriepagina’s, dan is dat precies het verwachte resultaat.