5.3 KiB
5.3 KiB
Action Plan — odoo-expertos.com SEO Fixes
Date: 2026-05-27 · Overall health: ~44/100 · Source: FULL-AUDIT-REPORT.md
Ordered by impact ÷ effort. Most high-impact fixes are template/generator changes that fan out across ~1,000+ pages — fix the generator, not individual pages.
🔴 CRITICAL — fix immediately (blocks indexing / risks site-wide downgrade)
| # | Action | Where | Effort |
|---|---|---|---|
| C1 | Remove the 3 dead <loc> entries for /en/odoo-hosting/, /fr/odoo-hosting/, /pt/odoo-hosting/ from sitemap-en/fr/pt.xml. Then build the missing index pages (mirror DE/AR). |
sitemaps + page generator | Low (purge) / Med (build) |
| C2 | Resolve the EN/DE untranslated-content problem (400+ pages with lang="en/de" serving Spanish/garbled text). Decide: translate, or remove+hreflang-to-ES, or 301 to Spanish canonical. Stop generating Spanish-slug EN/DE pages. |
content pipeline | High (decision + execution) |
| C3 | Fix inner-page hreflang: EN template add pt+ar; DE template build es/x-default from the root ES URL (no /de/ prefix). Add full 7-entry hreflang to all category index pages (currently zero). |
head template | Med |
| C4 | Fix Organization logo + schema host site-wide: replace dead www.odooexpertos.com/...logo.png with one real URL on www.odoo-expertos.com; switch all schema url/item from non-www → www. |
schema template | Low |
| C5 | Rebuild the homepage as an authoritative entity page: factual keyword-led H1, drop combat/fear hype + emoji H2s, source or remove "280% ROI", add Organization JSON-LD (shared @id, populated sameAs), last-updated date. |
homepage | Med |
| C6 | Replace document.write() header/footer/eeat with insertAdjacentHTML into a pre-sized placeholder + defer the component scripts. |
content-page generator | Med |
🟠 HIGH — within ~1 week
| # | Action | Where | Effort |
|---|---|---|---|
| H1 | Rewrite category titles to 50–60 chars in the target language (kill the 270–300-char stuffed strings). | category template | Low |
| H2 | Add rendered breadcrumb + parent-category link + ≥3 related-article links to article template (fix orphan pages). | article template | Med |
| H3 | Add Article.image + mainEntityOfPage + valid dateModified; remove duplicate Microdata itemtype; add BreadcrumbList to deep pages. |
schema template | Med |
| H4 | Add author bylines + datePublished/dateModified (visible + schema) to content pages; create real author pages or attribute to the org. | content + author pages | Med |
| H5 | Self-host D3 (/js/d3.v7.min.js), preload only where used, remove misplaced d3js.org preconnect, defer D3 init until in-viewport. |
homepage + D3 pages | Low |
| H6 | Trim homepage inline <style> 32 KB → <14 KB (move non-critical to main.min.css); externalize + defer the big inline JS; throttle mousemove with rAF. |
homepage | Med |
| H7 | Apply async-CSS (preload…onload+<noscript>) + ~2 KB critical CSS to the content-page template. |
content-page generator | Low |
| H8 | Fix robots.txt: one group per agent; merge Disallow: /*? /*& into the FIRST User-agent: *; delete the 2nd * block, duplicate Bingbot/CCBot, and /*#. |
robots.txt | Low |
| H9 | Expand llms.txt (8–12 links per section); regenerate llms-full.txt as a genuine per-language content dump. |
llms files | Low (scripted) |
🟡 MEDIUM — within ~1 month
| # | Action |
|---|---|
| M1 | Add security headers in vercel.json (X-Content-Type-Options, X-Frame-Options, Referrer-Policy). |
| M2 | Add long-lived Cache-Control: max-age=31536000, immutable for hashed /css,/js,/components (with filename/version hashing). |
| M3 | Fix og:locale on DE/FR/PT category pages (currently es_ES) → de_DE/fr_FR/pt_*. |
| M4 | Expand thin article bodies (~400w) to 200–300 words per H2 section. |
| M5 | Populate sameAs (LinkedIn, YouTube, directories); remove non-functional ?s= SearchAction or wire real search. |
| M6 | Add Service schema (homepage) + FAQPage where question-H2s exist; add inLanguage to ES/DE schema blocks. |
| M7 | Create /contacto/ + /sobre-nosotros/ pages in primary nav; verify/link Odoo partner badge. |
| M8 | Apply "direct-answer-first" 134–167-word passages across content pages (citability). |
| M9 | Wrap continuous CSS animations (kenBurns/shimmer) in IntersectionObserver. |
🔵 LOW / backlog
- Localized URL slugs for EN/DE (
/en/odoo-ai/,/de/odoo-ki/) with 301s once translated. - Single-hop
http-apex → https-wwwredirect. - Off-site entity building (YouTube channel → strongest AI-citation signal; r/Odoo participation; Wikipedia if notable).
- Accessible HTML data tables beside D3 charts (AI-crawler + a11y).
Verification checklist (after fixes)
curl -Ithe 3 former-404 category pages → 200; sitemaps contain no 404<loc>.- hreflang reciprocity passes (EN has pt+ar; DE es/x-default resolve 200) — re-run technical agent.
- Rich Results Test passes for Organization (logo loads) + Article (image present) + Breadcrumb.
- Re-run PageSpeed with an API key; confirm LCP ≤2.5s / INP ≤200ms / CLS ≤0.1 on mobile.
- Homepage re-screenshot: factual H1, no combat hype.
- Re-audit: target health ≥70/100.