11 KiB
SEO report — odoo-expertos.com — 2026-10-24 (run 2)
Data sources, all executed this run: website_stats.py (n8n webhook: Search Console 447
queries + Plausible, range 2026-01-01 → 2026-10-24), audit_site.py . /tmp/seo_audit.json,
git log, grep counts over the working tree, and live curl of the URLs named below.
Previous report: growth/SEO-REPORT-2026-10-24.md.
Why "run 2": that previous report was committed at 19:41 UTC today; this run started at 19:42 UTC. Same calendar date, so reusing the filename would have destroyed the only prior report. It is preserved untouched; this file is the newer snapshot.
Executive summary
Nothing moved this week: this run has zero elapsed time since the previous report — three
minutes — so it contains no new search data, and every number below is a re-read of the same
snapshot, not a trend. The site still stands at 4,745 impressions, 9 clicks, CTR 0.19%,
average position 24.7, with the money cluster (hosting*, 33 queries) at position 27.5,
538 impressions, 1 click — that is the number that matters and it is unchanged because the
time window is unchanged. What this run did add is fresh evidence rather than fresh traffic:
the technical defect counts reproduce exactly (1,370 broken internal link occurrences, 0
missing assets, 23 relative canonicals, 18 pages without canonical), the two confirmed live
404s still 404, and the fabricated proof is wider than last week's report stated — 113
pages carry an ISO 27001 claim and 80 carry a SOC 2 claim. Do not read any of this as a
week-over-week result; the first run that can show movement is the next one.
Scorecard
"Last week" is the 2026-10-24 report. "This week" is this run. Both read the same webhook snapshot, so every change is 0 by construction — not a measurement of stagnation.
| metric | last week (2026-10-24) | this week (2026-10-24) | change |
|---|---|---|---|
| GSC impressions | 4,745 | 4,745 | 0 — same snapshot |
| GSC clicks | 9 | 9 | 0 |
| GSC CTR | 0.19% | 0.19% | 0 |
| GSC average position | 24.7 | 24.7 | 0 |
Money-cluster position (hosting*) |
27.5 (33q, 538 impr, 1 click) | 27.5 (33q, 538 impr, 1 click) | 0 |
| Plausible visitors | 2 | 2 (2 visits, 3 pageviews) | 0 |
| Affiliate clicks | n/a | n/a | n/a — no Affiliate Click goal configured |
Affiliate clicks remain n/a for the same reason as last week, re-verified this run: the
Plausible goal block (event:goal) returns a single row, Visit / with 1 visitor, and
nothing else. The custom events in js/plausible-events.js cannot appear until the goals are
created in the dashboard. The north-star metric is unmeasured, not zero. Commission on
odoo4projects.com is not visible from this environment and is not reported.
The 2 Plausible visitors are both from the week of 2026-10-19 (United States, Paraguay) and are consistent with owner/test traffic.
What shipped
Every commit in the window is dated 2026-10-24 — the whole backlog landed today, in the hours
before this run. git log --oneline --since="8 days ago" returns 15 commits; the ones that
were supposed to move something:
| commit | what it did | metric it was supposed to move |
|---|---|---|
a6cff06 |
fixed 2,659 dead internal URLs, repaired canonicals, dropped dead host leftovers | broken internal link occurrences; crawl path health |
8b80c6c |
removed three unreferenced assets (unused CSS, image probe) | none claimed — hygiene |
1dde14a |
added the first SEO report | none — reporting |
cd5d7ef |
logged week 1, advanced plan to week 2 | none — bookkeeping |
d82af02 |
added .agents/product-marketing.md (ICP, proof policy, positioning) |
none directly; unblocks copy decisions |
6d25fc8, 58b8234, 86f152d, 3c961ab |
attempted then reverted /growth routing config |
none — see open risks, the effort failed |
21b274f |
tracked outbound clicks as Plausible custom events | affiliate clicks (blocked: no goal) |
3bd7001 |
pointed Plausible at /js/script.js |
data collection (was 404ing on pa-<hash>) |
1c50992 |
Plausible tag on 1,206 pages | visitors |
129595d |
affiliate CTA on 6 language hosting hubs | outbound clicks |
4171a31 |
UTM tags on outbound links | attribution |
Affiliate link hygiene re-verified this run: 479 href="https://odoo4projects.com..." links,
0 without utm_source=odoo-expertos.com.
Verdicts on last week's action items
| # | action item | verdict |
|---|---|---|
| 1 | Create Affiliate Click / Outbound Click goals in Plausible |
not done — goal block still returns only Visit /. Too early to measure otherwise; nothing shipped. |
| 2 | Rewrite title + meta for page-1 zero-click queries | not started — no commit touching titles in the window. Too early. |
| 3 | Strip fabricated testimonials / ISO / SOC 2 / "200+ proyectos" / placeholder phone | not done — 113 pages still carry ISO 27001, 80 carry SOC 2, 12 carry "200+ proyectos", 6 pages still carry tel:+123****7890. Still scheduled week 2. |
| 4 | Consolidate ~40 near-duplicate /odoo-hosting/* pages per locale |
not started — scheduled weeks 8–10. |
| 5 | Fix remaining 1,370 broken internal link occurrences (679 targets) | no change — broken_internal_count is still 1370. Keep open. |
| 6 | Fix the odoo experts brand query |
not started — still 75 impressions @ 13.7, 0 clicks. |
| 7 | Fill or remove the 0-byte PT page | not done — still live: HTTP 200, 0 bytes. |
| 8 | Resolve 23 relative canonicals and 18 pages without a canonical | no change — canonical_not_www: 23, no_canonical: 18. |
Nothing was reverted and nothing was claimed as a win.
Opportunities
Identical to the previous snapshot because it is the previous snapshot; re-read from the webhook this run. No query is new since last week.
Page-1 zero-click queries (position ≤ 10, 0 clicks, ≥ 20 impressions): 17 queries, 1,090 impressions — 23.0% of all impressions. Top by volume:
| query | impressions | position | clicks |
|---|---|---|---|
| odo ia | 279 | 6.8 | 0 |
| odoo de donde es | 154 | 5.3 | 0 |
| de donde es odoo | 115 | 4.9 | 0 |
| odoo honduras | 81 | 9.4 | 0 |
| .odo ia | 66 | 7.6 | 0 |
| odoo origen | 60 | 7.7 | 0 |
| odoobot que es | 56 | 8.8 | 0 |
| hosting economicos | 30 | 3.9 | 0 |
These are snippet failures, not content failures: the pages already rank and get ignored. At 1.5% CTR the 1,090 impressions would yield ~16 clicks over an equivalent window.
Position 8–20 queries (≥ 10 impressions): 34 queries, 1,094 impressions, 6 clicks.
Largest by volume: odoo ia 118 @ 15.0 (0 clicks), odoo bolivia 84 @ 8.4 (3),
odoo honduras 81 @ 9.4 (0), odoo experts 75 @ 13.7 (0), demo odoo 63 @ 12.4 (1),
odoo demo 63 @ 17.0 (0), cloudpepper 50 @ 11.2 (1). cloudpepper is a competitor-brand
query ranking in the middle of page 2 with a click already — the only comparable page on the
site is the one that wins it.
Head-term anchors unchanged: odoo hosting 298 impressions @ 31.5 (1 click), hosting odoo
85 @ 28.5 (0), odoo beratung 155 @ 51.5 (0).
Action items for the coming week
Ordered by expected value. Items 1–3 finish work already scheduled rather than starting new work.
1. Create the Affiliate Click and Outbound Click goals in Plausible — S — unblocks
everything else. The north star has been unmeasurable for two runs. This is a dashboard
setting, not a code change. Proves it: the event:goal block returns rows named Affiliate Click and Outbound Click with non-null event counts.
2. Strip the fabricated proof — S — scheduled week 2, now overdue. Scale is larger than
last week's report said: ISO 27001 on 113 pages, SOC 2 on 80, "200+ proyectos" on 12,
tel:+123****7890 on 6, plus the "María González" and "Alejandro Ruiz" testimonial blocks.
Edit the shared templates, not 113 files. Proves it: page-count of ISO/SOC 2 strings and
placeholder tel: links reaches 0, and impressions on the affected URLs do not fall.
3. Rewrite title + meta description for the four biggest page-1 zero-click queries — M —
scheduled weeks 3–6. odo ia (279 impr), odoo de donde es (154), de donde es odoo
(115), odoo honduras (81). Proves it: CTR on those four queries.
4. Fix the 1,370 broken internal link occurrences — M — open two runs. Most are
navigation-template links (/contacto/, /servicios, the /odoo-ai/ → /odoo-ia/ path
error), so the fix is a handful of templates. Proves it: broken_internal_count from
audit_site.py drops toward 0.
5. Write the week-2 entry in growth/WEEKLY-LOG.md and advance state.json — S. Two
consecutive runs have produced identical numbers and no measurement row; without the log the
loop has no memory of what it decided. Proves it: a week-2 row exists with a measured column.
Open risks
All re-checked this run; none stale.
- Fabricated proof at scale. 113 HTML files contain "ISO 27001", 80 contain "SOC 2", 12
contain "200+ proyectos", 6 contain
tel:+123****7890, 1 contains the "María González" testimonial, 1 contains "Alejandro Ruiz". Neither certification is verifiable from anything in this environment. - Two confirmed live 404s.
https://www.odoo-expertos.com/servicios→ 404 (153 bytes);https://www.odoo-expertos.com/odoo-ai/odoo-chatbot-ai-atencion-client-2025/→ 404 (153 bytes). Both still linked internally. - Empty page is indexable.
https://www.odoo-expertos.com/pt/odoo-ia/odoo-sistema-reservas-booking-ia-2025/→ HTTP 200 withsize_download 0, listed in the PT sitemap. Soft-404 candidate. - 1,370 broken internal link occurrences across 679 unique targets; audit also reports
h1_not_one: 19,pages_without_title: 1,pages_without_description: 1. - Canonical host ambiguity.
canonical_not_www: 23relative canonicals onen/andfr/pages;no_canonical: 18. Apex and www both serve 200 with no redirect, so the canonical resolves to whichever host the crawler used. Leave the intentional cross-locale canonicals alone — touching them re-indexes ~150 pages. - hreflang coverage 26%. 317 of 1,202 HTML files carry an
hreflangtag; 1,111 carry an absolutehttps://www.canonical (the remaining 91 are relative, absent, or another host form). Cross-locale canonicalised pages without hreflang give Google no signal that a translation exists. - Sitemap gap.
sitemap_url_count: 1191against 1,202 HTML pages — 11 pages in no sitemap. Partly legal/404 pages by design, not verified page by page. - Internal strategy is public.
https://www.odoo-expertos.com/growth/PLAN.md→ HTTP 200, 7,426 bytes. Routing config had zero effect (four commits, one revert);robots.txtDisallow: /*.md$is advisory only. - No attribution. Affiliate clicks unmeasured (no goal), commission not visible here.
Next review date
2026-10-30 (Friday). That run should carry the first genuine week-over-week comparison, and is the first that can hold items 1–3 above to account.