Magento is de laatste jaren uitgegroeid tot het populairste platform voor webwinkels. Stefan Vernooy van Onetomarket gaat in op een aantal zoekmachinegerelateerde kwesties bij Magento. Allereerst bespreekt hij de SEO-aspecten van layered navigation.
Tekst: Stefan Vernooy
Zeker 12 procent van de webwinkels wordt opgezet in Magento en dit aandeel is nog altijd groeiende (bron):
Magento is een professioneel pakket, dat legio mogelijkheden biedt om een webshop goed en professioneel op te zetten. Door het succes van Magento kom ik tijdens mijn werk als SEO-consultant bij Onetomarket veel webwinkels tegen die Magento implementeren en daarna (waarschijnlijk) overweldigd worden door alle prachtige functionaliteiten en instellingen die het pakket biedt. Hierdoor ontstaan vaak diverse SEO-problemen die eenvoudig kunnen worden opgelost.
Over veel SEO-gerelateerde zaken hebben de ontwikkelaars van Magento zeker nagedacht, alleen is het resultaat daarvan voor startende webwinkeliers soms lastig te vinden of in te richten. Aan de hand van een serie artikelen wil ik jullie de meest voorkomende problemen op het gebied van SEO voor Magento laten zien en daarbij uiteraard oplossingen aandragen. In dit eerste artikel ga ik in op layered navigation (filters).
Layered navigation
Layered navigation is een krachtig element van Magento, maar het levert ook direct een van de grootste problemen op het gebied van SEO op: duplicate content.
Layered navigation is een manier van navigeren die inhoudt dat een bezoeker zijn of haar zoekopdracht op de website kan filteren, om zo tot een selectie van producten te komen. Een mooie functie voor de gebruiker, zou je zo op het eerste gezicht zeggen.
Maar wat is hier nu het probleem voor SEO? Filters zorgen in een standaardinstallatie van Magento voor legio combinaties van pagina’s met verschillende url’s. Dit is voor SEO niet wenselijk, omdat we meerdere pagina’s krijgen die met elkaar gaan concurreren. Deze pagina’s zullen over het algemeen dezelfde focus hebben. Dit zien we mooi in de demonstratieomgeving van Magento.
Wanneer we in de demo-omgeving kijken in de categorie apparel zien we de diverse filtermogelijkheden. Deze filters bestaan uit linkjes die standaard allemaal gevolgd worden door de zoekmachines en die dus ook allemaal indexeerbaar zijn. Wanneer we gaan filteren op bijvoorbeeld shirts krijgen we de volgende pagina:
http://demo.magentocommerce.com/catalog/category/view/s/apparel/id/18/?cat=4
De pagina bestaat uit de zelfde url als de pagina met apparel, maar nu met een parameter ?cat=4 . De focus van deze pagina ligt hier op shirts. Wanneer er weer verder gefilterd gaat worden, bijvoorbeeld op prijs, krijgen we de volgende url met toevoeging &price=-100:
http://demo.magentocommerce.com/catalog/category/view/s/apparel/id/18/?cat=4&price=-100
De focus van deze pagina ligt nog steeds op shirts. Er wordt op deze manier dus een pagina gecreëerd die concurreert met de voorgaande pagina en eventueel nog meerdere pagina’s als er nog meer gefilterd kan worden.
In de demo store bestaat ook nog een categorie die zich richt op shirts. Met de volgende url:
http://demo.magentocommerce.com/catalog/category/view/s/shirts/id/4/
Ook deze pagina is identiek aan de pagina die we hiervoor gefilterd hebben. Een duplicate content probleem dus. Welke pagina willen we dat de zoekmachines gaat tonen?
Het probleem wordt ook onderstreept wanneer we gaan kijken hoeveel pagina’s door Google in deze Magento-demo zijn opgenomen in de index. Google heeft alleen al voor dit subdomein ongeveer 255.000 resultaten gevonden. Voor een demowinkel met 62 producten is dat een aardig aantal. Voor mij als SEO-consultant is dit een eerste aanwijzing dat de site een probleem zou kunnen hebben met duplicate content.
Google volgt kortom alle linkjes op de demosite en indexeert deze ook keurig, met een flink aantal geïndexeerde pagina’s tot gevolg. Hoe kunnen we dit nu voorkomen? Hiervoor staan diverse mogelijkheden en oplossingen op een rij. Ik zal de meest voorkomende oplossingen met u doornemen.
Oplossing 1: robots.txt
Een van de oplossingen is het toevoegen van een robots.txt aan uw webwinkel. Door middel van dit bestand, dat u in de root van uw site plaatst, geeft u aan waar de zoekmachine wel en niet mag komen. Op deze manier kunt u de pagina’s met filter url’s uitsluiten van indexatie.
U sluit deze filter-url’s uit door in de robots.txt het volgende te zetten:
User-agent: *
Disallow: /*?
Maar hoe weet u of u al een robots.txt bestand in uw Magento webwinkel hebt? Dit kunt u heel eenvoudig controleren door achter uw domeinnaam /robots.txt te zetten. Uw browser zal het bestand aan u tonen en de inhoud van het bestand weergeven:
Wanneer u een foutmelding zoals een 404-pagina te zien krijgt, kunt u er vanuit gaan dat er nog geen robots.txt aanwezig is op uw website.
U kunt heel eenvoudig zelf een robot.txt pagina aanmaken door in het kladblok een tekstbestand te maken met bovenstaande code en deze op te slaan met de naam robots.txt. Wanneer u het bestand heeft opgeslagen uploadt u het met behulp van een FTP-client naar de root van uw website.
Let op:
Een robots.txt is geen garantie dat pagina’s niet opgenomen worden in de index. Wanneer een website gaat linken naar de URL met de filter kan deze alsnog in de index terug komen.
Oplossing 2: canonicals
Een andere mogelijke oplossing voor het probleem met de filters zijn canonical links. Deze links voegt u toe aan de pagina’s van Magento. Met een canonical vertelt u de zoekmachine dat de (filter)pagina die de zoekmachine bezoekt niet de originele pagina is, maar een kopie van de pagina die gespecificeerd staat in de canonical code. Een canonical code ziet er als volgt uit:
<link rel="canonical" href=” http://www.uwwebwinkel.nl/originele-categorie/ ”/>
Wanneer een gebruiker filtert, zal er in de code staan welke pagina het origineel is. Ter verduidelijking hierbij een praktijkvoorbeeld:
De pagina heeft bijvoorbeeld de volgende url:
http://www.moleculeclothing.eu/dutch/cargo-shorts-men
Wanneer je filtert op de kleur groen dan wordt de url:
http://www.moleculeclothing.eu/dutch/cargo-shorts-men?color=22, waarbij color=22 staat voor groen.
Op bovenstaande pagina staat de volgende canonical code:
<link rel="canonical" href=” http://www.moleculeclothing.eu/dutch/cargo-shorts-men/ ”/>
Op deze manier geven we aan dat de gefilterde pagina een kopie is van het origineel dat in de canonical staat gedefinieerd. Resultaat? Google identificeert hiermee de originele pagina’s en zal de ‘kopieën’ niet als duplicate content beschouwen.
In de laatste versie van Magento 1.7.0.2 zit standaard de mogelijkheid om canonicals toe te voegen. U zet dit aan door in te loggen in de backend van uw webwinkel en te navigeren naar:
Systeem > Configuratie > Catalogus > Search Engine Optimalisatie (SEO)
Hier zet u de opties Use Canonical Link Meta Tag For Categories en Use Canonical Link Meta Tag For Products op Ja.
Wanneer u een oudere versie van Magento heeft, kunt u de plugin Canonical URL for Magento plugin van Yoast installeren. Deze plugin plaatst automatisch canonicals op de diverse pagina’s.
Let op:
Canonicals zijn geen garantie dat pagina’s niet opgenomen worden in de index. Een canonical is slechts een advies aan de zoekmachine. Wanneer de zoekmachine de content relevant vindt kan deze alsnog besluiten de content op te nemen in de index.
Oplossing 3: AJAX filters
De netste oplossing voor layered navigation en het voorkomen van duplicatie content is het gebruik van een Javascript op basis van AJAX technologie. Wanneer men AJAX gebruikt om te filteren kan een url aangepast worden door daar een hash (#) aan toe te voegen. Alles wat achter deze hash staat wordt genegeerd door de zoekmachines.
De url’s die deze plugin genereert zijn dan ook als volgt:
http://priceslider.mangoextensions.com/our-products.html#cat=4
Zonder toepassing van deze AJAX oplossing zou de standaard url als volgt zijn: http://priceslider.mangoextensions.com/our-products.html?cat=4
De url die de zoekmachine met AJAX oplossing ziet is http://priceslider.mangoextensions.com/our-products.html
Op deze manier houden we het aantal geïndexeerde pagina’s beperkt, wat het risico op duplicate content gigantisch vermindert.
Het ontwikkelen en implementeren van deze techniek kan heel veel tijd kosten. Het mooie van Magento is dan ook dat ook hier een plugin voor is. Deze plugin neemt veel werk uit handen en zal de standaardfilters vervangen door AJAX filters met een hash in de URL.
Let op:
Deze plugin werkt goed met het standaard thema van Magento. Wanneer je een eigen thema hebt zullen er wat wijzigingen gedaan moeten worden in de html van het thema.
Duplicate content is dus een veel voorkomend probleem bij Magento webshops. Met bovengenoemde oplossingen kun je dit voorkomen. In het volgende deel ga ik in op de snelheid van Magento en hoe we die eenvoudig kunnen optimaliseren.
Stefan Vernooy is werkzaam als SEO consultant bij online marketingbureau Onetomarket.
Dit artikel sluit mooi aan bij het gastartikel van Edwin Dijkstra (MediaCT) op ons blog geschreven heeft. (http://www.byte.nl/blog/2012/09/24/kennisartikel-serverload-verlagen-byte/)Daarin wordt een hier niet genoemde oplossing besproken.
Oplossing 4: maak gebruik van Google Webmaster Tools URL-parameters. In Google Webmaster tools kun je aangeven wat elke URL-parameter doet. Zo help je Google en wordt de indexatie efficiënter. Zo kun je ook aangeven welke URLs niet gecrawled hoeven te worden. Let wel op: ook hier geldt dat wanneer je Google blokkeert, dat er de kans is dat Google niet de hele shop goed in kaart kan brengen. Dus: specificeer waar mogelijk en als het moet: blokkeer de parameter.
Oplossing 1 zie ik als allerlaatste redmiddel die bij voorkeur nooit toegepast moet worden.
Oplossing 2 zowieso instellen.
Oplossing 3 heel mooi... maakt de beleving van de site ook weer sneller... ergo... hogere potentiele conversie
Hans. Bedankt voor je aanvulling. Inderdaad is uitsluiten bij webmastertools een extra vangnet. Al wil ik als SEO het liever altijd zo veel mogelijk in eigen hand houden. Dit om Google zo veel mogelijk te sturen en zo min mogelijk na te hoeven laten denken.
Zou Google niet de voorkeur geven aan het ranken van pagina's die in de navigatie vanuit de root staan opgebouwd en welke via de standaardnavigatie (lees: menu en categorieroll) intern worden gelinkt?
De pagina's staan op dezelfde url en verschillen enkel op url-structuur, het lijkt me sterk dat Google hier een conflict in ziet, ze strepen gewoon de overige pagina's weg uit de eerste 100 SERP voor de relevante search phrases.
Wil je wel ranken met die pagina's dan zal je iets moeten verzinnen om unieke content op deze pagina's te plaatsen. Niet dat het niet goed is om via canonical links, metatags en via de WM tools meer duidelijkheid te verschaffen aan Google Search. Dit zal altijd positief uitpakken qua SEO.
Hey Thomas,
Bedankt voor je reactie. Natuurlijk zijn de pagina's die in de topnavigatie staan de pagina's die logischerwijs het belangrijkste zijn op je website. Deze hebben immers in de structuur de meeste waarde. Dit ziet Google ook zo.
In je reactie schrijf je "De pagina's staan op dezelfde url en verschillen enkel op url-structuur". Dit is onjuist. Google ziet dit dus echt als andere URL's en dus ook pagina's. Wanneer je de standaard subnavigatie laat staan zoals die is krijg je dus een wildgroei van geindexeerde pagina's. Wanneer we de demo van Magento nemen als voorbeeld is 255.000 pagina's met 62 producten dus ook niet echt goed voor je crawl budget.
De pagina's die achter de filters zitten wil je dus niet laten ranken of indexeren. want dan zou je dus per gefilterde categorie content moeten gaan schrijven terwijl er maar een een minimaal verschil in de pagina is. Je hele interne linkstructuur wordt daardoor scheef getrokken.
Stefan, je geeft hierboven aan dat je de pagina's achter de filters niet wilt laten ranken. Waarom niet? Ik wil met m'n site wel gevonden worden op 'groen shirt', of 'geel shirt maat l'. Technisch ben je er wel even mee bezig om binnen Magento alles optimaal te krijgen, maar het kan wel. Het is, naar mijn mening, een 100x betere oplossing dan de oplossingen die jij aandraagt.
Door standaard de filternaam in de meta title, description, url en h1 al mee te nemen ben je uniek genoeg om geen last te hebben van duplicated content. Uiteraard is het nog beter als je ook nog content gaat schrijven, maar daar ben je inderdaad wel even mee bezig.
(Wat natuurlijk wel blijft is het probleem van subnavigatie, maar met een paar mooie 301's kom je al een heel end.)
Hoi Peter, De pagina's achter de filters van Magento zijn niet SEO-vriendelijk. Je hebt op een filterpagina geen controle over de title, meta-data en de URL's zijn niet geoptimaliseerd. Wanneer je deze dus als landingspagina's zou willen gebruiken voor bijvoorbeeld groen shirt, zal je flink in de code van Magento moeten duiken om dit werkbaar te krijgen.
Na een gedegen vooronderzoek kan ik niet anders concluderen dan te adviseren een écht professioneel pakket te nemen: DRUPAL
@Frits -> kijk... dat zijn pas de comments die bijdragen aan de discussie. Drupal is geweldig... voor developers. Maar vergeet niet dat een beheerder van een webwinkel vaak geen developer is. Een Drupal webwinkel is echt mega maatwerk. Magento daarentegen is geschreven als webwinkel en kan derhalve out of the box ook zo gebruikt worden.
@Peter en Stefan -> groen shirt, geel shirt... dus zoals Zalando het doet. Het attribuut color wordt gebruikt om een unieke url te genereren... niet met parameters en & er in ... gewoon een normale SEF url. Dit moet ook in Magento te maken zijn... Ik ben nu met een webshop bezig waar dat ook gebeuren moet. Maar eenvoudig is het niet denk ik.
@Stefan Wat is er gebeurt met de developers? Een beetje developer kan prima die functionaliteit inbouwen. Ja, het kost wel even tijd, maar als je een serieuze webshop wilt, dan moet je ook bereid zijn om daarin te investeren. Daarnaast zijn er ook SEO modules die deze functionaliteiten toevoegen.
Jou blog bevat geen onwaarheden, maar de genoemde oplossingen zijn simpelweg niet de juiste, omdat je hiermee erg veel zoekmachineverkeer gaat uitsluiten. Wat dat betreft vind ik jou artikel dus helaas zeer matig.
@Frits Zoals Hans al aangeeft is Drupal niet echt gebruiksvriendelijk voor een paar dames die als bijbaantje bij de klantenservice van een webshop werken. Hierom valt Drupal voor het gros van de bedrijven af. Zonde natuurlijk, omdat Drupal verder een uitmuntend pakket is.
@Peter, die opmerking mbt tot dames van een klantenservice is niet helemaal terecht. Niet alle dames van een klantenservice zijn blont. De dames bij ons worden geselecteerd op slankheid, kennis van talen, niet roken en IQ. :-)
Wij met z'n allen vinden DRUPAL redelijk gebruiksvriendelijk, ook al zijn sommige hier blont. Dit allemaal terzijde, want het gaat hierover Magento.
En jijzelf Frits, waarop ben jij geselecteerd? Waarschijnlijk niet op tact en geschooldheid. Blont of blond?
@Henry, geweldig, jij snapt het.
Hey Stefan,
Een terechte opmerking van Peter; waarom wil je een pagina "Groen Shirt" uitsluiten voor Google?
Hoe ga je ervoor zorgen dat je toch gevonden wordt op "Groen Shirt"?
Zou dat niet sowieso het startpunt moeten zijn? Nagaan waarop je gevonden wilt worden en op basis daarvan vaststellen hoe de structur van je site opgebouwd moet worden? (zie ook whiteboard friday van seomoz)
Dat het lastig is om iets te maken, is natuurlijk geen volledig argument om iets niet te doen.
Wat zijn verder de voor- en nadelen van de verschillende oplossingen?
En heb je ook onderzoek gedaan hoe de googlebot hiermee omgaat (crawlgedrag)? Zie ook dit artikel van je collega over de googlebot ;)
Ik ben benieuwd naar een evt. vervolg artikel :)
Voor degene die een oplossing zoeken voor SEF URL's voor de filters (layered navigation). Deze extensie werkt over het algemeen goed:
http://amasty.com/improved-navigation.html
@Emile: de Amasty improved navigation is een zeer goed begin en passen wij regelmatig toe in Magento projecten, maar vereist voor een correcte weergave van filterspecifieke meta title, meta description, h1 en relevante teksten nog wel extra maatwerk.
Voor Magento vonden wij dit product wel handig, zeker als je veel verschillende dingen hebt staan in je webshop. De Meta-tags worden vaak vergeten of weinig belang aan gehecht. Deze mensen hebben ons goed geholpen: http://www.taurosmedia.com/producten/magento-meta-tag-generator.