In het kort: Odoo zet een goede technische basis neer: een sitemap, een canonieke verwijzing op elke pagina, taalversies met hreflang en per pagina een eigen titel en beschrijving. Op een aantal punten kan het beter: de robots.txt blokkeert niets, vertaalde pagina's ontbreken in de sitemap, de gestructureerde gegevens zijn beperkt en afbeeldingen zonder afmetingen laten pagina's verspringen. Dit artikel overloopt per onderwerp wat Odoo 19 zelf doet, wat niet, en hoe je de gaten in de praktijk dicht. Techniek is de basis, maar ze bepaalt niet waarop je gevonden wordt. Hoe je beslist welke pagina op welke zoekvraag antwoordt, lees je op Odoo SEO: beter gevonden worden, stap voor stap.
Waar dit artikel naar Google Search Console verwijst: dat is een gratis dienst van Google waarin je ziet hoe Google je website ziet. Welke pagina's het kent, op welke zoekopdrachten je verschijnt, en welke fouten het tegenkomt. Wat daar als melding verschijnt, staat in dit artikel tussen aanhalingstekens.
De algemene basis, van je bedrijfsprofiel tot reviews, staat in SEO voor een kleine kmo: de basis in 12 stappen.
Sitemap
Wat is het? Een sitemap is een lijst van alle pagina's van je website, in een bestand dat bedoeld is voor zoekmachines, niet voor bezoekers. Je vindt het op jouwdomein.be/sitemap.xml. Google bezoekt je website met een programma dat van link naar link gaat; dat heet crawlen. Een pagina waar geen enkele link naartoe gaat, vindt dat programma niet. De sitemap zegt Google in één keer welke pagina's er zijn en wanneer ze voor het laatst gewijzigd werden.
Wat Odoo doet: Odoo maakt zelf een /sitemap.xml met alle gepubliceerde pagina's, producten, webshopcategorieën en blogartikels. Een pagina waarvoor je Indexeren uitzet, valt eruit. De robots.txt verwijst zelf naar de sitemap.
Wat niet:
- De sitemap bevat enkel de hoofdtaal. De Engelse of Franse versie van een product of artikel staat er niet in. Odoo vindt dat de verwijzingen tussen de taalversies in de pagina zelf volstaan (de hreflang, zie verder bij Meerdere talen), maar een sitemap doet meer: Google ontdekt er nieuwe adressen mee en ziet wanneer een pagina gewijzigd is.
- Odoo bewaart de sitemap twaalf uur. Een gewijzigd adres staat dus tot een halve dag lang nog in zijn oude vorm in de sitemap.
- Heeft de website maar één blog, dan staat /blog in de sitemap, terwijl Odoo dat adres doorverwijst. In een sitemap horen enkel eindadressen: pagina's die meteen antwoorden met de pagina zelf (code 200). Een adres dat doorverwijst, stuurt Google eerst ergens anders heen. Search Console meldt dat als "pagina met omleiding" en vertrouwt de sitemap daardoor minder.
In de praktijk: wil je ook de vertaalde adressen in de sitemap, dan kan dat op een eigen server met een kleine module die per taal de vertaalde adressen toevoegt en adressen met een doorverwijzing weglaat. Na een grote wijziging aan namen of adressen laat je de sitemap meteen opnieuw aanmaken. Dat doe je door in de ontwikkelaarsmodus onder Instellingen > Technisch > Bijlagen de bijlage /sitemap-…xml te verwijderen: bij het volgende bezoek aan /sitemap.xml maakt Odoo een nieuwe. Dien de sitemap daarna opnieuw in bij Search Console.
Robots.txt
Wat is het? De robots.txt is een klein tekstbestand op jouwdomein.be/robots.txt met afspraken voor de programma's van zoekmachines: welke delen van de website ze mogen bezoeken en welke niet. Een regel Disallow betekent "hier niet komen". Het is een verzoek, geen slot op de deur: wie het adres kent, kan de pagina nog altijd openen.
Wat Odoo doet: de robots.txt van Odoo bevat standaard bijna niets: User-agent: *, de regel naar de sitemap en daaronder een vrij veld dat je in de website-instellingen zelf invult.
Wat niet:
- Odoo blokkeert verder niets. Voor een website met enkel pagina's is dat geen probleem.
- Voor een webshop wel: elke combinatie van filters, sortering, prijsgrenzen en zoektermen geeft een eigen adres (?attribute_values=, ?order=, ?search=, ?min_price=…). Google kan zo duizenden varianten van dezelfde categoriepagina crawlen. Dat kost crawlbudget: het aantal adressen dat Google per dag op een website bezoekt. Dat aantal is beperkt en hangt af van hoe snel de server antwoordt en hoe belangrijk Google de site vindt. Gaat het op aan filtervarianten, dan worden nieuwe producten en gewijzigde pagina's later opgepikt. Voor een kleine website met enkele tientallen pagina's speelt het nauwelijks, voor een webshop met honderden producten en veel filters wel. Met Disallow-regels stuur je Google naar de pagina's die er echt toe doen.
In de praktijk: bij een webshop zet je in het vrije veld regels die de filter-, sorteer- en zoekadressen blokkeren. Het sterretje staat voor "om het even wat":
- Disallow: /*?*attribute_values= voor de filters op kenmerken, zoals maat of kleur;
- Disallow: /*?*min_price= en Disallow: /*?*max_price= voor de prijsfilter;
- Disallow: /*?*order= voor de sortering;
- Disallow: /*?*search= voor de zoekfunctie van de webshop. Een zoekopdracht zonder resultaat toont een lege pagina die toch antwoordt alsof alles in orde is, en Search Console meldt die dan als "zachte 404";
- Disallow: /*?*tags= voor de filter op producttags.
De categoriepagina's en productpagina's zelf blijven zo gewoon bereikbaar voor Google; enkel de varianten met iets achter het vraagteken vallen weg.
Meerdere talen
Wat is het? Een meertalige website heeft per taal een eigen versie van elke pagina. Google moet weten welke versies bij elkaar horen, zodat het een Franstalige zoeker de Franse pagina toont. Dat gebeurt met hreflang: onzichtbare regels in de pagina die zeggen "deze pagina bestaat ook in het Engels, op dit adres". Een voorvoegsel is het taalstukje vooraan in het adres, zoals /en/ of /fr/.
Wat Odoo doet: de hoofdtaal staat zonder voorvoegsel, de andere talen krijgen er een (/en/, /fr/). Een overbodig voorvoegsel voor de hoofdtaal haalt Odoo zelf weg. Op elke taalversie staan hreflang-verwijzingen naar de andere talen en een x-default. Producten, categorieën en blogartikels krijgen een vertaald adres op basis van hun vertaalde naam, en titel en beschrijving vul je per taal in.
Wat niet: de URL van een gewone websitepagina is niet vertaalbaar. De URL is het adres in de adresbalk van de browser, zoals jouwbedrijf.be/algemene-voorwaarden. De Engelse versie van die pagina krijgt dan jouwbedrijf.be/en/algemene-voorwaarden, en niet jouwbedrijf.be/en/terms-and-conditions.
Voeg je een taal toe aan de website, dan krijgt elke pagina meteen een versie in die taal, ook als ze nog niet vertaald is. Odoo toont dan de tekst van de hoofdtaal en meldt die versie via de hreflang toch aan Google. Voor Google is zo'n pagina een dubbel van de hoofdtaal, en dan toont het er maar één. Zet een taal dus pas aan als de belangrijkste pagina's vertaald zijn, met hun titel en beschrijving.
Waarom een goede URL telt: voor Google weegt de URL maar licht mee. Voor de lezer telt hij wel: hij staat in de zoekresultaten, in de adresbalk en in elke link die iemand deelt. Een korte URL in de taal van de lezer, die zegt wat er op de pagina staat, wekt vertrouwen en wordt sneller aangeklikt. Een Engelstalige bezoeker die /en/algemene-voorwaarden ziet, twijfelt of de pagina wel in het Engels is. Een URL als /page-3 zegt niemand iets.
In de praktijk: voor vertaalde URL's van websitepagina's, zoals /en/terms-and-conditions, bestaat op een eigen server een module. Test dan of alle verwijzingen naar de pagina, zoals de hreflang, de taalkiezer en de doorverwijzingen, de vertaalde URL gebruiken. Op Odoo Online kan je geen eigen module installeren. Kies daar voor een websitepagina dan een adres dat in elke taal werkt, zoals /odoo-seo of /contact, liever dan een Nederlands woord dat ook in het Engelse adres blijft staan.
Doorverwijzingen
Wat is het? Een doorverwijzing stuurt een bezoeker die een oud adres opent automatisch door naar het nieuwe. Elk antwoord van een website heeft een code: 200 betekent "hier is de pagina", 404 "deze pagina bestaat niet", 301 "deze pagina is definitief verhuisd naar dit adres" en 302 "tijdelijk verhuisd". Een 301 is de belangrijkste: Google geeft dan de ranking die de oude pagina had opgebouwd, haar plaats in de zoekresultaten, door aan de nieuwe.
Wat Odoo doet: onder Website > Configuratie > Doorverwijzingen beheer je per website doorverwijzingen van het type 301 en 302, en adressen die bewust een 404 moeten geven. Wijzig je in Odoo het adres van een pagina, dan stelt Odoo zelf voor om een doorverwijzing te maken.
Wat niet: een regel werkt enkel op het exacte adres, zonder jokertekens. De parameters achter het vraagteken gaan mee naar de bestemming, wat op een blogartikel met ?page= een fout kan geven. Staat de hoofdtaal zonder voorvoegsel, dan zet je de regel op het adres zonder /nl/, want dat haalt Odoo er eerst af. En bestaat er op hetzelfde adres nog een websitepagina, dan gaat die altijd voor: de doorverwijzing werkt dan niet.
In de praktijk: bij een verhuis van WordPress, Joomla of OpenCart naar Odoo is de lijst met doorverwijzingen de belangrijkste stap. Vertrek van de adressen die in Search Console vertoningen en klikken hebben, laat dode regels en dubbels weg, en laat elke regel rechtstreeks naar de eindbestemming wijzen. Stuur niet alles wat verdwijnt naar de homepage. Google ziet dat als een "zachte 404". Een adres dat echt niet meer bestaat, mag een 404 geven.
Een doorverwijzing is bedoeld voor oude adressen die nog in Google, in bladwijzers of op andere websites staan, niet voor je eigen links. Laat het menu, de knoppen en de links in je teksten altijd rechtstreeks naar het eindadres wijzen. Elke doorverwijzing kost Google een extra bezoek. Een ketting van doorverwijzingen, van oud naar tussenstop naar nieuw, maakt het nog trager, en na tien stappen geeft Google het op. Wijzig je een adres, verbeter dan ook de links ernaar, en laat de doorverwijzing enkel staan voor wie van buitenaf komt.
Gestructureerde gegevens (schema.org)
Wat is het? Gestructureerde gegevens zijn gegevens die je in een vaste vorm, volgens de afspraken van schema.org, onzichtbaar in een pagina zet: "dit is een product, het kost € 25, het is op voorraad, de verzending kost € 5". Een bezoeker ziet ze niet, maar Google kan ze lezen zonder de tekst te moeten interpreteren. Daarmee toont Google bijvoorbeeld de prijs, de sterren of de beschikbaarheid meteen in de zoekresultaten.
Wat Odoo doet: met de webshop geïnstalleerd zet Odoo op elke pagina de naam, het logo en het webadres van het bedrijf. Op een productpagina komen de naam, het adres, de afbeelding, de prijs en de munt, de beschrijving, de artikelcode, de barcode en, als ze aanstaan, de beoordelingen.
Wat niet: zonder webshop zet Odoo geen enkele gestructureerde gegevens. Blogartikels krijgen niets mee, ook geen kruimelpad: het regeltje Home > Blog > Artikel dat toont waar een pagina in de website zit. Bij producten ontbreken onder meer het merk, de beschikbaarheid, de verzendkosten, het retourbeleid en de groepering van varianten. Search Console meldt dat onder Verkopersvermeldingen en Productfragmenten.
In de praktijk: wil je meer dan wat Odoo meegeeft, zoals de bedrijfsgegevens en sociale profielen op elke pagina, een artikelopmaak met kruimelpad voor de blog, en per product de verzendkosten en het retourbeleid, dan kan dat op een eigen server met een module. Op Odoo Online lukt hetzelfde met eigen weergaven in de databank.
Snelheid en verspringende pagina's
Wat is het? Google meet hoe bezoekers je website ervaren, met drie cijfers die samen de Core Web Vitals heten: hoe snel de pagina verschijnt, hoe snel ze reageert op een klik, en of ze stil blijft staan tijdens het laden. Dat laatste heet CLS (Cumulative Layout Shift): je wilt op een knop klikken, er laadt nog een afbeelding boven, alles schuift op en je klikt ernaast.
Wat Odoo doet: Odoo bundelt en comprimeert de stijlbladen en scripts, en in de editor kies je per afbeelding een kleiner formaat.
Wat niet: afbeeldingen in de bouwblokken en blogartikels krijgen geen breedte en hoogte mee. De browser weet dan pas hoe groot een afbeelding is als ze geladen is, en de tekst verspringt. Search Console meldt dat als een slechte CLS.
In de praktijk: geef elke afbeelding haar echte breedte en hoogte mee, ook een SVG-logo, zodat de browser de plaats al vrijhoudt voor ze geladen is. Heeft de afbeelding een vaste breedte, zet er dan ook height: auto bij, anders wordt ze uitgerekt. Een geplande actie in Odoo kan dat elke dag voor alle pagina's en talen doen. Of het helpt, zie je in Search Console onder Core Web Vitals.