From bddae95889c4c29abd493e23c3a5965567a81b31 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sat, 24 Oct 2026 19:43:16 +0000 Subject: [PATCH] SEO report 2026-10-24 (run 2) --- growth/SEO-REPORT-2026-10-24-run2.md | 182 +++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 growth/SEO-REPORT-2026-10-24-run2.md diff --git a/growth/SEO-REPORT-2026-10-24-run2.md b/growth/SEO-REPORT-2026-10-24-run2.md new file mode 100644 index 0000000..c5f1863 --- /dev/null +++ b/growth/SEO-REPORT-2026-10-24-run2.md @@ -0,0 +1,182 @@ +# 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-`) | +| `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 with `size_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: 23` relative canonicals on `en/` and + `fr/` 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 `hreflang` tag; 1,111 carry an + absolute `https://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: 1191` against 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.txt` + `Disallow: /*.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.