8 Commits
Author SHA1 Message Date
Hermes Agent ebb21f2a11 Rank /odoo-ia/ for 'odo ia': define the term, add depth, cross-link the hubs
Internal linking was already fine (162 pages link here, 252 anchors 'Odoo IA',
54 of 55 child articles link back), so the gap was the page itself: it listed 55
links and never defined the term it ranks for.

- 'Que es Odoo IA?' definition block under the hero, in the page's own words,
  with the three layers that matter commercially: nativo / integracion / local.
- Six use cases (atencion, documentos, CRM, contabilidad, inventario, procesos),
  each linking to the article that covers it. Hub depth, not just a directory.
- ItemList schema for those six entries, matching visible content.
- /odoo-hosting/ now links to /odoo-ia/ in body copy: the two money hubs were
  not linked to each other at all.

No version-specific feature claims: each statement is conditional on version and
edition, because odoo.com has no AI page to verify a feature list against.
2026-10-24 21:22:11 +00:00
Hermes Agent dd4ead288b Optimise /odoo-ia/ and fix the site-wide 'null' header bug
/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.
2026-10-24 21:18:09 +00:00
Hermes Agent 2e0882db48 Rewrite titles and descriptions for the page-1 zero-click queries
Three pages carry six of the 17 queries that rank on page 1 with zero clicks
(1,090 impressions, 23% of the site's total). The snippets were machine
slug-dumps ('Empresa Odoo Historia Fundacion 2025 | Odoo Expertos') followed by
a ' - <slug> | ES' artifact that wasted half the description.

- /odoo/empresa-odoo-historia-fundacion-2025/ -> '¿De dónde es Odoo? Origen y
  quién lo creó' (targets: odoo de donde es 154@5.3, de donde es odoo 115@4.9,
  odoo origen 60@7.7, odoo de que pais es 32@6.8, odoo de donde es originario
  25@4.5, quien creo odoo 21@6.4)
- /odoo/odoo-honduras-implementacion-local-2025/ -> 'Odoo en Honduras:
  facturación DEI y localización' (odoo honduras 81@9.4)
- /odoo-ia/ -> 'Odoo IA: qué automatiza y cómo empezar' (odo ia 279@6.8 plus
  the .odo ia / ,odo ia variants)

Title, description, og:title and og:description updated together. Every claim in
the new copy is supported by the page body.
2026-10-24 20:56:29 +00:00
Hermes Agent a6cff06a8f Cleanup: fix 2,659 dead internal URLs, repair canonicals, drop dead host leftovers
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.
2026-10-24 19:25:07 +00:00
Hermes Agent 21b274f91f Track outbound clicks as Plausible custom events
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.
2026-10-24 18:42:02 +00:00
Hermes Agent 3bd7001795 Point Plausible at /js/script.js — the pa-<hash> path 404s on this instance
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).
2026-10-24 18:28:41 +00:00
Hermes Agent 1c50992521 Add Plausible analytics to all 1206 pages
Self-hosted instance at plausible.office.odoo4projects.com.
Injected before </head> on every page; the empty pt booking stub is left untouched.
2026-10-24 18:26:42 +00:00
oliver 585951c8ce new site 2026-08-28 10:11:11 -03:00