new site
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# Brand Guidelines — Odoo Expertos
|
||||
|
||||
> Single source of truth for all batch agents (W1–W11+). 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
@@ -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
@@ -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)
|
||||
```
|
||||
@@ -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")
|
||||
@@ -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 | 260–277 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
File diff suppressed because it is too large
Load Diff
@@ -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.
|
||||
@@ -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`
|
||||
@@ -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 (W1–W6, W8–W11)
|
||||
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
|
||||
Reference in New Issue
Block a user