520 lines
14 KiB
Markdown
520 lines
14 KiB
Markdown
# 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*
|