Files
odoo-expertos.com/growth/PLAN.md
T
Hermes Agent 8df260b90d Add 12-month growth plan, baseline, weekly log and measurement loop
Week-by-week plan grounded in current GSC data (4,745 impressions, 9 clicks,
CTR 0.19%, hosting cluster at position 27.5, 1,090 impressions on page-1
zero-click queries). One bounded change per week, measured the following week.
Snapshot script: ~/.hermes/scripts/growth_week.py.
2026-10-24 19:00:47 +00:00

162 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# odoo-expertos.com — 12-month improvement plan
One change per week. Measure the previous week before starting the next.
North-star metric: **affiliate clicks** (Plausible goal `Affiliate Click`).
Supporting metrics: GSC clicks, money-keyword position, outbound CTR.
Guiding rules:
- A week ships **one** bounded change, deployed and verified live, logged in `WEEKLY-LOG.md`.
- Every change states a hypothesis and the metric it should move, **before** it ships.
- Next week starts by reading the result of last week. Keep, revert, or adjust — then move on.
- Impressions are the guardrail: if GSC impressions drop more than 10% week over week, stop
new work and diagnose before continuing.
- No invented proof. No fake testimonials, certifications or client names, ever.
Baseline (2026-10-24, see `BASELINE.md`): 4,745 impressions, 9 clicks, CTR 0.19%, avg
position 24.7, money cluster at position 27.5, affiliate clicks ≈ 0.
---
## Phase 0 — Instrumentation (week 0)
Done before the loop starts: Plausible tag on 1,206 pages, `Affiliate Click` /
`Outbound Click` events, UTM on all 479 outbound links, weekly snapshot script, this plan.
**Week 1 — Product marketing context.**
Write `.agents/product-marketing.md`: ICP, pains, objections, proof, positioning. Every
later copy decision reads from this file.
*Metric:* none (enabler). *Done when:* file exists and is committed.
---
## Phase 1 — Remove what disqualifies us (weeks 2–7)
**Week 2 — Strip the fabricated proof.**
Remove the three invented testimonials, the ISO 27001 / SOC 2 / "200+ proyectos" badges, and
the placeholder phone number (8 pages). Replace with the real customer list.
*Hypothesis:* E-E-A-T and trust signals improve; removes legal exposure.
*Metric:* no ranking loss (guardrail week), Plausible outbound CTR on those pages.
**Weeks 3–6 — CTR rescue on page-1 zero-click queries.**
17 queries sit on page 1 with 0 clicks and hold 1,090 impressions (23% of all impressions).
Rewrite title + meta description for 4 landing pages per week, ordered by impressions:
`odo ia` (279), `odoo de donde es` (154), `de donde es odoo` (115), `odoo honduras` (81),
`.odo ia` (66), `odoo origen` (60), `odoobot que es` (56), `docker odoo 20` (32 ×2),
`odoo 20 docker`, `odoo de que pais es` (32), `hosting economicos` (30), `odoo inmobiliaria`
(27), `odoo bot` (25), `odoo de donde es originario` (25).
*Hypothesis:* these positions already earn the impression; the snippet is what fails.
*Metric:* CTR on those queries (target 0.19% → 1.5% site-wide by week 8).
**Week 7 — Kill the empty page.**
`pt/odoo-ia/odoo-sistema-reservas-booking-ia-2025/` is a 0-byte file in the sitemap that
returns an empty 200. Fill it with the translated ES content or remove it and regenerate the
sitemap.
*Metric:* index coverage.
---
## Phase 2 — Make the money pages worth ranking (weeks 8–19)
Context: `odoo hosting` = 298 impressions at position 31.5. `hosting odoo` = 85 at 28.5.
The affiliate funnel is correct but nothing reaches it.
**Weeks 8–10 — Consolidate the thin hosting pages (ES first).**
40 near-duplicate `/odoo-hosting/*` pages per language cannibalize each other. Keep one hub,
keep the 6 genuine country pages, 301 the rest into the closest survivor, regenerate the
sitemap. Do not delete pages that have impressions without checking GSC per URL first.
*Hypothesis:* consolidating authority lifts the hub for `hosting odoo`.
*Metric:* position of `hosting odoo` / `odoo hosting`, hub impressions.
**Weeks 11–13 — Rebuild the ES hosting hub as a real comparison.**
Actual prices ($214/$395/$595/$950+), what each plan includes, backups, regions, migration
path, who it is wrong for. Comparison table above the fold. `Service` + `FAQPage` schema.
One primary CTA with our UTM.
*Hypothesis:* a page that answers "which plan and why" earns links and converts.
*Metric:* affiliate clicks from `/odoo-hosting/`, position for `odoo hosting`.
**Weeks 14–16 — Same rewrite for EN, then DE.**
DE matters: `odoo beratung` has 155 impressions at position 51.5 — the German section is
underperforming relative to its size.
*Metric:* per-language affiliate clicks.
**Weeks 17–19 — Internal links into the money pages.**
Add contextual links from the 50 highest-impression articles to the hosting hub, in the
article's own language. Anchor text describes the destination, not "click here".
*Metric:* hub entry pages, affiliate clicks.
---
## Phase 3 — Content that deserves to rank (weeks 20–30)
**Weeks 20–23 — Upgrade the top 20 impression pages.**
Add what competitors don't have: screenshots from a real instance, benchmark numbers,
version-specific detail (19 vs 20), "what this costs" sections.
*Metric:* average position and CTR on those 20 URLs.
**Weeks 24–27 — Article-level CRO.**
Contextual CTA blocks inside articles at natural stopping points, matching the article's
topic (hosting article → hosting CTA; module article → module CTA). No popups.
*Metric:* affiliate clicks per 1,000 sessions; scroll-to-CTA rate.
**Weeks 28–30 — Contact path.**
The only conversion today is `mailto:`. Replace with a short form (name, email, what they
need) posting to the existing webhook, with a real success state.
*Metric:* form submissions (new goal), goal conversion rate.
---
## Phase 4 — Locale quality (weeks 31–36)
**Weeks 31–33 — Audit ar/pt/fr.**
Find pages whose main content is untranslated boilerplate. Either translate the body or
`noindex` them. Never cross-locale canonical, never hreflang a page you don't want indexed.
*Metric:* index coverage ratio per locale, locale impressions.
**Weeks 34–36 — Localise the money pages properly.**
Currency, payment methods, local hosting expectations, local phone/hours where real.
*Metric:* affiliate clicks from non-ES locales.
---
## Phase 5 — Authority (weeks 37–46)
**Weeks 37–40 — Original data asset.**
Publish "Odoo hosting prices compared" with a method, a date, and a table others can cite.
This is the link magnet; everything else is maintenance.
*Metric:* referring domains, positions for comparison queries.
**Weeks 41–43 — Directory + OCA presence.**
Submit to relevant directories; get the OCA module tracker listed where Odoo users look.
*Metric:* referring domains, referral sessions.
**Weeks 44–46 — Outreach round.**
20 personalised pitches to Odoo blogs/communities pointing at the data asset. No bought links.
*Metric:* links earned, referral traffic.
---
## Phase 6 — Scale what works (weeks 47–52)
**Weeks 47–49 — Template the winner.**
Take the best-converting page structure and apply it to the 6 country pages.
*Metric:* affiliate clicks per country page.
**Weeks 50–51 — Decay sweep.**
Refresh the 20 posts with falling impressions (update prices, versions, dates).
*Metric:* recovered impressions.
**Week 52 — Year review.**
Compare every phase against its metric. Kill what didn't work, codify what did into the
templates and into the `odoo-expertos-site` skill.
---
## Weekly loop (what the cron job does)
1. Snapshot metrics, diff against last week, print the delta.
2. Read last week's log entry: what shipped, what it was supposed to move.
3. Record the verdict: keep / revert / adjust.
4. Take the next week's action from this file, implement it, deploy, verify live.
5. Write the log entry with hypothesis + metric before moving on.