16 KiB
Opportunities Scan (post-W1..W11) — odoo-expertos
Date: 2026-05-28. Source: seo+blog opportunity sub-agent (Sonnet, WebFetch-grounded). Consumed by goals/W5b.txt, W12.txt, W13.txt — those tell the fix agents to read this file for concrete targets.
1. Top 10 AI-Search Opportunity Pages
Ranked by: "best/review/vs" query intent + existing structural strength + GSC crawl signal.
| # | URL | Current Weakness | Concrete Fix | AI-Cite |
|---|---|---|---|---|
| 1 | /odoo-hosting/odoo4projects-hosting-review-2026/ |
3,222 words, strong schema, but "847 reviews" aggregate is unsourced — fabricated, kills trust | Replace aggregate with linked G2/Capterra URL; add Capterra Odoo-category benchmark; add 40-60w TL;DR at top | 7 |
| 2 | /odoo-hosting/mejor-hosting-odoo-2026/ |
1,347 words (below blog floor 1,500); H2s declarative not question-led; no inline source attribution | Expand to 1,800+ words; convert 3 H2s to questions; one sourced stat per H2 opening sentence | 6 |
| 3 | /odoo-hosting/mejores-proveedores-hosting-odoo-2026/ |
2,775 words but "three-month evaluation by our team" has no methodology URL; pricing claims unsourced; no TL;DR | Add methodology disclosure box; link 3+ price data points to public provider pricing pages; add TL;DR capsule | 6 |
| 4 | /odoo-hosting/comparativa-precios-odoo-2026/ |
2,527 words, table present, "70% Ahorro Potencial" is an unsourced superlative (QRG flag); no visible datePublished in body | Replace 70% with a sourced TCO example (link Odoo.sh public pricing vs VPS); add visible byline + date | 6 |
| 5 | /odoo-hosting/cloudpepper-vs-odoo-sh-2026/ |
2,556 words, "2,864 Reseñas Verificadas" has no source — fabricated social proof; radar chart is D3/JS so invisible to crawlers | Delete the fabricated review count; link a G2/Capterra page; add HTML <table> fallback for the radar data |
6 |
| 6 | /odoo-hosting/opiniones-hosting-odoo-2026/ |
2,295 words; claims "2,800 opiniones" from G2/Capterra/Trustpilot with no links; Review schema present but no reviewUrl; no table |
Add 3 direct links to source platforms; populate reviewUrl on each Review item; add provider-rating comparison table |
5 |
| 7 | /odoo-hosting/odoo-vs-sap-hosting-2026/ |
2,354 words; "85% Ahorro en TCO" is the first visible stat and is unsourced; "Guía de Migración" H2 has 1-2 sentences per step | Source the TCO claim (Panorama Consulting / Gartner / SAP public pricing); expand migration H2 to 250+ words with numbered steps | 5 |
| 8 | /odoo-hosting/alternativas-odoo-sh-2026/ |
2,016 words; zero sourced stats; "0EUR Coste Migración" unattributed; ItemList schema has no url per item |
Add a source link per alternative (provider pricing page); populate ItemList url; add a direct-answer opening paragraph |
4 |
| 9 | /odoo-hosting/odoo-community-vs-enterprise-hosting-2026/ |
2,220 words; partially sourced (G2/Trustpilot); BUT "Dr. María Elena Rodríguez" author is fabricated — destroys AI citability | Replace fabricated byline per W7 pattern (use "Equipo Odoo Expertos"); add inLanguage: es to Article schema; remove "Dr." prefix |
5 |
| 10 | /odoo-ia/alternativas-odoo-ia-comparativas-2025/ |
1,949 words; "340% mejora" unattributed; first-person fabricated loss narrative ("perdí $180,000") — QRG low-trust signal; no table; no FAQ | Remove the fabricated loss narrative; cite a real third-party migration case; add comparison <table> with <thead>; add FAQPage schema |
3 |
Excluded but noted: /odoo-hosting/odoo-vs-zoho-books-hosting-2025/ — only 1,643 words + fabricated "$50,000 loss" + 120+ char title. Belongs in §2 (rewrite-from-scratch) rather than deepen-in-place.
2. Top 20 Thin-Content Rewrite Priorities
ES-root pages from gsc/crawled-not-indexed.txt. Fixing the ES canonical fixes the PT/FR duplicate signal simultaneously.
| # | URL | Current Weakness | Proposed Angle | Words | AI Query |
|---|---|---|---|---|---|
| 1 | /odoo/odoo-hosting-cloud-infraestructura-2025/ |
~610 total words; H2s are 1-2 sentences (confirmed in audit) | Definitive infra guide: RAM/CPU/disk minimums per Odoo version, provider table, cost breakdown | 1800 | "infraestructura odoo cloud 2025" |
| 2 | /odoo-hosting/hosting-odoo-gratis-gratuito-2025/ |
Crawled-not-indexed ES root (03.05.26); templated "free hosting" page | Honest free-vs-paid breakdown: what free actually gives (community trial, Odoo.sh 15-day), hard limits, when to upgrade | 1600 | "hosting odoo gratis" |
| 3 | /odoo/odoo-compras-gestion-proveedores-2025/ |
Crawled-not-indexed ES root (31.03.26); 400-word boilerplate on a high-volume module topic | Step-by-step Purchase module setup, RFQ workflow, approval rules, 3-way matching explained | 1800 | "odoo gestión de compras" |
| 4 | /odoo/odoo-argentina-implementacion-local-2025/ |
Crawled-not-indexed ES root; geo page with no local specifics | Argentina: AFIP localization, electronic invoice (ARCA), peso currency handling, local partners | 1600 | "odoo argentina implementación" |
| 5 | /odoo-hosting/odoo-vs-zoho-books-hosting-2025/ |
1,643 words, fabricated loss narrative, 120-char title, hype framing | Neutral feature/pricing comparison: Zoho Books vs Odoo for LATAM SMBs, localization + hosting flexibility | 1800 | "odoo vs zoho books" |
| 6 | /odoo-hosting/odoo-gratis-vs-pago-diferencias-2025/ |
In duplicate-canonical GSC list (FR/PT flagged); ES root likely templated | Concrete feature matrix Community vs Enterprise by module, with exact pricing from odoo.com pricelist | 1600 | "odoo gratis vs pago" |
| 7 | /odoo-ia/que-es-odoo-ia-guia-basica-2025/ |
Crawled-not-indexed ES root (27.04.26); "basic" suggests shallow intro | Structured explainer: Odoo AI features by module (ChatGPT connector, OCR, predictive reordering) + version availability table | 1800 | "qué es odoo ia" |
| 8 | /odoo-hosting/servidor-dedicado-odoo-2026/ |
Crawled-not-indexed ES root (11.04.26); 400-word skeleton | Spec guide: hardware for 50/100/500 users, Hetzner/OVH/AWS prices, PostgreSQL tuning basics | 1600 | "servidor dedicado odoo" |
| 9 | /odoo-hosting/managed-odoo-hosting-2026/ |
Crawled-not-indexed ES root (31.03.26); high commercial intent query | What "managed" means: SLA comparison table, who manages what, pricing per tier | 1600 | "managed odoo hosting" |
| 10 | /odoo-hosting/odoo-docker-hosting-2026/ |
Crawled-not-indexed ES root (04.04.26); technical, specific | Docker Compose walkthrough for Odoo 17/18, multi-container architecture, prod vs dev config | 1800 | "odoo docker hosting" |
| 11 | /odoo-hosting/hosting-odoo-mexico-2026/ |
Crawled-not-indexed ES root (01.04.26); geo page no local specifics | Mexico: SAT CFDI e-invoice, Odoo partner list MX, latency for US-border hosting | 1600 | "hosting odoo méxico" |
| 12 | /odoo-hosting/migracion-hosting-odoo-2026/ |
Crawled-not-indexed ES root (29.03.26); high commercial intent | Step-by-step migration checklist: backup, filestore export, DB restore, domain cutover, post-migration validation | 1800 | "migración hosting odoo" |
| 13 | /odoo-hosting/vps-odoo-hosting-2026/ |
Crawled-not-indexed ES root (31.03.26); generic VPS page | VPS sizing by user count, Ubuntu 22.04 recs, Nginx reverse proxy, SSL config | 1800 | "vps odoo hosting" |
| 14 | /odoo-hosting/hosting-hibrido-odoo-2026/ |
Crawled-not-indexed ES root (31.03.26); niche but uncontested | Define hybrid: on-prem DB + cloud app tier; regulated-data use case; cost model | 1500 | "hosting híbrido odoo" |
| 15 | /odoo-hosting/hosting-odoo-argentina-2026/ |
Crawled-not-indexed ES root (31.03.26) | Argentina: data residency, peso invoicing, local providers (Cloudflare LatAm PoP), ARBA localization | 1600 | "hosting odoo argentina" |
| 16 | /odoo-hosting/hosting-odoo-sin-tarjeta-2026/ |
Crawled-not-indexed ES root (01.04.26); pure trial-intent | List every free-trial option (Odoo.sh 15-day, Online demo, Odoo4projects trial), limits, upgrade paths | 1400 | "hosting odoo sin tarjeta" |
| 17 | /odoo-hosting/hosting-odoo-economico-2026/ |
Crawled-not-indexed DE/ES variants; price-sensitive buyer | Tiered buyer guide: <30€, 30-80€, 80-200€, named providers per tier | 1600 | "hosting odoo económico" |
| 18 | /odoo-hosting/odoo-enterprise-hosting-2026/ |
Crawled-not-indexed ES/EN/DE/FR variants; high-value Enterprise-specific intent | Enterprise hosting requirements: min SLA, dedicated support, GDPR, SAP migration path, price range | 1800 | "odoo enterprise hosting" |
| 19 | /odoo-hosting/hosting-odoo-mensual-2026/ |
Crawled-not-indexed across 5 language variants | Monthly vs annual for 8 providers, contract flexibility, what's included, cancellation terms | 1400 | "hosting odoo mensual" |
| 20 | /odoo-hosting/odoo-on-premise-2026/ |
Crawled-not-indexed FR/DE variants; top-of-funnel decision | 3-year TCO model: on-prem (hardware + sysadmin + upgrades) vs managed cloud, with decision flowchart | 1800 | "odoo on premise vs cloud" |
3. Content-Derived Unique Title + Meta Generator (kills the 194 duplicate titles properly)
Why W5 did not solve this
W5 appended slug + lang as a suffix. The 194 duplicates remain because the underlying templated stem was identical across pages — only the appended suffix changed. Two pages with title stem "Guía Odoo Hosting" become "Guía Odoo Hosting — slug-A | es" and "Guía Odoo Hosting — slug-A | en" which are still semantically duplicate (and SERP-truncated).
The rule (run as a Node.js or Python codemod over all /index.html)
Pseudocode:
for each file in glob("**/index.html"):
dom = parse(file)
h1_text = dom.querySelector("h1").innerText.trim()
first_h2 = dom.querySelector("article h2, main h2").innerText.trim()
sentences = extractSentences(dom.querySelector("article p, main p").innerText)
sent1 = sentences[0]
sent2 = sentences[1]
# title (50-60 chars)
h1_short = truncateAtWord(h1_text, 40)
h2_tag = extractNounPhrase(first_h2, maxChars=15)
skipTags = {"Contenido","Resumen","Introducción"}
if h2_tag and h2_tag not in skipTags:
candidate = f"{h1_short}: {h2_tag} | Odoo Expertos"
else:
candidate = f"{h1_short} | Odoo Expertos"
title = enforceMaxChars(candidate, 60)
# meta (140-160 chars)
combined = (sent1 + " " + sent2).strip()
meta = combined if len(combined) <= 160 else (truncateAtWord(sent1, 140) + ".")
# uniqueness gate
if title in TITLE_REGISTRY:
disambiguator = firstUniqueNoun(sent2, exclude=title)
title = enforceMaxChars(f"{h1_short} {disambiguator} | Odoo Expertos", 60)
TITLE_REGISTRY.add(title); META_REGISTRY.add(meta)
dom.setTitle(title); dom.setMeta("description", meta)
writeFile(file, dom.serialize())
Key regex for first body paragraph (excludes boilerplate):
const bodyP = Array.from(document.querySelectorAll('article p, main > p, .content p'))
.filter(p => p.closest('nav,header,.toc,.breadcrumb,script,style') === null)
.map(p => p.innerText.trim())
.filter(p => p.length > 60)[0] || '';
5 worked examples
Ex 1 — /odoo-hosting/mejor-hosting-odoo-2026/
- New title (55c):
Mejor Hosting Odoo 2026: Panorama | Odoo Expertos - New meta (158c):
El mercado de hosting para Odoo evolucionó en 2026. Con Odoo 18 e IA integrada, las opciones van desde 29€/mes hasta enterprise gestionado.
Ex 2 — /odoo-hosting/cloudpepper-vs-odoo-sh-2026/
- New title (58c):
Cloudpepper vs Odoo.sh 2026: Precios | Odoo Expertos - New meta (155c):
La elección entre Cloudpepper y Odoo.sh determina costos y funcionalidad de tu Odoo. Comparamos precios, rendimiento y soporte para empresas en 2026.
Ex 3 — /odoo-hosting/odoo-community-vs-enterprise-hosting-2026/
- New title (60c):
Odoo Community vs Enterprise: Diferencias Clave 2026 - New meta (148c):
La decisión entre Community y Enterprise afecta costos de hosting, RAM necesaria y capacidades operativas. Guía con tabla de funciones y precios 2026.
Ex 4 — /odoo-hosting/comparativa-precios-odoo-2026/
- New title (57c):
Precios Hosting Odoo 2026: 15 Proveedores | Expertos - New meta (152c):
Desde 12€/mes en VPS hasta 500€ en enterprise: comparamos precios reales de 15 proveedores de hosting Odoo en 2026 con análisis de costos ocultos y TCO.
Ex 5 — /odoo-hosting/odoo4projects-hosting-review-2026/
- New title (55c):
Odoo4projects Review 2026: Análisis | Odoo Expertos - New meta (156c):
Odoo4projects: desde 29€/mes, usuarios ilimitados, IA integrada y soporte en español. Review completa con precios, pros/contras y comparación con Odoo.sh.
4. Cluster grouping for the 13 existing vs/review slugs
Cluster A — "Best Hosting Picker" (commercial / navigational)
Pillar: /odoo-hosting/mejor-hosting-odoo-2026/
Targets: "mejor hosting odoo", "hosting odoo recomendado", "qué hosting usar para odoo"
Spokes (exist, need deepening):
/odoo-hosting/mejores-proveedores-hosting-odoo-2026/(ranked list)/odoo-hosting/mejores-proveedores-hosting-odoo-2025/(historical — see §5: 301 to 2026 or archive)/odoo-hosting/opiniones-hosting-odoo-2026/(social proof)/odoo-hosting/odoo4projects-hosting-review-2026/(deep-dive single provider)/odoo-hosting/comparativa-precios-odoo-2026/(price angle)
Pillar links to all 5 spokes; each spoke links back to pillar + 2 siblings.
Cluster B — "Head-to-Head Comparisons" (commercial / decision)
Pillar: /odoo-hosting/odoo-community-vs-enterprise-hosting-2026/
Targets: "odoo community vs enterprise", "qué edición odoo elegir"
Spokes:
/odoo-hosting/odoo-vs-sap-hosting-2026/(cross-ERP)/odoo-hosting/odoo-vs-zoho-books-hosting-2025/(cross-category)/odoo-hosting/cloudpepper-vs-odoo-sh-2026/(provider-vs-provider)/odoo-hosting/odoo-gratis-vs-pago-diferencias-2025/(free vs paid licensing)
Pillar choice rationale: users can't choose a provider before they've chosen an edition.
Cluster C — "Alternatives & Escape Routes" (informational / commercial)
Pillar: /odoo-hosting/alternativas-odoo-sh-2026/
Targets: "alternativas odoo sh", "opciones hosting odoo"
Spokes:
/odoo-ia/alternativas-odoo-ia-comparativas-2025/(AI-specific alternatives; dual-link to Cluster B is fine)/odoo-hosting/odoo-gratis-vs-pago-diferencias-2025/(shared with Cluster B)
Thinner cluster — candidates to add once content quality is up: "odoo sh review 2026", "self-hosted odoo vs odoo sh", "cloudpepper review 2026" (none exist as ES-root yet).
5. Cannibalization flags
Direct cannibalization to consolidate or 301:
-
/odoo-hosting/mejores-proveedores-hosting-odoo-2026/vs…-2025/— same query, year-separated; both crawled-not-indexed. Action: keep 2026, 301 the 2025 slug to 2026, archive 2025 content as a "market evolution" section inside the 2026 page. -
/odoo-hosting/mejor-hosting-odoo-2026/vs/odoo-hosting/mejores-proveedores-hosting-odoo-2026/— heavy SERP overlap; both crawled-not-indexed. Action: explicit differentiation — "mejor" = single buyer's-choice recommendation; "mejores-proveedores" = ranked list with methodology. Make the pillar/spoke link relationship explicit. -
/odoo-hosting/opiniones-hosting-odoo-2026/vs review sections of…/odoo4projects-hosting-review-2026/— no true cannibalization, but the opiniones page must link to the review page for every provider it mentions (currently zero cross-links). -
/odoo-hosting/odoo-gratis-vs-pago-diferencias-2025/— hosting-located but the query is also served by licensing content in/odoo/. Action: narrow this page to hosting cost implications only; move general licensing differences to an/odoo/article with a cross-link. -
/odoo-ia/alternativas-odoo-ia-comparativas-2025/— once rewritten (§2 #10), scope strictly to AI-specific alternatives (SAP AI, MS Dynamics AI), not general Odoo alternatives — otherwise will compete with Cluster B pillar once that gains authority.