De noodzaak van dit artikel is omdat ik lange tijd Google heb verward met duplicate content op mijn website RuzzleOnline.nl. De afbeeldingen zijn door het gebruik van een Content Delivery Network (CDN) via twee URL’s bereikbaar geworden, en hier ben ik wat betreft zoekmachine optimalisatie niet goed mee omgegaan. Hoewel het activeren van een CDN tegenwoordig met één druk op de knop geregeld is, is dit dus een goed voorbeeld dat je altijd kritisch moet zijn en de gevolgen voor SEO volledig moet begrijpen. Bezint eer ge begint.
CDN veroorzaakt duplicate content
Niet elke CDN veroorzaakt duplicate content. MaxCDN, het Content Delivery Network in kwestie, is echter een zogeheten ‘origin pull CDN‘. De afbeeldingen upload je altijd naar je eigen webserver, de origin pull CDN maakt daarvan een kopie en plaats die op al hun servers. Dit heet ook wel caching. Dit veroorzaak duplicate content, omdat de afbeeldingen vervolgens via twee URL’s te benaderen zijn:
- de standaard URL:
http://ruzzleonline.nl/images/androidapp.png
; - de CDN URL:
http://cdn.ruzzleonline.nl/images/androidapp.png
.
De CDN URL kun je via je eigen DNS provider bepalen door het toevoegen van een CNAME record en deze te laten verwijzen naar de servers van je CDN. In de HTML code van je website wordt er dus niet meer gelinkt naar de afbeeldingen die op je eigen server staan, maar naar de afbeeldingen die op het CDN staan. Onderstaande afbeelding toont deze CDN URL in mijn HTML:
Oplossing 1: gebruik een ander soort CDN
Het makkelijkste is natuurlijk dat de afbeeldingen maar te benaderen zijn via één URL. Op die manier kan er immers geen sprake zijn van duplicate content. Dit wordt ook aangegeven door Google in het artikel 1000 Words About Images.
Q: Is it a problem if my images can be found on multiple domains or subdomains I own — for example, CDNs or related sites?
A: Generally, the best practice is to have only one copy of any type of content. If you’re duplicating your images across multiple hostnames, our algorithms may pick one copy as the canonical copy of the image, which may not be your preferred version. This can also lead to slower crawling and indexing of your images.
Met een origin pull CDN is dit naar mijn weten niet mogelijk. Ik verwacht dat dit wel het geval is met een push CDN, maar ik moet mij nog verder verdiepen in de verschillende soorten Content Delivery Networks. Het artikel Content Delivery Network (CDN)- Distribute your site across the web lijkt mij dan zeer de moeite waard.
Er is echter ook nog een verschil tussen de traditionele CDN’s en bedrijven die werken als een ‘distributed proxy’, zie CDN Images in Sitemap:
A radically different approach would be to replace CDN providers and go with CloudFlare instead of Amazon (for images at least). Since it works as a distributed proxy between your origin server(s) and clients machines, not by moving files from slow to fast servers as done by standard CDNs, your URLs don’t change.
Bedrijven als CloudFlare zijn geen traditionele CDN’s, maar bieden dit aan als één van hun vele features. CloudFlare legt het principe distributed proxy uit in hun artikel What is CloudFlare.
Traditional CDNs can be accurately described as massively distributed hosting, where CloudFlare is more accurately described as a caching reverse proxy. What this means is that, unlike traditional CDNs, CloudFlare handles all requests to a website.
Het kan natuurlijk nooit kwaad de klantenservice van een bedrijf te testen, en dat is exact wat ik gedaan heb bij CloudFlare.
Q: Can you explain a little bit more how it is possible I still serve my images from my same URL’s while you also are a CDN?
A: CloudFlare is your DNS provider, you configure the DNS for our internal traffic (CloudFlare to server), we configure DNS for external traffic (client to CloudFlare.) We configure it to where DNS will point to a CloudFlare proxy server (nginx) and decide what to cache by default and by what you choose with pagerules:
- default cache, Which file extensions does CloudFlare cache for static content?;
- pagerules, Is there a tutorial for Page Rules?.
So if something is cacheable we save it to our nginx servers, if not (such as html) we just pass it through. So the next request for the cache content will hit nginx and then send it back to the client instead of asking for it from your origin.
Een nog uitgebreidere uitleg vind je hier: How does CloudFlare work.
Ook Incapsula werkt op deze wijze. De bezoekers van je website, of eigenlijk hun webbrowser, vragen bestanden niet meer rechtstreeks op bij je eigen server, maar komen eerst terecht bij de servers van CloudFlare of Incapsula. De gecachte afbeeldingen (en overige bestanden) worden op die manier vanaf de servers van CloudFlare of Incapsula teruggestuurd naar de webbrowser van de bezoekers, in plaats van je eigen server te belasten. Het enige wat nodig is om van deze CDN feature gebruik te maken, is dat CloudFlare of Incapsula fungeert als je DNS provider, zodat de bezoekers eerst doorgestuurd/gefilterd kunnen worden door hun servers.
Naast de bovenstaande link met uitgebreide uitleg over hoe CloudFlare werkt, legt Incapsula het ook goed uit in hun FAQ.
Your DNS records direct your visitors to your web server IP. In order to start routing traffic through Incapsula and enjoy our security and acceleration services, your DNS records should instruct visitors to send requests to the Incapsula servers. By making two simple DNS changes, your traffic will first be filtered by Incapsula and then forwarded to your web server. There will be no down time during the transition.
Oplossing 2: de juiste canonieke URL voor afbeeldingen
De realiteit is echter dat mijn afbeeldingen wél via twee URL’s te benaderen zijn nu ik gebruik maak van MaxCDN. Gelukkig zijn er veel methodes om Google te vertellen welke van de twee URL’s je nou geindexeerd wilt hebben. De URL die je geindexeerd wilt hebben is de zogeheten canonieke URL. Daarmee los je het duplicate content probleem op.
Los je het duplicate probleem niet op, dan is er verder ook niets aan de hand. Zoals reeds eerder werd benoemd in dit artikel is het gevolg dan wel dat Google zelf bepaald welke van de twee URL’s de canonieke URL is die geindexeerd gaat worden. Dit staat ook in het Google helpartikel Canonieke URL’s gebruiken:
Hoewel we u aanraden een van deze methoden te gebruiken, is geen van de methoden vereist. Als u geen canonieke URL aangeeft, identificeren we de versie of URL die volgens ons het beste is.
Je zult je misschien afvragen, of je Google nou het beste de CDN URL of de standaard URL voor je afbeeldingen kan laten indexeren. Het antwoord is simpel. In mijn eerdere artikel over duplicate content had ik reeds onderstaande YouTube video ingevoegd, waar Matt Cutts uitlegt dat als er sprake is van duplicate content je zelf consistent moet zijn en altijd de gewenste URL’s moet gebruiken in je website.
Pick one “canonical” URL and ensure you link consistently within your site.
Het feit dat in alle HTML nu verwezen wordt naar de CDN URL’s, is een signaal aan Google dat dit de gewenste URL is die Google moet gaan indexeren!
Oplossing 3: gebruik XML-sitemap om voorkeurs-URL’s voor dezelfde inhoud op te geven
In hetzelfde Google helpartikel over Canonieke URL’s gebruiken, wordt aangegeven dat ook het gebruik van een sitemap Google helpt te bepalen welke versie van de duplicate content je geindexeerd wilt hebben:
We kunnen niet garanderen dat we de URL’s gebruiken die u via een sitemap verzendt, maar het verzenden van een sitemap is een goede manier om Google te laten weten welke pagina’s op uw site u het belangrijkst vindt.
In de sitemap neem je ook links op naar je afbeeldingen, en dat is precies waar ik onoplettend ben geweest! Mijn website is gebouwd met WordPress en daar gebruik ik de SEO plugin WordPress SEO by Yoast. Deze geneert mijn XML-sitemap, maar die verwees nog steeds naar de afbeeldingen op mijn eigen server!
Ik gaf Google dus lange tijd ‘mixed signals’. In mijn HTML verwees ik naar de CDN URL’s, terwijl mijn sitemap verwees naar de originele URL’s. Mijn sitemap wordt gegenereerd door de WordPress SEO plugin. In mijn artikel Wijzigen afbeeldinglink in sitemap WordPress SEO leg ik uit hoe je dit kunt aanpassen.
Je kunt altijd linken naar de CDN URL’s van je afbeeldingen, waar die ook gehost worden, zoals aangegeven in het artikel 1000 Words About Images:
Q: I’m using a CDN to host my images; how can I still use an Image Sitemap?
A: Cross-domain restrictions apply only to the Sitemaps’ tag. In Image Sitemaps, the tag is allowed to point to a URL on another domain, so using a CDN for your images is fine. We also encourage you to verify the CDN’s domain name in Webmaster Tools so that we can inform you of any crawl errors that we might find.
En in mijn situatie ga ik dus ook http://cdn.ruzzleonline.nl
verifiëren in Google Webmaster Tools!
Geef een reactie