In short
Westwood Sourcing is a Dutch company that sources non-food products in Asia and helps European sellers meet EU product rules. They asked me to make their Odoo site easier to find in Google and in AI answers, in English and in Dutch. I wrote legally precise articles and service pages, built schema (structured data for search engines and AI) that is correct in each language, and reviewed the blogs and the online academy. Everything is live, and I check every release on the public site in both languages.
Facts at a glance
| Client | Westwood Sourcing |
|---|---|
| Sector | Sourcing and product compliance, B2B |
| Period | August 2026 to now, ongoing |
| Disciplines | SEO, GEO, content, web development |
| Technology | Odoo, QWeb templates, JSON-LD |
| Status | Live |
About the client
Westwood Sourcing buys non-food products from factories in Asia, with on-site quality control in sixteen countries. They also handle EU compliance, such as GPSR (the EU rules on product safety) and PPWR (the new rules on packaging). Their clients are sellers, often from outside the EU, who want to sell on European marketplaces.
The question
The client wanted the site to be found more often, including in answers from ChatGPT and similar tools. That is GEO (generative engine optimization: showing up in AI answers). The timing mattered: new EU rules took effect in August 2026, and sellers have a lot of questions about them. If the answer is on the site, it no longer needs an email.
Where things stood
The site already had a lot of useful content: 148 blog posts and an academy with a course and downloadable templates. I audited each section: I fetched every page without logging in, in both languages, and read its HTML, metadata and schema. What I found: the schema on the Dutch pages was in English. Parts of the Dutch translation were missing or switched to English halfway through a sentence. Lesson pages in the academy had two or three h1 headings (the main heading of a page), and several had no meta description of their own (the short text below a search result).
What I did
Content that follows the law
I wrote and rewrote posts on PPWR, Green Claims, the Battery Regulation, the Product Liability Directive and customs checks on e-commerce. Every rule comes with its article number, so readers can check it themselves. I never phrase anything more firmly than the legal text does. One example: the authorised representative under Article 17 of the PPWR is optional, so the content does not sell it as a requirement. I also built a service page on starting in the EU on a small budget, and a 25-question FAQ on the GPSR authorised representative page. Every price and condition in it comes from the client.
Schema that matches the language
Odoo does not translate text inside a script block, so Dutch pages were served English schema. I built templates that assemble the schema from fields that are translated: title, description and URL. The schema now follows the language of the page automatically. What I chose not to do: video schema for the lessons. The records lack an upload date and a thumbnail, and I would rather leave a field out than fill it with something that is not true.
The academy and the blog reviewed
The full GPSR course is now in Dutch: 22 lessons, 45 quiz questions and 180 answers. Seventeen lesson pages got their own meta description in both languages, and every lesson page now has one h1. On the blog, I shortened meta titles that were too long. In the academy, I switched the Dutch texts from the formal “u” to the informal “je”, as the client prefers.
How I checked it
I only report a page as done with an audit report that shows zero errors. That check runs on the public site, not in the admin environment. I fetch every page without logging in and with a fixed language preference. Otherwise Odoo may quietly serve Dutch on the English URL. I then confirm that the language in the HTML matches what I asked for.
A few standard checks:
- Translation: I test whether the text itself is Dutch, not just whether it differs from the English source. The second test misses sentences that are slightly different but still English.
- I test new templates on an unpublished test page first. Only when that renders correctly does the change go to a real page.
- After changing a slug (the last part of a URL), I fetch the old addresses. In the academy, four old URLs all led to the new page.
Warnings that are not real errors, such as buttons from the standard Odoo template, are named in the report. I do not hide them.
Result
This project has no measured traffic or visibility figures yet (as of September 2026). What is live now: schema that is correct in both languages on blog posts, service pages and the academy; a fully Dutch GPSR course; a dedicated meta description on every lesson page of the GPSR course; and new articles that list their sources. The client can now answer a seller’s question with a link to a page, in that seller’s language.
What the client says
one of the very few hidden gems in Fiverr
These reviews were posted by verified clients on Fiverr. View them on my Fiverr profile. See all reviews on Fiverr
What comes next
The project is ongoing. The next step is the blog meta descriptions: 89 English and 93 Dutch ones are longer than 160 characters. Seventeen English blog posts also still contain Dutch text.
Frequently asked questions
Can you do SEO and GEO on an Odoo site?
Yes. Odoo is less flexible than WordPress, but with custom templates I can handle schema and metadata per language.
Why does schema per language matter?
An AI system or search engine reads the schema as a summary of the page. If that summary is in English on a Dutch page, it does not match the page. That was the case on this client’s /nl pages until I had the schema built from the translated fields.