New: /odoo/odoo-{bolivia,honduras,guatemala,chile,mexico,paraguay}-implementacion-local-2027/
Not templated filler. Each page answers what actually differs in that country:
- l10n module verified in the Odoo 19 community addons tree: l10n_bo, l10n_hn,
l10n_gt, l10n_cl, l10n_mx exist; l10n_py does NOT (404). Paraguay's page is
therefore about the absence of an official localisation and what that costs
in maintenance, not a copy of the others.
- No l10n_*_edi module exists in the community tree at all, so every page states
that e-invoicing is Enterprise or third-party — the cost most budgets miss.
- Partner links go to the official Odoo directory filtered by country (verified
200): bolivia-28, honduras-94, guatemala-88, chile-44, mexico-150,
paraguay-179. No individual firms are named: partner status changes, and an
unverified endorsement is the same defect as the testimonials we removed.
- One affiliate CTA per page (utm_campaign=country-2027), disclosed.
- Article + FAQPage + BreadcrumbList schema per page.
Wired in: 2025 pages link forward to their 2027 counterpart (5 of them; Paraguay
has no 2025 page and says so), /odoo/ hub links all six, sitemap-es.xml +6 URLs.
Countries chosen by actual GSC demand: odoo bolivia 88 impr/3 clicks, odoo
honduras 86, guatemala 51 across three queries, then chile/mexico/paraguay.
/odoo-ia/ (279 impressions at position 6.8 for 'odo ia', zero clicks):
- H1 answers the query instead of describing the page: 'Odoo IA: que hace la
inteligencia artificial en Odoo (y que no)'.
- Hero stats '60+ Recursos / 85% Automatizacion / 24/7 Operacion' replaced with
the three honest routes: nativo / integracion / fuera. '85%' had no source.
- 'Empieza por aqui': five curated entry points, so the hub is a guide and not
only a list of 55 links.
- Hosting CTA with utm_medium=hub-cta and a disclosure.
- FAQ (5 questions) + matching FAQPage schema. Answers are conditional on
version and edition; no feature list is asserted, because odoo.com has no AI
page to verify one against.
Separately, a real defect found while checking the render: 1,714 script blocks
across 840 pages called document.write(null) or set innerHTML = null, so the
header and footer rendered the literal text 'null'. Replaced with
createHeader()/createFooter(), which restores the real navigation on every
affected page.
No visible change — links, canonicals and dead tags only.
- 155 path rewrites (case drift from the provider move): /Odoo-Hosting/ ->
/odoo-hosting/, /odoo-ai/ -> /odoo-ia/, /Odoo/... -> /odoo/...; applied in
href/src, og:url and JSON-LD alike. The origin is case-sensitive, so these
were live 404s.
- canonicals: 93 pointed at a case variant that 404s, 43 pointed at a path that
no longer exists; the first now point at the real URL, the second are
self-canonical. Cross-locale canonicals were left alone (strategy, not a bug).
- removed 1,197 dead <link rel=alternate icon href=/favicon.ico> (file never
existed), 96 dead /styles/*.css links (Next.js leftovers) and 3
/_vercel/insights scripts (previous host's analytics).
- deleted unused duplicates: index-optimized.html, index-performance.html,
add-performance.html, a 2.1 MB duplicate portrait, and the old build scripts
(server-upstash*.js, server-optimized.js, minify-assets.js, optimize-all.js,
fix-canonicals.ps1).
broken internal links: 4,029 -> 1,370 occurrences.
js/plausible-events.js classifies every outbound click:
Affiliate Click — host in AFFILIATES map, or rel=sponsored
Outbound Click — any other external link
props: network, destination, destination_path, placement (utm_medium),
link_text, lang. Internal links, in-page anchors, mailto: and tel: are ignored;
data-plausible-skip opts an element out. Adding a new partner is one line in
AFFILIATES. Loaded on 1206 pages before </body>.
Create the two goals in Plausible (Settings -> Goals -> Custom event) named
exactly 'Affiliate Click' and 'Outbound Click' for them to show as conversions.
plausible.office.odoo4projects.com is a self-hosted CE instance: it serves
/js/script.js and /js/plausible.js, but /js/pa-VLJpcZHbeLiw9Ub8C_MgG.js returns
404, so the snippet you supplied loaded no tracker and would have recorded
nothing. Site id now travels in data-domain (apex + www report as one site).