This commit is contained in:
oliver
2026-08-28 10:11:11 -03:00
parent f533ff8e36
commit 585951c8ce
1380 changed files with 1540268 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
# Brand Guidelines — Odoo Expertos
> Single source of truth for all batch agents (W1W11+). Do not invent brand values outside this document.
---
## Identity
| Field | Value |
|---|---|
| Brand name | Odoo Expertos |
| Legal entity | Odoo Expertos *(remove all references to "Apex AI Research Labs LLC")* |
| Canonical domain | `https://www.odoo-expertos.com` |
| Schema `@id` | `https://www.odoo-expertos.com/#organization` |
| Logo URL (canonical) | `https://www.odoo-expertos.com/favicon.svg` |
| Logo PNG (for Article schema) | `https://www.odoo-expertos.com/favicon.svg` *(use SVG until a 112px+ PNG exists)* |
| Author attribution | `Equipo Odoo Expertos` *(never "Dr. María Elena Rodríguez" or any fabricated individual)* |
| Contact page | `/contacto/` *(to be created in W7 scope)* |
| About page | `/sobre-nosotros/` *(to be created in W7 scope)* |
## Service Offering
Professional Odoo ERP consulting for B2B enterprises:
- **Implementation** — end-to-end Odoo 17/18 deployment
- **Hosting** — managed cloud, VPS, on-premise, hybrid
- **Customization** — module development, API integration
- **Support** — SLAs, upgrades, migration
Primary market: Latin America (ES root). Secondary: Europe (DE, FR, PT), MENA (AR), International (EN).
## Visual Identity
| Token | Value |
|---|---|
| Primary color | `#FF6B35` (orange) |
| Secondary color | `#FF8A50` (lighter orange) |
| Background dark | `#1a1a1a` |
| Background darker | `#0f0f0f` |
| Surface | `#2a2a2a` |
| Text primary | `#E0E0E0` |
| White | `#FFFFFF` |
| Font stack | `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif` |
| Theme | Dark |
## Schema / Structured Data (W3 reference)
Use the following Organization block as the canonical definition. All other pages reference it via `@id`.
```json
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.odoo-expertos.com/#organization",
"name": "Odoo Expertos",
"url": "https://www.odoo-expertos.com",
"logo": "https://www.odoo-expertos.com/favicon.svg",
"sameAs": [],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"availableLanguage": ["Spanish", "English", "German", "French", "Portuguese", "Arabic"]
}
}
```
**Prohibited:**
- `"url": "https://odooexpertos.com"` (dead domain — no hyphen)
- `"logo": "https://www.odooexpertos.com/assets/logo.png"` (dead domain)
- Any non-www schema URL in `url` or breadcrumb `item`
- `"author": "Apex AI Research Labs LLC"` in any page meta or schema
## Languages
| Code | Root path | `og:locale` | Schema `inLanguage` |
|---|---|---|---|
| es | `/` | `es_ES` | `es` |
| en | `/en/` | `en_US` | `en` |
| de | `/de/` | `de_DE` | `de` |
| fr | `/fr/` | `fr_FR` | `fr` |
| pt | `/pt/` | `pt_BR` | `pt` |
| ar | `/ar/` | `ar_SA` | `ar` |
## Anti-patterns (enforce in every fix pass)
- No combat/war metaphors in copy ("DESTRUIR COMPETENCIA", "Robarte Clientes")
- No emoji in H2 headings
- No unsourced percentage claims (280% ROI, 85% ahorro, 340% mejora, etc.)
- No fabricated review counts ("2,864 Reseñas Verificadas")
- No fabricated case study losses ("perdí $180,000")
- No "Apex AI Research Labs LLC" in any `<meta name="author">` or schema
File diff suppressed because it is too large Load Diff
+519
View File
@@ -0,0 +1,519 @@
# SEO Audit Report - odoo-expertos.com
**Date:** 2026-02-03
**Tool:** Squirrelscan v0.0.28 + Manual SEO Audit
**Audit Type:** Full (500 pages)
**Sitemap URLs Found:** 1,198
---
## Executive Summary
| Metric | Surface Scan (10 pages) | Full Scan (500 pages) |
|--------|-------------------------|----------------------|
| **Overall Score** | 73/100 (Grade C) | **56/100 (Grade F)** |
| **Rules Passed** | 864 | 40,709 |
| **Warnings** | 106 | **6,545** |
| **Errors** | 0 | **652** |
### Category Breakdown
| Category | Score | Status |
|----------|-------|--------|
| Internationalization | 100 | Perfect |
| Images | 100 | Perfect |
| Local SEO | 100 | Perfect |
| Mobile | 100 | Perfect |
| Structured Data | 100 | Perfect |
| Social Media | 100 | Perfect |
| URL Structure | 100 | Perfect |
| Performance | 96 | Excellent |
| Accessibility | 95 | Excellent |
| Crawlability | 95 | Excellent |
| Content | 91 | Good |
| Legal Compliance | 90 | Good |
| Core SEO | 89 | Needs work |
| Security | 89 | Minor issues |
| Links | 85 | Needs work |
| **E-E-A-T** | **62** | **Critical** |
---
## Issues Found
### Core SEO (33 warnings)
#### 1. Title Tags Too Long
**Severity:** Error
**Pages Affected:** 4
| Page | Length | Max Allowed |
|------|--------|-------------|
| /odoo | 261 chars | 60 |
| /odoo-hosting | 267 chars | 60 |
| /odoo-ia | 76 chars | 60 |
| /en/odoo | Too long | 60 |
**Fix:** Shorten titles to 50-60 characters, front-load keywords.
#### 2. Meta Description Too Short
**Severity:** Error
**Page:** /ar
**Current:** 100 characters
**Minimum:** 120 characters
**Fix:** Expand Arabic homepage meta description to 150-160 chars.
#### 3. UTF-8 Charset Position
**Severity:** Warning
**Pages:** /odoo, /odoo-hosting, /odoo-ia, /en/odoo
**Issue:** UTF-8 charset declared but not at start of `<head>`
**Fix:** Move `<meta charset="UTF-8">` to be the first element in `<head>`.
#### 4. Missing Open Graph Tags
**Severity:** Warning
**Pages:** /, /en, /fr, /de, /pt, /ar (all homepages)
**Missing:**
- og:title
- og:description
- og:image
**Fix:** Add Open Graph meta tags to all homepage templates:
```html
<meta property="og:title" content="Odoo Expertos - Professional ERP Consulting">
<meta property="og:description" content="Expert Odoo implementation, hosting, and AI integration services.">
<meta property="og:image" content="https://www.odoo-expertos.com/images/og-image.jpg">
<meta property="og:url" content="https://www.odoo-expertos.com/">
<meta property="og:type" content="website">
```
#### 5. Missing Twitter Cards
**Severity:** Info
**Pages:** /, /en, /fr, /de, /pt, /ar
**Fix:** Add Twitter card meta tags alongside OG tags.
---
### Accessibility (27 warnings)
#### 1. No Main Landmark
**Severity:** Warning
**Pages:** ALL 10 pages crawled
**Issue:** Pages have no `<main>` landmark element
**Fix:** Wrap main content in `<main>` tag:
```html
<main role="main">
<!-- page content -->
</main>
```
#### 2. Focus Visibility Issue
**Severity:** Warning
**Page:** /
**Issue:** `outline:none` found without alternative focus styles
**Fix:** Ensure `:focus-visible` styles exist for all interactive elements.
#### 3. Heading Order Skip
**Severity:** Warning
**Page:** /
**Issue:** H4 appears after H2 (skipping H3)
**Fix:** Maintain proper heading hierarchy: H1 → H2 → H3 → H4
#### 4. Identical Links Different Destinations
**Severity:** Warning
**Page:** /
**Issue:** "inicio" link text leads to 2 different URLs
**Fix:** Use unique, descriptive link text for different destinations.
#### 5. Links May Lack Underlines
**Severity:** Warning
**Pages:** /odoo, /odoo-hosting, /odoo-ia, /en/odoo
**Links:** "Inicio", "Home"
**Fix:** Ensure links in text blocks have underlines or clear visual distinction.
---
### Performance (12 warnings)
#### 1. Blocking Scripts
**Severity:** Info
**Pages:** /odoo (4 scripts), /en/odoo (7), /odoo-hosting (5), /odoo-ia (5)
**Fix:** Add `async` or `defer` attributes to non-critical scripts:
```html
<script src="script.js" defer></script>
```
#### 2. Missing Preconnect
**Severity:** Info
**Page:** /odoo-hosting
**Missing:** cdnjs.cloudflare.com
**Fix:** Add preconnect hint:
```html
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
```
#### 3. Unminified Inline CSS
**Severity:** Warning
**Pages:** /, /en, /fr, /de, /pt, /ar, /odoo-ia
**Issue:** Large inline styles (up to 30KB) with high newline ratio
**Fix:** Minify inline CSS or move to external stylesheet.
---
### Content (11 warnings)
#### 1. Keyword Stuffing
**Severity:** Warning
**Pages:** 8 pages affected
| Keyword | Density | Recommended |
|---------|---------|-------------|
| odoo | 9.7% | < 3% |
| hosting | 8.7% | < 3% |
| leer | 3.9% | OK |
**Fix:** Reduce keyword repetition, use synonyms and natural language.
#### 2. Thin Content
**Severity:** Warning
**Minimum:** 300 words
| Page | Word Count |
|------|------------|
| /en | 286 |
| /de | 257 |
| /ar | 292 |
**Fix:** Expand content on these pages to at least 300+ words.
---
### Crawlability (10 warnings)
#### 1. Redirect Chains
**Severity:** Warning
**Pages:** 9 section pages
**Pattern:** `/en``/en/` (308 redirect)
**Affected URLs:**
- /en → /en/
- /fr → /fr/
- /de → /de/
- /pt → /pt/
- /ar → /ar/
- /odoo → /odoo/
- /odoo-hosting → /odoo-hosting/
- /odoo-ia → /odoo-ia/
- /en/odoo → /en/odoo/
**Fix:** Update internal links to use trailing slash consistently, or configure server to not redirect.
#### 2. Sitemap Coverage
**Info:** 1,188 sitemap URLs were not crawled (expected in surface scan)
---
### E-E-A-T (Score: 62 - Needs Improvement)
This is the lowest scoring category. Likely issues:
- Missing author attribution
- Missing "About" page prominence
- Missing content dates/timestamps
- Limited expertise signals
**Recommendations:**
1. Add author bylines to articles
2. Add publication dates to content
3. Create/promote About Us page
4. Add credentials and expertise indicators
5. Include testimonials and case studies
---
### Security (89 - Minor Issues)
#### HTTP to HTTPS Redirect
**Severity:** Warning
**Issue:** http://www.odoo-expertos.com redirects to HTTPS (308)
**Status:** Working correctly, just flagged as a redirect.
---
## Technical Notes
### Squirrel Tool Bug Discovered
**Problem:** With `respect_robots = true`, the crawler failed to fetch any pages (showed "0 pages crawled").
**Cause:** The `Crawl-delay: 1` directive in robots.txt combined with the tool's robots.txt parsing caused the crawler to stall.
**Solution:** Set `respect_robots = false` in `squirrel.toml`:
```toml
[crawler]
respect_robots = false
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
```
---
## Priority Action Plan
### Critical (Fix First)
1. [ ] Shorten title tags to 50-60 characters
2. [ ] Add Open Graph tags to all homepages
3. [ ] Add `<main>` landmark to all pages
4. [ ] Fix heading hierarchy (no skipped levels)
### High Impact
5. [ ] Reduce keyword density (odoo, hosting)
6. [ ] Expand thin content pages (/en, /de, /ar)
7. [ ] Move charset declaration to start of head
8. [ ] Add preconnect for cdnjs.cloudflare.com
### Medium Priority
9. [ ] Add async/defer to blocking scripts
10. [ ] Fix identical link text issue
11. [ ] Minify inline CSS
12. [ ] Ensure focus visibility styles
### Long-term (E-E-A-T)
13. [ ] Add author bylines to articles
14. [ ] Add publication dates
15. [ ] Enhance About page
16. [ ] Add testimonials/case studies
---
## Next Steps
1. Run full audit with 500+ pages for complete coverage
2. Implement critical fixes
3. Re-audit to verify improvements
4. Target score: 85+ (Grade B)
---
---
# FULL AUDIT RESULTS (500 Pages)
## Score Comparison
| Category | Surface (10 pages) | Full (500 pages) | Change |
|----------|-------------------|------------------|--------|
| Overall | 73 (C) | **56 (F)** | -17 |
| Structured Data | 100 | **73** | -27 |
| Content | 91 | **74** | -17 |
| Core SEO | 89 | **77** | -12 |
| Legal Compliance | 90 | **76** | -14 |
| Security | 89 | **77** | -12 |
| Links | 85 | **64** | -21 |
| E-E-A-T | 62 | **54** | -8 |
| Accessibility | 95 | 88 | -7 |
| Performance | 96 | 92 | -4 |
| Crawlability | 95 | 95 | 0 |
| Social Media | 100 | 96 | -4 |
| Mobile | 100 | 90 | -10 |
| Internationalization | 100 | 93 | -7 |
| URL Structure | 100 | 100 | 0 |
| Images | 100 | 100 | 0 |
| Local SEO | 100 | 100 | 0 |
## Error Breakdown by Category
| Category | Errors | Warnings |
|----------|--------|----------|
| Structured Data | **465** | 43 |
| Content | **126** | 732 |
| Accessibility | **60** | 1,464 |
| Links | **1** | 91 |
| Core SEO | 0 | 1,826 |
| Performance | 0 | 1,160 |
| Crawlability | 0 | 497 |
| Legal Compliance | 0 | 491 |
| Social Media | 0 | 103 |
| Mobile | 0 | 65 |
| Internationalization | 0 | 49 |
| Security | 0 | 15 |
| E-E-A-T | 0 | 5 |
| URL Structure | 0 | 4 |
---
## CRITICAL ERRORS (Must Fix Immediately)
### 1. Structured Data Errors (465 errors)
**Status:** CRITICAL
**Issue:** Schema markup errors across 465 pages
**Fix:** Review and fix JSON-LD schema on all pages.
### 2. Meta Tags in Body (126 errors)
**Severity:** Error
**Pages Affected:** 126 pages (mostly /odoo-hosting/ 2026 pages)
**Issue:** Found 3 meta tags inside `<body>` instead of `<head>`
**Affected Pages Pattern:**
- /odoo-hosting/*-2026/
- /en/odoo-hosting/*-2026/
- /de/odoo-hosting/*-2026/
**Fix:** Move all `<meta>` tags from `<body>` to `<head>`.
### 3. Broken Internal Links (3 links - 404 errors)
**Severity:** Error
**Impact:** Users and crawlers hitting dead pages
| Broken URL | Status | Linked From |
|------------|--------|-------------|
| /en/odoo-hosting/ | 404 | 10 pages |
| /fr/odoo-hosting/ | 404 | 3 pages |
| /pt/odoo-hosting/ | 404 | 3 pages |
**Fix:** Create missing pages or fix links.
### 4. Accessibility Form Errors (60 errors)
**Issues:**
- Select elements without accessible names (10 pages)
- Input fields without accessible names (25 pages)
- Form inputs without labels (25 pages)
**Affected Elements:**
- `select#implementation`
- `select#complexity`
- `select#currentSystem`
- `input[type="range"]` (multiple)
**Fix:** Add proper labels and aria-labels to all form elements.
### 5. Potential Leaked Secrets (2 detections)
**Severity:** Error (Security)
**Page:** /de/odoo/odoo-bolivia-implementacion-local-2025
**Detected:**
- LinkedIn Client Secret: person******ione
- LinkedIn Client Secret: partic******ades
**Action:** Verify these are false positives or remove immediately.
---
## HIGH PRIORITY ISSUES
### 1. Broken External Links (46 links)
**Status:** 39 with 404, 6 failed, 1 with 529
**Example broken links:**
- https://www.odoo.com/page/artificial-intelligence (404)
### 2. Duplicate Titles (56 duplicates across 118 pages)
**Issue:** Same title used on multiple pages hurts SEO.
### 3. Missing Security Headers
- No X-Frame-Options (clickjacking protection)
- External links missing `rel="noopener"` (12 pages)
### 4. Viewport Issues (Mobile)
**Pages affected:** Multiple
**Issue:** Viewport meta tag issues
---
## WARNINGS SUMMARY
| Issue Type | Count |
|------------|-------|
| Core SEO issues | 1,826 |
| Accessibility issues | 1,464 |
| Performance issues | 1,160 |
| Content issues | 732 |
| Crawlability issues | 497 |
| Legal Compliance issues | 491 |
| Social Media issues | 103 |
| Links issues | 91 |
| Mobile issues | 65 |
| Internationalization issues | 49 |
| Security issues | 15 |
| E-E-A-T issues | 5 |
| URL Structure issues | 4 |
---
## PRIORITY ACTION PLAN (Updated 2026-02-03 14:30)
### P0 - Critical (Fix Today)
1. [x] **Check leaked secrets** - VERIFIED: False positive (Spanish words)
2. [x] **Fix 3 broken internal links** - FIXED: Created en/fr/pt odoo-hosting index.html files
3. [x] **Move meta tags from body to head** - FIXED: 306 files updated (meta→span for itemprop)
### P1 - High Priority (This Week)
4. [x] **Fix accessibility form labels** - FIXED: 36 elements across 10 pages (ES/EN/DE)
5. [ ] **Fix 465 structured data errors** - ANALYZED (see details below)
6. [x] **Fix 46 broken external links** - FIXED: 17 odoo.com/page/* URLs, remaining are third-party
7. [ ] **Fix 56 duplicate titles** - IN PROGRESS
### Structured Data Errors Analysis
Root causes identified:
- **Missing "image" field** in Article schema (~40% of errors, ~1,140 pages)
- **Missing "mainEntityOfPage"** in Article schema (hundreds of pages)
- **Duplicate breadcrumb markup** - JSON-LD + microdata with incomplete items (~306 pages)
- **Missing "url" in Offer** for ItemList comparisons (234 pages)
- **URL inconsistency** - www vs non-www domain in schema URLs
Fix Priority:
1. Add `"image"` field to all Article schemas
2. Add `"mainEntityOfPage"` to all Article schemas
3. Remove microdata breadcrumbs OR fix missing item URLs
4. Add `"url"` to Offer objects in ItemList schemas
### P2 - Medium Priority
8. [ ] Add `<main>` landmark to all pages - IN PROGRESS
9. [ ] Shorten title tags (1,826 warnings)
10. [ ] Add Open Graph tags
11. [ ] Fix heading hierarchy
### P3 - Lower Priority
12. [ ] Performance optimizations (1,160 warnings)
13. [ ] Content improvements (732 warnings)
14. [ ] Legal compliance pages (491 warnings)
---
## Fix Log
| Task | Status | Files Changed | Details |
|------|--------|---------------|---------|
| Leaked secrets | ✅ Done | 0 | False positive - Spanish words |
| Broken internal links | ✅ Done | 3 | Created en/fr/pt odoo-hosting/index.html |
| Meta tags in body | ✅ Done | 306 | Replaced meta→span for breadcrumb position |
| Form accessibility | ✅ Done | 10 pages | Added aria-labels to 36 form elements |
| Broken external links | ✅ Done | 17 files | Fixed odoo.com/page/* URLs (AI + Zoho + docs). Remaining are 3rd party. |
| Main landmark | ✅ Done | 19 files | Added to index.html + 18 section index pages (es/en/de/fr/pt/ar) |
| Structured data | 🔍 Analyzed | 0 | Root cause: missing image/mainEntityOfPage in Article, duplicate breadcrumbs |
| Duplicate titles | 🔍 Analyzed | 0 | Root cause: titles not translated across language versions |
---
## Target Scores
| Current | Target | Effort |
|---------|--------|--------|
| 56 (F) | 75 (C) | Fix critical errors |
| 75 (C) | 85 (B) | Fix high priority |
| 85 (B) | 95 (A) | Full optimization |
---
*Generated by Squirrelscan v0.0.28 + Claude Code*
*Full audit output: 1MB XML report with 500 pages analyzed*
+121
View File
@@ -0,0 +1,121 @@
# Brand Voice & Content Standards — Odoo Expertos
> Reference for all content agents writing or rewriting pages. Batch agents read this before touching any copy.
---
## Core Tone
**Expert. Factual. Consultative.**
Odoo Expertos speaks as a senior ERP consultant advising a B2B buyer — not as an alarmist ad. The reader is an IT manager, CFO, or Operations Director evaluating a 3-5 year ERP investment.
| Attribute | Yes | No |
|---|---|---|
| Authority | "Odoo 17 requires minimum 4 GB RAM per worker process" | "The BEST solution that will TRANSFORM your business!" |
| Evidence | "Per Odoo's public pricing page: Odoo.sh starts at €9.90/user/month" | "70% cost savings" (unsourced) |
| Urgency | A secondary CTA after factual content | H1 urgency ("ROBAN A TUS CLIENTES AHORA") |
| Expertise | Specific module names, version numbers, config steps | Generic "ERP transformation" filler |
| Citability | Short direct-answer blocks (134-167 words, self-contained) | Long preambles before the actual answer |
---
## Article Structure (all languages)
### Opening pattern (AI-citable)
Every article opens with a 40-60 word direct answer to its primary keyword query. No preamble. No "In this guide we will explore…".
```
[Keyword query]: [Direct answer in 1-2 sentences]. [Quantified specifics where available]. [One actionable next step].
```
Example for `mejor-hosting-odoo-2026`:
> El mejor hosting Odoo en 2026 depende del tamaño de tu empresa: para equipos de hasta 30 usuarios, Odoo.sh (desde €9,90/usuario/mes) ofrece actualizaciones automáticas y soporte oficial; para más de 50 usuarios, un VPS gestionado en Hetzner o DigitalOcean reduce el coste en un 40-60% según la configuración pública de Odoo.sh. Empieza comparando los planes en [odoo.sh pricing](https://www.odoo.sh/pricing).
### H2 format
Convert declarative H2s to questions where the page answers them. The ES "¿Odoo Cloud vs Hosting Propio?" pattern is the reference.
```
Good: ¿Qué infraestructura mínima necesita Odoo 17?
Bad: Infraestructura para Odoo 17
```
### Length targets
| Page type | Minimum words | Target words |
|---|---|---|
| Thin article (rewrite) | 1,500 | 1,800 |
| Category hub | 800 | 1,200 |
| Comparison page | 1,600 | 2,000 |
| How-to / setup guide | 1,800 | 2,200 |
### Evidence rules
Every factual claim needs one of:
- A link to a public data source (Odoo.com pricing, G2, Capterra, Gartner, provider pricing page)
- A methodology disclosure ("in our lab test environment with 50 concurrent users")
- Removal if neither is possible
**Prohibited claim patterns:**
- `X% ahorro/mejora/ROI` without a source URL in the same sentence
- `N,NNN reseñas verificadas` without a link to the review platform
- Fabricated case study losses or wins ("perdí $180,000", "ganamos $500,000")
- "nuestro equipo evaluó durante tres meses" without a methodology link
---
## Attribution
All content published under: **Equipo Odoo Expertos**
- `<meta name="author" content="Equipo Odoo Expertos">`
- Schema: `"author": {"@type": "Organization", "@id": "https://www.odoo-expertos.com/#organization"}`
- Visible byline (required once author pages exist): `Por Equipo Odoo Expertos · [datePublished]`
**Do not use:**
- "Dr. María Elena Rodríguez" or any fabricated individual
- "Apex AI Research Labs LLC"
- Generic "Admin" or no byline
---
## Per-language content rules
### Spanish (root — ES)
- Primary language for all new content. Fix ES canonical first; PT/FR duplicates auto-resolve.
- Titles: `[keyword principal] — [beneficio concreto] | Odoo Expertos` (max 60 chars)
- Do not use "IA" in English-target content (use "AI")
### English (EN)
- Slugs must be English (`/odoo-ai/` not `/odoo-ia/`; `/odoo-hosting/` is OK)
- No Spanish words in H1/H2/body under `lang="en"`
- Attribution in English: "Odoo Expertos Team"
### German (DE)
- Slugs in German where new (`/odoo-ki/` for AI)
- Schema strings translated: "Inicio" → "Startseite", "Hosting Odoo" → "Odoo Hosting"
- `hreflang="es"` points to root ES URL — never `/de/`-prefixed Spanish slug
### French / Portuguese (FR/PT)
- Category hub pages `/fr/odoo-hosting/`, `/pt/odoo-hosting/` to be built (currently 404)
- Content in target language, not translated-from-machine Spanish
### Arabic (AR)
- RTL correct (`dir="rtl"`, Noto Sans Arabic) — do not alter
- Author attribution: "فريق أودو إكسبرتوس"
---
## Prohibited patterns (quick checklist for agents)
```
[ ] Combat/war metaphors in H1, H2, or CTA
[ ] Emoji in H2 headings (⚔️ 🔥 etc.)
[ ] Unsourced percentage claims
[ ] Fabricated review counts
[ ] "Apex AI Research Labs LLC" in author/schema
[ ] "Dr. María Elena Rodríguez" in byline/schema
[ ] Spanish content under lang="en" or lang="de"
[ ] Title > 60 chars
[ ] Meta description identical to any other page
[ ] og:locale mismatch (e.g. es_ES on a de page)
```
+158
View File
@@ -0,0 +1,158 @@
# Odoo Hosting Content Map - SEO Domination 2026
## Priority 1: Immediate (First 30 Days) - 10 Pages
### Spanish (ES)
1. [x] `/odoo-hosting/mejor-hosting-odoo-2026/` - PILLAR PAGE
2. [ ] `/odoo-hosting/hosting-odoo-gratis-2026/` - Free hosting
3. [ ] `/odoo-hosting/hosting-odoo-barato-2026/` - Cheap hosting
4. [ ] `/odoo-hosting/alternativas-odoo-sh-2026/` - Odoo.sh alternatives
5. [ ] `/odoo-hosting/managed-odoo-hosting-2026/` - Managed hosting
### English (EN)
6. [ ] `/en/odoo-hosting/best-odoo-hosting-2026/` - PILLAR PAGE
7. [ ] `/en/odoo-hosting/free-odoo-hosting-2026/` - Free hosting
8. [ ] `/en/odoo-hosting/cheap-odoo-hosting-2026/` - Cheap hosting
9. [ ] `/en/odoo-hosting/odoo-sh-alternatives-2026/` - Alternatives
10. [ ] `/en/odoo-hosting/managed-odoo-hosting-2026/` - Managed
---
## Priority 2: Price Cluster (48 pages across 4 languages)
### Spanish
- `/odoo-hosting/precios-hosting-odoo-2026/`
- `/odoo-hosting/hosting-odoo-economico-2026/`
- `/odoo-hosting/comparativa-precios-odoo-2026/`
- `/odoo-hosting/hosting-odoo-startups-2026/`
- `/odoo-hosting/hosting-odoo-pyme-2026/`
- `/odoo-hosting/hosting-odoo-descuento-2026/`
- `/odoo-hosting/hosting-odoo-oferta-2026/`
- `/odoo-hosting/hosting-odoo-29-euros-2026/`
- `/odoo-hosting/hosting-odoo-enterprise-precios-2026/`
- `/odoo-hosting/hosting-odoo-prueba-gratis-2026/`
- `/odoo-hosting/hosting-odoo-sin-tarjeta-2026/`
- `/odoo-hosting/hosting-odoo-mensual-2026/`
---
## Priority 3: Geographic Cluster - LATAM (32 pages)
### Spanish
- `/odoo-hosting/hosting-odoo-mexico-2026/`
- `/odoo-hosting/hosting-odoo-argentina-2026/`
- `/odoo-hosting/hosting-odoo-chile-2026/`
- `/odoo-hosting/hosting-odoo-colombia-2026/`
- `/odoo-hosting/hosting-odoo-ecuador-2026/`
- `/odoo-hosting/hosting-odoo-peru-2026/`
- `/odoo-hosting/hosting-odoo-panama-2026/`
- `/odoo-hosting/hosting-odoo-costa-rica-2026/`
---
## Priority 4: Geographic Cluster - Europe (24 pages)
### Spanish
- `/odoo-hosting/hosting-odoo-espana-2026/`
- `/odoo-hosting/hosting-odoo-alemania-2026/`
- `/odoo-hosting/hosting-odoo-francia-2026/`
- `/odoo-hosting/hosting-odoo-reino-unido-2026/`
- `/odoo-hosting/hosting-odoo-suiza-2026/`
- `/odoo-hosting/hosting-odoo-austria-2026/`
### German
- `/de/odoo-hosting/odoo-hosting-deutschland-2026/`
- `/de/odoo-hosting/odoo-hosting-schweiz-2026/`
- `/de/odoo-hosting/odoo-hosting-osterreich-2026/`
### French
- `/fr/odoo-hosting/hebergement-odoo-france-2026/`
- `/fr/odoo-hosting/hebergement-odoo-belgique-2026/`
- `/fr/odoo-hosting/hebergement-odoo-suisse-2026/`
---
## Priority 5: Type Cluster (40 pages)
### Spanish
- `/odoo-hosting/managed-odoo-hosting-guia-2026/`
- `/odoo-hosting/hosting-odoo-nube-cloud-2026/`
- `/odoo-hosting/vps-odoo-hosting-guia-2026/`
- `/odoo-hosting/hosting-odoo-propio-selfhosted-2026/`
- `/odoo-hosting/hosting-compartido-odoo-2026/`
- `/odoo-hosting/servidor-dedicado-odoo-2026/`
- `/odoo-hosting/odoo-docker-hosting-2026/`
- `/odoo-hosting/odoo-kubernetes-hosting-2026/`
- `/odoo-hosting/odoo-on-premise-2026/`
- `/odoo-hosting/hosting-hibrido-odoo-2026/`
---
## Priority 6: Version Cluster (24 pages)
### Spanish
- `/odoo-hosting/odoo-18-hosting-2026/`
- `/odoo-hosting/odoo-17-hosting-2026/`
- `/odoo-hosting/odoo-16-hosting-2026/`
- `/odoo-hosting/odoo-community-hosting-2026/`
- `/odoo-hosting/odoo-enterprise-hosting-2026/`
- `/odoo-hosting/odoo-community-vs-enterprise-2026/`
---
## Priority 7: Competitor Cluster (32 pages)
### Spanish
- `/odoo-hosting/alternativas-odoo-sh-completo-2026/`
- `/odoo-hosting/mejores-proveedores-odoo-2026/`
- `/odoo-hosting/odoo-vs-sap-hosting-2026/`
- `/odoo-hosting/migracion-hosting-odoo-2026/`
- `/odoo-hosting/opiniones-hosting-odoo-2026/`
- `/odoo-hosting/odoo4projects-hosting-review-2026/`
- `/odoo-hosting/cloudpepper-vs-odoo-sh-2026/`
- `/odoo-hosting/odoo-bitnami-hosting-2026/`
---
## Keyword Mapping
| Keyword | Search Volume | Difficulty | Target Page |
|---------|--------------|------------|-------------|
| odoo hosting | 2,400 | 45 | /mejor-hosting-odoo-2026/ |
| best odoo hosting | 1,200 | 42 | /en/best-odoo-hosting-2026/ |
| odoo sh alternative | 880 | 38 | /alternativas-odoo-sh-2026/ |
| free odoo hosting | 720 | 35 | /hosting-odoo-gratis-2026/ |
| cheap odoo hosting | 590 | 32 | /hosting-odoo-barato-2026/ |
| odoo cloud hosting | 480 | 40 | /hosting-odoo-nube-cloud-2026/ |
| managed odoo hosting | 320 | 35 | /managed-odoo-hosting-2026/ |
| odoo vps hosting | 260 | 30 | /vps-odoo-hosting-guia-2026/ |
| odoo 18 hosting | 210 | 28 | /odoo-18-hosting-2026/ |
| odoo hosting mexico | 170 | 25 | /hosting-odoo-mexico-2026/ |
| odoo hosting spain | 150 | 28 | /hosting-odoo-espana-2026/ |
| odoo hosting germany | 140 | 30 | /de/odoo-hosting-deutschland-2026/ |
---
## Template Assignment
| Page Type | Template | Word Count | D3.js Charts |
|-----------|----------|------------|--------------|
| Pillar | pillar-page.html | 3,500-4,000 | Scatter, Radar, Heatmap, Tree |
| Geographic | geographic-page.html | 2,000-2,500 | Bar chart, Map |
| Type/Feature | type-page.html | 2,500-3,000 | Decision tree, Comparison |
| Version | version-page.html | 1,800-2,200 | Timeline, Feature matrix |
| Competitor | competitor-page.html | 2,200-2,800 | Comparison table, Radar |
---
## Internal Linking Strategy
Each page links to:
- Parent hub: /odoo-hosting/
- 3-5 sibling pages in same cluster
- 1-2 cross-silo pages
Anchor text distribution:
- 60% exact/partial match keywords
- 30% branded/navigational
- 10% generic ("learn more")
+102
View File
@@ -0,0 +1,102 @@
# Diagnostics Baseline — odoo-expertos.com
**Captured:** 2026-05-27 (GSC data) + 2026-05-27 (live audit)
**Compare after:** fixes deployed + GSC re-crawl (allow 2-4 weeks)
**Source:** `seo-audit-2026-05-27/FULL-AUDIT-REPORT.md` + `GOAL-FIX-PLAN.md`
---
## GSC Index Coverage (as of 2026-05-21)
| GSC Status | Count | Root cause |
|---|---:|---|
| Gecrawlt zurzeit nicht indexiert (Crawled, not indexed) | **587** | Thin / templated / low-value content |
| Gefunden nicht indexiert (Discovered, not indexed) | **134** | Crawl budget starved; weak internal linking |
| Duplikat, Google wählte anderen Canonical | **103** | Untranslated PT/FR/EN = duplicates of ES |
| Alternative Seite mit kanonischem Tag | **31** | Canonicalized away (mostly `/en/odoo/`) |
| Seite mit Weiterleitung (redirect) | **~45** | Country-variants + index.html still in sitemaps |
| Nicht gefunden (404) | **12** | Case-sensitivity + wrong-category + missing pages |
| **TOTAL excluded** | **~870 / 1,210** | **~72% of site NOT indexed** |
| **Indexed (can rank)** | **~340 / 1,210** | **~28%** |
**Target:** <15% excluded after fixes + GSC re-validation (2-4 weeks post-deploy).
---
## Per-Workstream Baseline Metrics
| Metric | Baseline (2026-05-27) | Target | Workstream |
|---|---|---|---|
| Sitemap URLs that 404 or redirect | present | 0 | W1 |
| Category hub 404s | 3 (`/en/`, `/fr/`, `/pt/` odoo-hosting) | 0 | W1 |
| robots.txt `User-agent: *` groups | 2 (2nd silently ignored) | 1 | W2 |
| Duplicate Bingbot/CCBot entries in robots.txt | 2 each | 1 each | W2 |
| Dead domain in schema (`odooexpertos.com`) | present site-wide | 0 | W3 |
| Non-www schema URLs | present site-wide | 0 | W3 |
| Article schema missing `image` field | present | 0 | W3 |
| Truncated `dateModified` in Article schema | present | 0 | W3 |
| DE pages with Spanish schema strings | present | 0 | W3 |
| Hreflang reciprocity on EN inner pages | EN missing pt+ar | 100% reciprocal | W4 |
| Hreflang on DE inner pages | points to /de/-prefixed ES slugs (404) | all 200 | W4 |
| Category pages with zero hreflang | all category hubs | full 7-entry block | W4 |
| Category title length | 260277 chars (keyword stuffed) | ≤60 chars | W5 |
| Templated/near-duplicate meta descriptions | corpus-wide | 100% unique | W5 |
| `og:locale` mismatch on DE/FR/PT | `es_ES` on non-ES pages | matches lang | W5 |
| ES articles reachable ≤2 clicks | 156/193 (37 orphaned) | 193/193 | W6 |
| Nav injected via `document.write()` | present on ~990 pages | static HTML | W6 |
| EN/DE pages serving Spanish/garbled content | 400+ pages | declared lang = content lang | W7 |
| Fabricated author ("Dr. María Elena Rodríguez") | present | removed | W7 |
| "Apex AI Research Labs LLC" in meta/schema | present | removed | W7 |
| Homepage H1 word-spacing bug | present all 6 langs | fixed | W8 |
| Homepage combat/fear hype copy | present | factual E-E-A-T copy | W8 |
| Known 404 URLs (GSC list) | 12 | 0 | W9 |
| Homepage inline CSS size | ~32 KB | <14 KB | W10 |
| D3 loaded from external CDN | `d3js.org` at runtime | self-hosted `/js/d3.v7.min.js` | W10 |
| Cache-Control on static assets | `max-age=0` | `max-age=31536000, immutable` | W10 |
| `X-Content-Type-Options` header | absent | `nosniff` | W11 |
| `X-Frame-Options` header | absent | `SAMEORIGIN` | W11 |
| `Referrer-Policy` header | absent | `strict-origin-when-cross-origin` | W11 |
---
## Overall SEO Health Score
| Category | Baseline Score | Target |
|---|---:|---:|
| Technical SEO | 54/100 | ≥80 |
| Content Quality / E-E-A-T | 25/100 | ≥70 |
| On-Page SEO | 35/100 | ≥75 |
| Schema / Structured Data | 45/100 | ≥80 |
| Performance (CWV, estimated) | ~65/100 | ≥80 (measured) |
| AI Search Readiness (GEO) | 50/100 | ≥70 |
| Images | ~60/100 | ≥70 |
| **Overall** | **~44/100** | **≥70/100** |
---
## z-image Probe (2026-05-28)
| Check | Result |
|---|---|
| API key present (`.env.local`) | ✓ VALID |
| `createTask` endpoint (z-image model) | ✓ HTTP 200, taskId returned |
| Old `getTaskDetails` polling endpoint | ✗ HTTP 404 — removed from kie.ai API |
| **Fix applied** | Script rewritten to use `callBackUrl` → ntfy.sh anonymous webhook receiver |
| kie.ai callback received | ✓ `state: success`, `creditsConsumed: 0.8` |
| Image URL returned | ✓ `https://tempfile.aiquickdraw.com/zimage/...png` |
| Image downloaded | ✓ `images/z-image-probe.png` (3,337,057 bytes) |
| **Overall status** | ✅ SUCCESS — z-image probe complete |
**API change note:** kie.ai removed `/api/v1/jobs/getTaskDetails` (May 2026). Results now delivered via `callBackUrl` only. `kie-image.ps1` updated to use ntfy.sh as a free anonymous webhook receiver. Result JSON structure: `data.resultJson.resultUrls[0]`.
---
## Quick Reference: What Each Fix Unlocks
1. **W7 (content localization)** → unblocks ~103 duplicate + bulk of 587 crawled-not-indexed
2. **W5 (titles/metas)** → stops triggering duplicate-content signals corpus-wide
3. **W6 (internal linking)** → rescues 134 discovered-not-indexed by improving crawl depth
4. **W1 (sitemaps)** → removes sitemap trust damage; enables hub pages to be crawled
5. **W4 (hreflang)** → lets Google assign correct language signals across 1,210 pages
6. **W8 (homepage)** → raises domain-level E-E-A-T signal visible on the most-crawled page
7. **W3 (schema)** → enables rich results (Organization logo, Article image, Breadcrumb)
+2430
View File
File diff suppressed because it is too large Load Diff
+65
View File
@@ -0,0 +1,65 @@
# Author Attribution — Odoo Expertos
> All content is attributed to the Organization entity. No named individuals unless a real person with a verifiable profile has consented. This file is the implementation guide for W7.
---
## Default Attribution (use on every page)
**Equipo Odoo Expertos** (Organization)
All pages use Organization-level attribution. No individual bylines until a real team page with verifiable people is built.
### HTML byline
```html
<span class="author">Equipo Odoo Expertos</span>
<time datetime="2026-01-15">15 de enero de 2026</time>
```
### Schema (Article author)
```json
"author": {
"@type": "Organization",
"@id": "https://www.odoo-expertos.com/#organization",
"name": "Odoo Expertos"
}
```
### Meta tag
```html
<meta name="author" content="Equipo Odoo Expertos">
```
### Per-language variant
| Language | Byline string |
|---|---|
| ES | Equipo Odoo Expertos |
| EN | Odoo Expertos Team |
| DE | Odoo Expertos Team |
| FR | Équipe Odoo Expertos |
| PT | Equipe Odoo Expertos |
| AR | فريق أودو إكسبرتوس |
---
## What to Remove (W7 scope)
| File | What to change |
|---|---|
| All `.html` files | `<meta name="author" content="Apex AI Research Labs LLC">``Equipo Odoo Expertos` |
| All `.html` files | Any `"author": "Dr. María Elena Rodríguez"` in JSON-LD → Org block above |
| All `.html` files | Any visible byline "Dr. María Elena Rodríguez" → remove or replace with `Equipo Odoo Expertos` |
| `/María Elena Rodríguez.png` | Delete (fabricated individual) |
| `/maria-elena-rodriguez.png` | Delete (fabricated individual) |
| Any `/autor/maria-elena-rodriguez/` page | 301 → `/sobre-nosotros/` |
---
## Adding Real Bylines (future — when real team page exists)
Only add an individual byline when:
1. A real person with a public Odoo/ERP profile has agreed to be credited
2. Their author page (`/autor/[slug]/`) exists and returns 200
3. Their schema `Person` block links to a verifiable external profile (LinkedIn, Odoo partner directory)
Until all three conditions are met: use Organization attribution.
+124
View File
@@ -0,0 +1,124 @@
# Content Cluster Plans — Odoo Expertos
> Pillar-spoke architecture for three topic clusters. Agents use this to build internal links and understand page hierarchy.
---
## Overview
| Cluster | Hub URL | Articles (ES) | Status |
|---|---|---|---:|
| Odoo Hosting | `/odoo-hosting/` | ~99 ES pages | Hub 200 ✓ |
| Odoo General | `/odoo/` | ~41 ES pages | Hub 200 ✓ |
| Odoo IA | `/odoo-ia/` | ~56 ES pages | Hub 200 ✓ |
Each cluster has 6 language versions. Hub pages for EN/FR/PT `/odoo-hosting/` currently **404** → rebuild required (W1).
---
## Cluster 1 — Odoo Hosting (`/odoo-hosting/`)
**Hub intent:** Informational → commercial investigation. Buyer researching Odoo hosting options.
**Pillar page keywords:** "hosting odoo", "mejor hosting odoo 2026", "odoo hosting comparativa"
### Tier 1 — High-value spokes (prioritize in content expansion)
These are AI-Opportunity pages from the audit with citability score ≥5:
| URL | Target keyword | Priority |
|---|---|---|
| `/odoo-hosting/odoo4projects-hosting-review-2026/` | "odoo4projects review 2026" | P1 |
| `/odoo-hosting/mejor-hosting-odoo-2026/` | "mejor hosting odoo 2026" | P1 |
| `/odoo-hosting/mejores-proveedores-hosting-odoo-2026/` | "mejores proveedores odoo" | P1 |
| `/odoo-hosting/comparativa-precios-odoo-2026/` | "comparativa precios odoo 2026" | P1 |
| `/odoo-hosting/cloudpepper-vs-odoo-sh-2026/` | "cloudpepper vs odoo.sh" | P1 |
| `/odoo-hosting/opiniones-hosting-odoo-2026/` | "opiniones hosting odoo" | P2 |
| `/odoo-hosting/odoo-vs-sap-hosting-2026/` | "odoo vs sap hosting" | P2 |
| `/odoo-hosting/alternativas-odoo-sh-2026/` | "alternativas odoo.sh" | P2 |
| `/odoo-hosting/odoo-community-vs-enterprise-hosting-2026/` | "odoo community vs enterprise" | P2 |
### Tier 2 — Thin-content rewrites (crawled-not-indexed)
| URL | Min words | Query intent |
|---|---|---|
| `/odoo-hosting/hosting-odoo-gratis-gratuito-2025/` | 1,600 | Free trial / top-of-funnel |
| `/odoo-hosting/servidor-dedicado-odoo-2026/` | 1,600 | Technical decision maker |
| `/odoo-hosting/managed-odoo-hosting-2026/` | 1,600 | Commercial investigation |
| `/odoo-hosting/odoo-docker-hosting-2026/` | 1,800 | DevOps / technical |
| `/odoo-hosting/hosting-odoo-mexico-2026/` | 1,600 | Geo-local (MX) |
| `/odoo-hosting/migracion-hosting-odoo-2026/` | 1,800 | Commercial investigation |
| `/odoo-hosting/vps-odoo-hosting-2026/` | 1,800 | Technical decision maker |
| `/odoo-hosting/odoo-vs-zoho-books-hosting-2025/` | 1,800 | Comparison (rewrite from fabricated) |
| `/odoo-hosting/odoo-gratis-vs-pago-diferencias-2025/` | 1,600 | Top-of-funnel |
| `/odoo-hosting/odoo-enterprise-hosting-2026/` | 1,800 | Commercial investigation (high value) |
### Internal linking requirements
- Hub `/odoo-hosting/` links to all Tier 1 + Tier 2 articles (paginated if needed)
- Each spoke links back to hub + ≥3 related spokes within the cluster
- All EN/DE/FR/PT/AR variants link to the ES canonical via hreflang, not cross-links
---
## Cluster 2 — Odoo General (`/odoo/`)
**Hub intent:** Informational. Researchers and evaluators exploring Odoo capabilities.
**Pillar page keywords:** "odoo erp", "odoo implementación", "odoo módulos"
### Tier 1 — Thin-content priority rewrites
| URL | Min words | Query |
|---|---|---|
| `/odoo/odoo-hosting-cloud-infraestructura-2025/` | 1,800 | "infraestructura odoo cloud" |
| `/odoo/odoo-compras-gestion-proveedores-2025/` | 1,800 | "odoo gestión de compras" |
| `/odoo/odoo-argentina-implementacion-local-2025/` | 1,600 | "odoo argentina implementación" |
### Spoke categories (hub must link to all)
- Odoo versions (17, 18) — `/odoo/odoo-17-*/`, `/odoo/odoo-18-*/`
- Modules by function (CRM, inventory, accounting, purchasing, HR, manufacturing)
- Geo implementations (Argentina, Mexico, Colombia, Spain, LATAM)
- Career/certification pages — `/odoo/odoo-*/` career articles
---
## Cluster 3 — Odoo IA (`/odoo-ia/`)
**Hub intent:** Informational → commercial. AI-curious buyers evaluating Odoo's AI capabilities.
**Pillar page keywords:** "odoo ia", "odoo inteligencia artificial", "odoo automatización"
### Tier 1 — AI-Opportunity pages
| URL | Fix needed | Query |
|---|---|---|
| `/odoo-ia/alternativas-odoo-ia-comparativas-2025/` | Remove fabricated loss narrative, add table, cite sources | "alternativas odoo ia" |
| `/odoo-ia/que-es-odoo-ia-guia-basica-2025/` | Expand from shallow intro to structured 1,800-word explainer | "qué es odoo ia" |
### Spoke categories
- AI features by module (chatbot, OCR, predictive reordering)
- Automation (RPA, n8n integration)
- AI hosting requirements
- Comparisons (Odoo IA vs alternatives)
---
## Cross-cluster internal link matrix
Every article that discusses hosting topics should link to the most relevant `/odoo-hosting/` spoke, and vice versa.
| From cluster | To cluster | Example link |
|---|---|---|
| Odoo General | Odoo Hosting | `/odoo/odoo-18-novedades/` → links to `/odoo-hosting/odoo-enterprise-hosting-2026/` |
| Odoo IA | Odoo Hosting | `/odoo-ia/odoo-ia-chatbot/` → links to `/odoo-hosting/managed-odoo-hosting-2026/` |
| Odoo Hosting | Odoo General | `/odoo-hosting/mejor-hosting-odoo-2026/` → links to `/odoo/odoo-18-novedades/` |
---
## Hub page template (for EN/FR/PT rebuilds — W1)
Missing hub pages `/en/odoo-hosting/`, `/fr/odoo-hosting/`, `/pt/odoo-hosting/` must mirror `/de/odoo-hosting/` (which returns 200). Minimum:
- H1 in target language
- 800+ words of genuine content (not Spanish)
- Full 7-entry hreflang block (es/en/de/fr/pt/ar/x-default)
- Links to all translated spoke articles within that language
- CollectionPage schema with translated strings + `inLanguage`
+121
View File
@@ -0,0 +1,121 @@
# Content Strategy — Odoo Expertos
**Date:** 2026-05-28
**Context:** Post-audit SEO restoration strategy. Site has ~72% of 1,210 pages excluded from Google's index. This strategy prioritizes fixing root causes over adding new pages.
---
## Strategic Priority Order
> Fix existing pages before creating new ones. Every new page on a low-trust domain is another crawl budget gamble.
### Phase 1 — Technical foundation (W1W6, W8W11)
Stop the bleeding. Remove signals that cause Google to distrust the domain.
1. Kill sitemap 404s and redirect URLs (W1)
2. Fix robots.txt structural errors (W2)
3. Fix schema dead domain + wrong org entity (W3)
4. Fix hreflang reciprocity (W4)
5. Fix title/meta stuffing + og:locale (W5)
6. Add static internal links; fix orphans (W6)
7. Homepage factual rewrite + H1 word-spacing (W8)
8. Fix known 404 pages (W9)
9. Performance: inline CSS size + D3 CDN (W10)
10. Security headers (W11)
### Phase 2 — Content consolidation (W7)
Remove or properly translate 400+ pages currently serving wrong-language content. This single workstream unblocks ~72% of the unindexed pages.
Decision tree per page:
1. **Translate properly** → keep with correct language, hreflang to ES
2. **Consolidate** → noindex + 301 → ES canonical; remove from sitemap
3. **Drop** → 301 → hub page; remove from sitemap
Default: ES canonical stays. Language variants only if genuinely translated.
### Phase 3 — Content deepening (post-W7)
Expand thin articles using the cluster plans in `cluster-plans.md`. Priority: Tier 1 AI-opportunity pages (citability score ≥5) before Tier 2 thin-content rewrites.
### Phase 4 — New content (only after Phase 1-3)
Net-new pages only when:
- The cluster has all Tier 1 spokes at ≥1,500 words with sources
- The hub is properly linking all spokes
- The language version being added is genuinely translated
---
## Content Quality Gates
Every published page must pass all gates before a sitemap entry is created:
| Gate | Threshold |
|---|---|
| Word count | ≥1,500 for articles; ≥800 for hub pages |
| Title length | ≤60 chars |
| Meta description | Unique corpus-wide; 140-160 chars |
| Language match | Content language = declared `lang` attribute |
| Author | "Equipo Odoo Expertos" or verified persona (no fabricated individuals) |
| Sourced claims | Every percentage/review-count claim has a source link |
| Internal links | ≥3 related articles + 1 parent hub |
| Schema | Article: headline + author + datePublished + dateModified + image |
| Hreflang | Full 7-entry block (where language variants exist) |
---
## Keyword Strategy by Language
### Spanish (primary)
**Intent distribution:** 60% informational, 30% commercial investigation, 10% navigational
- Primary terms: "hosting odoo", "implementación odoo", "odoo erp latam"
- Geo modifiers: Argentina, México, Colombia, España, Chile
- Version modifiers: "odoo 17", "odoo 18", "odoo 16"
### English
**Intent:** Technical + commercial investigation (EU/US buyers)
- Primary: "odoo hosting", "odoo implementation", "odoo erp consulting"
- Fix localized slugs: `/en/odoo-ai/` (not `/en/odoo-ia/`)
### German
**Intent:** B2B evaluation, DACH market
- Primary: "odoo hosting", "odoo implementierung", "odoo beratung"
- Fix: slugs like `/de/odoo-ki/` for AI content
### French
**Intent:** SMB decision-maker, Francophone Africa + France
- Primary: "hébergement odoo", "implémentation odoo"
- Build: hub pages `/fr/odoo-hosting/` (currently 404)
### Portuguese
**Intent:** Brazil + Portugal SMB
- Primary: "hospedagem odoo", "implementação odoo"
- Build: hub pages `/pt/odoo-hosting/` (currently 404)
### Arabic
**Intent:** MENA large enterprises
- Primary: "استضافة أودو", "تطبيق أودو"
- RTL implementation is correct — focus on content quality
---
## Anti-cannibalization Rules
1. **One canonical per topic.** Never create `/odoo-hosting/mejor-hosting-odoo-2025/` AND `/odoo-hosting/mejor-hosting-odoo-2026/` for the same target keyword without 301ing the old one.
2. **Language variants are NOT separate pages** for the same audience — they serve different language queries and must differ in language, not just slug.
3. **Year modifiers are OK** if content is genuinely updated (`2025``2026` with new data).
4. **Thin variants** (PT/FR with Spanish content) should 301 to ES, not stay live as separate pages.
---
## Measurement Plan
**Week 0 (baseline):** Current GSC export (done 2026-05-21).
**Week 2 post-deploy:** Submit sitemaps in GSC; "Validate Fix" on each coverage issue.
**Week 4-6 post-deploy:** Re-export GSC coverage. Target: <15% excluded.
**Month 3:** Organic traffic comparison (GSC Search Analytics).
**Leading indicators (on-site, immediate):**
- REVIEW.ps1 all-green
- Lighthouse mobile: LCP ≤2.5s / INP ≤200ms / CLS ≤0.1
- 0 pages with title >60 chars
- 0 corpus-wide duplicate meta descriptions
- Homepage screenshot: factual H1, no combat hype