Commit Graph
68 Commits
Author SHA1 Message Date
Hermes Agent 8bd3da95f9 Log week 7 (/odoo-ia/ ranking pass) and advance the plan 2026-10-24 21:23:50 +00:00
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 5f47d58d3f Log week 6 (/odoo-ia/ + null-header fix) and advance the plan 2026-10-24 21:20:03 +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 5b5f484eb5 Log week 5 (empresa page rework) and advance the plan 2026-10-24 21:10:09 +00:00
Hermes Agent a52f0f6158 Rework the 'de donde es odoo' page around the reader's actual question
The page ranked 4.9-7.7 for 6 queries (~400 impressions) and earned zero clicks.
The snippet said 'the history of Odoo'; the searcher is asking whether they can
use this Belgian thing where they live.

- Head: 'Es belga, y asi se usa en LATAM'. Description leads with the answer
  (Belgium, 2005, Fabien Pinckaers) and the LATAM payoff (Community ships
  accounting localisation).
- 'Odoo en 30 segundos' fact block above the fold: Belgium/2005, founder,
  282 M EUR revenue 2023 (+33%), 2,200+ staff, 5.26 B USD valuation (Nov 2024),
  50 official apps + 50,000 community.
- LATAM section: Community ships l10n for MX/CL/AR/PE/CO/BR (verified in the
  Odoo 19.0 addons tree). Electronic invoicing explicitly NOT claimed as
  included - it varies by country, Enterprise or OCA.
- CTA to Odoo4projects Sao Paulo with utm_campaign=empresa-odoo-historia and a
  disclosure line.

Every number is sourced: Wikipedia (2005, 282 M EUR, 2,200 staff, 5.26 B USD
valuation) and odoo.com (50 apps, 50,000 community apps).
2026-10-24 21:08:45 +00:00
Hermes Agent 2e34e699b0 Log week 4 (links, PT page, canonicals, brand query) and advance the plan 2026-10-24 21:04:40 +00:00
Hermes Agent 582a93e8a6 Fix the last 1,370 broken internal links, empty PT page and canonicals
Broken internal links: 1,370 -> 0 occurrences.
- 1,068 resolved context-aware: the same dead path needs a different destination on
  each locale, so resolution is per (page, target), not per string. Old-site routes
  (/contacto/, /servicios*, /consultoria*, /implementacion*, /recursos*) go to the
  page's own locale home or /odoo/ hub; legacy /odoo-ai/ paths are rewritten to
  /odoo-ia/; locale pages linking a root slug get their own locale's version.
- 301 remaining point at inline body links to pages that were planned but never
  written (35 locale hosting articles, 5 old /odoo-ai/ slugs, dead sections). Those
  fall back to the same-language section hub rather than 404.

Empty PT page: pt/odoo-ia/odoo-sistema-reservas-booking-ia-2025/ was 0 bytes and
returned an empty 200 from the PT sitemap. Removed it, its <url> block and every
hreflang alternate pointing at it; the 5 PT pages that linked to it now point at
/pt/odoo-ia/.

Canonicals: 23 relative -> absolute (a relative canonical carries no host, and apex
and www both answer 200). 62 pages had a second canonical added in the previous pass
because theirs was written href-first; duplicates removed, every page now has
exactly one. 404.html deliberately has none.

English homepage: title, description and H1 aligned to the 'odoo experts' query.
2026-10-24 21:02:54 +00:00
Hermes Agent db788e8d31 Log weeks 2-3 (proof removal, snippet rewrites) and advance the plan 2026-10-24 20:58:11 +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 689bcaff51 Remove fabricated proof from the homepage and the six language homes
- Deleted the three invented testimonials (María González / 'EMPERATRIZ DIGITAL',
  Alejandro Ruiz / 'COMANDANTE DE OPERACIONES', Carlos Salinas / 'GENERAL DE
  TECNOLOGÍA'). The companies do not exist and the quotes are not attributable.
- Removed the ISO 27001 and SOC 2 trust badges: they claimed *we* hold those
  certifications. Third-party statements about Hetzner/Azure/Odoo SH being
  certified are factual and stay.
- Removed the placeholder phone number (tel:+) used as a 'Call now' button on
  all six homepages.

E-E-A-T and legal exposure, not a ranking play.
2026-10-24 20:56:29 +00:00
Hermes Agent 578f0a6690 SEO report 2026-10-24 as a styled HTML page
Self-contained (no external assets), dark theme matching the site accent, print
friendly. Carries a machine-readable <script id=seo-metrics> JSON block so next
week's run can diff against it instead of re-deriving last week's numbers.
The Friday job now renders from templates/seo-report.html.
2026-10-24 20:35:50 +00:00
Hermes Agent 0d2ecdbc24 Drop the smoke-test duplicate report
The Friday job was triggered manually to prove the pipeline; it produced a
second snapshot of the same date. The pipeline works (completed, wrote a
grounded report, committed, pushed); the file itself adds nothing.
2026-10-24 19:45:27 +00:00
Hermes Agent bddae95889 SEO report 2026-10-24 (run 2) 2026-10-24 19:43:16 +00:00
Hermes Agent 1dde14a821 Add first SEO report (2026-10-24)
Produced by the new 'seo' profile from live data: webhook (Plausible + Search
Console), audit_site.py, git log. Scorecard, technical progress, ranking
opportunities, 8 action items, open risks. All figures cross-checked against
the scripts (317 hreflang pages, 679 broken targets, 1,370 occurrences,
23 relative canonicals, 18 missing canonicals, sitemap 1,191 of 1,202).
2026-10-24 19:41:03 +00:00
Hermes Agent 8b80c6cbf6 Remove three unreferenced assets (unused CSS, image probe)
Zero references in HTML, JS or CSS.
2026-10-24 19:27:03 +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 cd5d7ef1b3 Log week 1 and advance the plan to week 2 2026-10-24 19:13:09 +00:00
Hermes Agent 6d25fc866d Revert inert routing config for /growth and /.agents
Neither vercel.json rewrites nor redirects nor a _redirects file has any effect:
the origin serves files literally and no routing layer is in front of it (no
Vercel or Pages headers on any response). Leaving dead config in place would
imply the paths are blocked when they are not. protection is robots.txt only
(Disallow: /*.md$) until these docs live outside the deployed tree.
2026-10-24 19:12:59 +00:00
Hermes Agent 58b8234098 Add _redirects for the Cloudflare-served origin
The site is served by Cloudflare (no Vercel headers on any response), so
vercel.json is inert. Cloudflare honours a _redirects file at the root.
2026-10-24 19:11:35 +00:00
Hermes Agent 86f152daf7 Block /growth/ and /.agents/ with redirects, not rewrites
Vercel serves an existing static file before applying a rewrite, so the
previous rewrite block did nothing and the strategy docs returned 200.
Redirects run before the filesystem check, so these now leave the site.
2026-10-24 19:09:20 +00:00
Hermes Agent 3c961abd4a Do not serve internal strategy paths publicly
.vercelignore does not take effect on this deployment (growth/PLAN.md
returned 200 live after being added to it), so block /.agents/* and
/growth/* with rewrites to a nonexistent path instead.
2026-10-24 19:03:44 +00:00
Hermes Agent d82af02ccd Add product marketing context (week 1 enabler)
Hypothesis: every later copy decision (title/meta rewrites, hosting hub,
CTA blocks) will be written against a single grounded source of truth —
real ICP from GSC query data, verified host prices, and an explicit
never-use list for the site's fabricated proof — instead of being
improvised per page. Metric: none (enabler); success is that week 2's
proof-removal and week 3's CTR rewrites stop inventing claims.

Also stop serving internal strategy publicly: .agents/ and growth/ are
added to .vercelignore (.md was listed but growth/PLAN.md still returns
200 live).
2026-10-24 19:02:01 +00:00
Hermes Agent 8df260b90d Add 12-month growth plan, baseline, weekly log and measurement loop
Week-by-week plan grounded in current GSC data (4,745 impressions, 9 clicks,
CTR 0.19%, hosting cluster at position 27.5, 1,090 impressions on page-1
zero-click queries). One bounded change per week, measured the following week.
Snapshot script: ~/.hermes/scripts/growth_week.py.
2026-10-24 19:00:47 +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
Hermes Agent 129595d57a Add affiliate hosting CTA to the 6 language hosting-hub pages
The /<lang>/odoo-hosting/ hubs are the highest-intent pages ('hosting Odoo')
and carried no outbound link to the host before this change.
2026-10-24 18:24:15 +00:00
Hermes Agent 4171a31b0a Affiliate funnel: tag all odoo4projects.com links with utm_source=odoo-expertos.com
- 467 outbound links across 254 files now carry our affiliate UTM
  (replaces the stale utm_source=X5Y2I933 on the banner components)
- fix 36 links to /starter /professional /enterprise /business /mx,
  which return 404 on the target; remapped to /#pricing
- add a managed-hosting CTA block to all 6 homepages (es/en/de/fr/pt/ar),
  which previously carried zero links to the host
2026-10-24 18:22:24 +00:00
oliver 585951c8ce new site 2026-08-28 10:11:11 -03:00
oliver f533ff8e36 delete 2026-08-28 10:10:31 -03:00
Hermes Agent bbb746c06d Add Plausible analytics to all pages 2026-08-08 19:16:39 +00:00
Hermes Agent 3bb194d408 Blog: add date field to allArticles, sort newest first, show date on cards 2026-08-08 18:57:52 +00:00
Hermes Agent 8d7a0ea43a Add Article + Breadcrumb schema to XML-RPC post 2026-08-07 21:29:46 +00:00
Hermes Agent 19f7f44c5d New post: Connect Odoo to Hermes Agent via XML-RPC (with video embeds) 2026-08-07 21:27:55 +00:00
Hermes Agent ed8e134ee6 Add mailing list signup form (email only) POST to /mailing webhook 2026-08-07 21:16:31 +00:00
Hermes Agent a56b338929 Update webhook URL to /mail for contact forms 2026-08-07 21:14:48 +00:00
Hermes Agent d4751a9195 Add to: mark@odoo-expertos.com in contact form POST payloads 2026-08-07 21:13:47 +00:00
Hermes Agent 8e65fe0798 Replace toast with success message div on form submit (about + contact) 2026-08-07 21:11:39 +00:00
Hermes Agent d321351336 Light theme consistency: about, contact, privacy, 404 all use Tailwind + Inter + glass-nav. Contact form uses webhook. 2026-08-07 21:08:46 +00:00
Hermes Agent 76894ce845 About page with contact form (webhook). Footer 'Recursos' → 'Partner' with ODOO4projects, Derez AI, OCA Paraguay. Removed editorial team. 2026-08-07 21:04:28 +00:00
Hermes Agent 1202448555 Clean slate: weekly brief digest with OCA appstore + 2 stories. Consistent light styling. Old posts removed. 2026-08-07 20:53:20 +00:00
Hermes Agent 76c94517c6 Weekly brief 07 August 2026 2026-08-07 20:50:35 +00:00
Hermes Agent 2e2a9d98a9 Blog moved to homepage: search, 2 rows of 3, pagination. Dedicated blog page now redirects to /#blog. 2026-08-07 20:42:56 +00:00
Hermes Agent 52a4cdc47f New post: OCA launches Apps Store. Blog search + skill created. 2026-08-07 20:36:35 +00:00
Hermes Agent 2e1b64d118 Cache-bust favicon URLs with v=2 to force new person icon 2026-08-07 18:09:36 +00:00
Hermes Agent 6f9925fc17 Simplify favicon: cleaner person icon for better visibility at small sizes 2026-08-07 18:08:19 +00:00
Hermes Agent 2205ca1329 Replace logo with small man icon (consultant figure + connection dots) 2026-08-07 18:03:52 +00:00
Hermes Agent 71b1196c20 Remove filter chips, add continent display, add expert count badge, search includes location 2026-08-07 17:30:38 +00:00
Hermes Agent e029dabeb2 Add real-time search: filter experts by name, skills, modules, languages, summary. Works with filters. 2026-08-07 17:04:45 +00:00