Hypothesis: EN hosting hub ranks for 'odoo hosting' but answers nothing above the fold - a directory, not a decision. Adding a price table, 6 checks, and trial CTA will lift position and CTR.
Metric: position and CTR for 'odoo hosting' / 'hosting odoo'; affiliate clicks from utm_campaign=hosting-hub-2027-en
Self-contained (no external assets), dark theme matching the site accent, print
friendly. Carries a machine-readable <script id=seo-metrics> JSON block so next
week's run can diff against it instead of re-deriving last week's numbers.
The Friday job now renders from templates/seo-report.html.
The Friday job was triggered manually to prove the pipeline; it produced a
second snapshot of the same date. The pipeline works (completed, wrote a
grounded report, committed, pushed); the file itself adds nothing.
Produced by the new 'seo' profile from live data: webhook (Plausible + Search
Console), audit_site.py, git log. Scorecard, technical progress, ranking
opportunities, 8 action items, open risks. All figures cross-checked against
the scripts (317 hreflang pages, 679 broken targets, 1,370 occurrences,
23 relative canonicals, 18 missing canonicals, sitemap 1,191 of 1,202).
Hypothesis: every later copy decision (title/meta rewrites, hosting hub,
CTA blocks) will be written against a single grounded source of truth —
real ICP from GSC query data, verified host prices, and an explicit
never-use list for the site's fabricated proof — instead of being
improvised per page. Metric: none (enabler); success is that week 2's
proof-removal and week 3's CTR rewrites stop inventing claims.
Also stop serving internal strategy publicly: .agents/ and growth/ are
added to .vercelignore (.md was listed but growth/PLAN.md still returns
200 live).
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.