SEO report 2026-10-24 (run 2)
This commit is contained in:
1 parent
1dde14a821
commit
bddae95889
1 file changed
+182
@@ -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-<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 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.
|
||||||
Reference in new issue
Block a user