Files
2026-08-28 10:11:11 -03:00

189 lines
16 KiB
Markdown

# 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 <slug>/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):
```js
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.