diff --git a/growth/reports/seo-2026-10-24.html b/growth/reports/seo-2026-10-24.html new file mode 100644 index 0000000..d72fbe2 --- /dev/null +++ b/growth/reports/seo-2026-10-24.html @@ -0,0 +1,256 @@ + + + + + + +SEO report — odoo-expertos.com — 2026-10-24 + + + +
+ +
+
SEO report
+

odoo-expertos.com

+
2026-10-24 · first report · Search Console range 2026-01-01 → 2026-10-24
+
+ website_stats.py — Plausible + GSC + audit_site.py + git log + live curl checks +
+
+ +
+ The number that matters: the money cluster (33 hosting queries, 538 impressions) + sits at position 27.5 with 1 click, while the site earns 4,745 impressions and + 9 clicks overall at 0.19% CTR. Almost nobody who sees the site reaches a hosting page. + The technical cleanup landed — broken internal links fell from 4,029 to 1,370 — but this is the + first report, so no metric has had time to move. +
+ +
+
Impressions
4,745
baseline — no prior period
+
Clicks
9
10 months
+
CTR
0.19%
page 1 would be 1.5%+
+
Avg position
24.7
money cluster 27.5
+
Plausible visitors
2
owner/test traffic
+
Affiliate clicks
n/a
no goal configured
+
+ +

Scorecard

+

Baseline and “now” are the same snapshot, so the trend is flat by construction. This becomes a real trend table from the 2026-10-31 run.

+ + + + + + + + + + + +
MetricBaselineNowTrend
GSC impressions4,7454,745flat — same snapshot
GSC clicks99flat — same snapshot
GSC CTR0.19%0.19%flat — same snapshot
Average position24.724.7flat — same snapshot
Money cluster (hosting*)27.527.533q · 538 impr · 1 click
Plausible visitors222 visits · 3 pageviews
Affiliate clicksn/an/ano Affiliate Click goal
+

Affiliate clicks are unmeasured, not zero: the Plausible goal block returns only the page goal Visit / with 1 visitor. Commission attribution on odoo4projects.com is not visible from this environment and is not reported here.

+ +

Technical progress

+

Commit a6cff06 is the change this section measures; HEAD is 0d2ecdb.

+ + + + + + + + + + + + +
ItemBeforeAfterEvidence
Broken internal link occurrences4,0291,370audit broken_internal_count
Unique broken targets—679full scan
Canonicals pointing at a 404136093 case-drift + 43 dead
Dead favicon / styles / analytics tags1,29601,197 + 96 + 3
Missing assets30audit missing_assets_count
Bad in-page anchors—0audit bad_anchor_count
Duplicate titles / descriptions—0 / 0audit
HTML pages1,2081,2023 duplicate pages deleted
+

Still broken and unfixable automatically: /contacto/, /servicios, +/implementacion-odoo, /about (old-site routes, 70 occurrences) and 35 locale +hosting pages that were never created (175 occurrences). /odoo-ai/… is not case drift — +the real section is /odoo-ia/, a different path.

+ +

Ranking opportunities

+ +

Page 1, zero clicks — 17 queries, 1,090 impressions (23% of all)

+ + + + + + + + + + + + + + + + + +
QueryImpressionsPositionClicks
odo ia2796.80
odoo de donde es1545.30
de donde es odoo1154.90
odoo honduras819.40
.odo ia667.60
odoo origen607.70
odoobot que es568.80
docker odoo 20 · odoo 20 docker646.60
odoo de que pais es326.80
hosting economicos303.90
odoo inmobiliaria279.40
odoo bot258.30
odoo de donde es originario254.50
+

At a 1.5% CTR these impressions would produce roughly 16 clicks over the same window.

+ +

Positions 8–20 — 34 queries, 1,094 impressions

+ + + + + + + + + + +
ClusterQueriesImpressionsClicksAvg posExample
LatAm521439.7odoo bolivia 84 @ 8.4
AI / Odoo IA3183014.0odoo ia 118 @ 15.0
Brand / company4176113.0odoo experts 75 @ 13.7
Demo3145115.1demo odoo 63 @ 12.4
Chatbot / OdooBot413819.0odoobot 34 @ 10.4
Hosting / deployment6104015.4odoo vps 24 @ 14.6
+

Head terms for later comparison: odoo hosting 298 impr · pos 31.5 · 1 click; +hosting odoo 85 · 28.5 · 0; odoo beratung 155 · 51.5 · 0.

+ +

Action items

+ +
+

1Create the Affiliate Click and Outbound Click goals

+

The north-star metric cannot be read today — the goal block returns only Visit /. No traffic change, but it turns every later verdict from opinion into data. Proves it: the event:goal block returns both names with non-null events.

+
Effort Snot scheduleddashboard setting, not code
+
+ +
+

2Rewrite title + meta for the page-1 zero-click queries

+

1,090 impressions already reach page 1 and earn 0 clicks — the snippet is failing, not the ranking. At 1.5% CTR that is ~16 clicks. Start with odo ia, odoo de donde es, de donde es odoo, odoo honduras.

+
Effort MPLAN weeks 3–6metric: CTR on those 17
+
+ +
+

3Strip the fabricated testimonials, ISO/SOC badges and placeholder phone

+

Invented proof is an E-E-A-T and legal liability. 3 testimonials, 113 pages claiming ISO 27001, 80 claiming SOC 2, 8 pages with a placeholder phone. Value is risk removal, not ranking.

+
Effort SPLAN week 2guardrail: impressions must not fall
+
+ +
+

4Consolidate the ~40 near-duplicate hosting pages per locale

+

They cannibalize the hub for the money terms. odoo hosting 31.5, hosting odoo 28.5. Check GSC per URL before deleting anything with impressions.

+
Effort LPLAN weeks 8–10metric: position of both head terms
+
+ +
+

5Fix the remaining 1,370 broken internal links (679 targets)

+

Dead ends waste crawl paths and send readers to 404s. /servicios and the /odoo-ai/… articles are live 404s now. Many are site-wide navigation links, so the fix is a handful of templates.

+
Effort Mnot scheduledmetric: broken_internal_count → 0
+
+ +
+

6Fix the odoo experts brand query

+

75 impressions at position 13.7 with 0 clicks on a query that matches the domain name. Likely a title/H1 mismatch on the English homepage.

+
Effort Snot scheduledmetric: position + CTR
+
+ +
+

7Fill or remove the 0-byte PT page

+

pt/odoo-ia/odoo-sistema-reservas-booking-ia-2025/ is 0 bytes, returns 200 with an empty body and sits in the PT sitemap. A soft-404 candidate.

+
Effort SPLAN week 7metric: index coverage
+
+ +
+

8Resolve 23 relative canonicals and 18 pages without one

+

Canonicals like /odoo-ia/ carry no host, so they resolve to whichever host served the page — and apex and www both answer 200. Do not touch the cross-locale canonicals; that is intentional strategy.

+
Effort Mnot scheduledmetric: canonical_not_www → 0
+
+ +

Open risks

+ + + + +
+ + +