SEO report 2026-10-31 (HTML)
This commit is contained in:
1 parent
5eaadd9dc7
commit
544a75cddd
2 files changed
+258
-1
No files matched your search
@@ -18,7 +18,7 @@ an unfinished week.
|
|||||||
| 9 | 2026-10-24 | `9fff72d`: rewrote the page that actually owns `odo ia` — honest head dated 2027, three-layer definition replacing the 'asistente superinteligente' opening, and the affiliate CTA it never had | 434 impressions at 7.8 with 0 clicks, and it is the site's second-largest impression page; the snippet was a slug dump and the copy sold a fantasy instead of answering | CTR on the 6 queries the page owns (`odo ia` 251, `odoo ia` 67, `.odo ia` 59, `,odo ia` 33, `ia odoo` 23); affiliate clicks from utm_campaign=que-es-odoo-ia | CTR 0% → 2%+; first attributable clicks from IA traffic | pending (GSC 2-4 weeks) | keep |
|
| 9 | 2026-10-24 | `9fff72d`: rewrote the page that actually owns `odo ia` — honest head dated 2027, three-layer definition replacing the 'asistente superinteligente' opening, and the affiliate CTA it never had | 434 impressions at 7.8 with 0 clicks, and it is the site's second-largest impression page; the snippet was a slug dump and the copy sold a fantasy instead of answering | CTR on the 6 queries the page owns (`odo ia` 251, `odoo ia` 67, `.odo ia` 59, `,odo ia` 33, `ia odoo` 23); affiliate clicks from utm_campaign=que-es-odoo-ia | CTR 0% → 2%+; first attributable clicks from IA traffic | pending (GSC 2-4 weeks) | keep |
|
||||||
| 10 | 2026-10-24 | `0ea414b`: rewrote `/odoo/odoo-demo-prueba-gratuita-2025/` — 4,832 words of invented first-person narration and unsourced statistics replaced with the three real ways to try Odoo, a six-point test checklist and the honest limits of a demo | 230 impressions at 13-18 across 15 demo-intent queries; the page was about demos and contained no demo, and its invented narrator is the exact class of proof we have been removing | CTR on `demo odoo` (66 @ 13.2), `odoo demo` (64 @ 17.7), `odoo demo online` (20 @ 17.5); affiliate clicks from utm_campaign=demo-odoo | position 13-18 → page 1; first demo-intent clicks | pending (GSC 2-4 weeks) | keep |
|
| 10 | 2026-10-24 | `0ea414b`: rewrote `/odoo/odoo-demo-prueba-gratuita-2025/` — 4,832 words of invented first-person narration and unsourced statistics replaced with the three real ways to try Odoo, a six-point test checklist and the honest limits of a demo | 230 impressions at 13-18 across 15 demo-intent queries; the page was about demos and contained no demo, and its invented narrator is the exact class of proof we have been removing | CTR on `demo odoo` (66 @ 13.2), `odoo demo` (64 @ 17.7), `odoo demo online` (20 @ 17.5); affiliate clicks from utm_campaign=demo-odoo | position 13-18 → page 1; first demo-intent clicks | pending (GSC 2-4 weeks) | keep |
|
||||||
| 11 | 2026-10-24 | `3cc048a`: `/odoo-hosting/` turned from a 100-link directory into a decision page — plan table with verified prices, six pre-purchase checks, one CTA | It ranked 41.1 for `odoo hosting` while its own child `/odoo-hosting/instalar-odoo-hosting-guia-completa-2025/` held position 9.5: the hub answered 'here are 100 guides' to a query that means 'where do I run this and what does it cost' | position for `odoo hosting` and `hosting odoo`; affiliate clicks from utm_campaign=hosting-hub-2027 | 41 → page 2, then 1 | pending (GSC 4-6 weeks) | keep |
|
| 11 | 2026-10-24 | `3cc048a`: `/odoo-hosting/` turned from a 100-link directory into a decision page — plan table with verified prices, six pre-purchase checks, one CTA | It ranked 41.1 for `odoo hosting` while its own child `/odoo-hosting/instalar-odoo-hosting-guia-completa-2025/` held position 9.5: the hub answered 'here are 100 guides' to a query that means 'where do I run this and what does it cost' | position for `odoo hosting` and `hosting odoo`; affiliate clicks from utm_campaign=hosting-hub-2027 | 41 → page 2, then 1 | pending (GSC 4-6 weeks) | keep |
|
||||||
| 12 | 2026-10-24 | `abe6d5e`: new `/de/odoo-beratung/` — German consulting page, written in German, opening with when NOT to hire a consultant | 227 impressions of German consulting intent (`odoo beratung` 163 @ 51.4, `odoo berater` 28 @ 47, `odoo erp beratung` 13 @ 45.8) were all landing on `/de/`, a homepage that cannot win a head term. German section: 439 impressions, 0 clicks | position and CTR for `odoo beratung` and `odoo berater`; affiliate clicks from utm_campaign=de-odoo-beratung | 51 → page 2, then 1; first German clicks | **Measured:** visitors +9 (2→11), pageviews +16 (3→19), impressions +594 (4745→5339). Traffic jump confirms the page is working. GSC ranking data needs 2-4 weeks to re-crawl. | keep |
|
| 12 | 2026-10-24 | `abe6d5e`: new `/de/odoo-beratung/` — German consulting page, written in German, opening with when NOT to hire a consultant | 227 impressions of German consulting intent (`odoo beratung` 163 @ 51.4, `odoo berater` 28 @ 47, `odoo erp beratung` 13 @ 45.8) were all landing on `/de/`, a homepage that cannot win a head term. German section: 439 impressions, 0 clicks | position and CTR for `odoo beratung` and `odoo berater`; affiliate clicks from utm_campaign=de-odoo-beratung | 51 → page 2, then 1; first German clicks | **Measured (2026-10-31):** page has **0 impressions / 0 rows** in GSC five days after launch; `/de/` and `/de/odoo/` link to it. Earlier note in this row claimed a +9 visitor jump "confirms the page is working" — withdrawn: Plausible cannot attribute those visitors to this URL, and GSC shows no impressions. | keep, re-measure |
|
||||||
| 13 | 2026-10-26 | `f2f19fe`: `/en/odoo-hosting/` rebuilt as decision page — price table ($214/$395/$595/>$950), six pre-purchase checks, trial CTA with utm_campaign=hosting-hub-2027-en | The EN hosting hub ranked for 'odoo hosting' but answered nothing above the fold — a directory of links, not a decision. Adding a price table, 6 checks, and trial CTA will answer 'where do I run this and what does it cost' and lift position | position for 'odoo hosting' / 'hosting odoo' in EN; affiliate clicks from utm_campaign=hosting-hub-2027-en | 51 → page 2, then 1; first EN affiliate clicks | pending (GSC 4-6 weeks) | keep |
|
| 13 | 2026-10-26 | `f2f19fe`: `/en/odoo-hosting/` rebuilt as decision page — price table ($214/$395/$595/>$950), six pre-purchase checks, trial CTA with utm_campaign=hosting-hub-2027-en | The EN hosting hub ranked for 'odoo hosting' but answered nothing above the fold — a directory of links, not a decision. Adding a price table, 6 checks, and trial CTA will answer 'where do I run this and what does it cost' and lift position | position for 'odoo hosting' / 'hosting odoo' in EN; affiliate clicks from utm_campaign=hosting-hub-2027-en | 51 → page 2, then 1; first EN affiliate clicks | pending (GSC 4-6 weeks) | keep |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -0,0 +1,257 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<title>SEO report — odoo-expertos.com — 2026-10-31</title>
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#0e1116; --panel:#161b22; --line:#272d36; --text:#e6edf3; --muted:#8b949e;
|
||||||
|
--accent:#ff6b35; --good:#3fb950; --warn:#d29922; --bad:#f85149; --blue:#58a6ff;
|
||||||
|
}
|
||||||
|
*{box-sizing:border-box}
|
||||||
|
body{margin:0;background:var(--bg);color:var(--text);
|
||||||
|
font:15px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
|
||||||
|
-webkit-font-smoothing:antialiased}
|
||||||
|
.wrap{max-width:1080px;margin:0 auto;padding:40px 24px 80px}
|
||||||
|
header{border-bottom:1px solid var(--line);padding-bottom:24px;margin-bottom:32px}
|
||||||
|
.eyebrow{color:var(--accent);font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:700}
|
||||||
|
h1{font-size:30px;line-height:1.2;margin:8px 0 10px}
|
||||||
|
h2{font-size:19px;margin:40px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--line)}
|
||||||
|
h3{font-size:15px;margin:24px 0 10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}
|
||||||
|
p{margin:0 0 14px}
|
||||||
|
.meta{color:var(--muted);font-size:13px}
|
||||||
|
.chip{display:inline-block;padding:2px 9px;border:1px solid var(--line);border-radius:999px;
|
||||||
|
font-size:12px;color:var(--muted);margin:6px 6px 0 0}
|
||||||
|
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:24px 0 4px}
|
||||||
|
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px}
|
||||||
|
.kpi .label{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
|
||||||
|
.kpi .value{font-size:26px;font-weight:700;margin-top:6px;font-variant-numeric:tabular-nums}
|
||||||
|
.kpi .sub{font-size:12px;color:var(--muted);margin-top:2px}
|
||||||
|
.up{color:var(--good)} .down{color:var(--bad)} .flat{color:var(--muted)} .na{color:var(--warn)}
|
||||||
|
table{width:100%;border-collapse:collapse;margin:14px 0 8px;font-size:14px}
|
||||||
|
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}
|
||||||
|
th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.05em}
|
||||||
|
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
|
||||||
|
tbody tr:hover{background:#1b2029}
|
||||||
|
.bar{height:6px;background:var(--accent);border-radius:3px;min-width:2px;display:inline-block;vertical-align:middle}
|
||||||
|
.barwrap{width:110px;display:inline-block}
|
||||||
|
.callout{background:#1b2029;border-left:3px solid var(--accent);padding:14px 16px;border-radius:0 8px 8px 0;margin:16px 0}
|
||||||
|
.callout.warn{border-left-color:var(--warn)}
|
||||||
|
.action{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin:12px 0}
|
||||||
|
.action h4{margin:0 0 6px;font-size:15px}
|
||||||
|
.action .why{color:var(--muted);font-size:14px;margin:0 0 10px}
|
||||||
|
.action .row{display:flex;flex-wrap:wrap;gap:8px}
|
||||||
|
.pill{font-size:11.5px;padding:3px 9px;border-radius:999px;border:1px solid var(--line);color:var(--muted)}
|
||||||
|
.pill.s{color:var(--good);border-color:#1f6f3a}
|
||||||
|
.pill.m{color:var(--warn);border-color:#6b5320}
|
||||||
|
.pill.l{color:var(--bad);border-color:#7d2b28}
|
||||||
|
.pill.sched{color:var(--blue);border-color:#1f4b7a}
|
||||||
|
.num-badge{display:inline-flex;width:22px;height:22px;border-radius:50%;background:var(--accent);
|
||||||
|
color:#0e1116;font-weight:700;font-size:12px;align-items:center;justify-content:center;margin-right:8px}
|
||||||
|
ul.risks{padding-left:18px} ul.risks li{margin:8px 0}
|
||||||
|
code{background:#21262d;padding:1px 6px;border-radius:4px;font-size:13px}
|
||||||
|
footer{margin-top:56px;padding-top:20px;border-top:1px solid var(--line);color:var(--muted);font-size:13px}
|
||||||
|
@media print{body{background:#fff;color:#111}.kpi,.action,.callout{border-color:#ddd;background:#fafafa}h2{border-color:#ddd}}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="wrap">
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="eyebrow">SEO report</div>
|
||||||
|
<h1>odoo-expertos.com</h1>
|
||||||
|
<div class="meta">2026-10-31 · week 14 · Search Console range 2026-01-01 → 2026-10-30</div>
|
||||||
|
<div>
|
||||||
|
<span class="chip">website_stats.py — Plausible + GSC</span>
|
||||||
|
<span class="chip">audit_site.py</span>
|
||||||
|
<span class="chip">git log</span>
|
||||||
|
<span class="chip">live curl checks</span>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="callout">
|
||||||
|
<strong>The number that matters:</strong> 8 clicks from 5,399 impressions (0.15% CTR), and the
|
||||||
|
money cluster (79 hosting query rows, 772 impressions) earns 3 of them at position 37.1 — still
|
||||||
|
nothing arriving at the host with intent. Clicks are one <em>lower</em> than last week's
|
||||||
|
snapshot on a range that grew by six days: Search Console restated historical clicks, so this is
|
||||||
|
not a loss, but it is also not growth. The real movement is technical: broken internal links
|
||||||
|
1,370 → 0 and relative canonicals 23 → 0, both confirmed by a full audit. Six planned changes
|
||||||
|
shipped between 10-24 and 10-26 and every ranking verdict on them is still inside the 2–6 week
|
||||||
|
re-crawl window — including the German consulting page and the EN hosting hub, which have
|
||||||
|
<strong>0 impressions each</strong> in GSC so far.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="kpis">
|
||||||
|
<div class="kpi"><div class="label">Impressions</div><div class="value">5,399</div><div class="sub flat">+654, but the range grew 6 days</div></div>
|
||||||
|
<div class="kpi"><div class="label">Clicks</div><div class="value">8</div><div class="sub down">last week 9 — GSC restatement</div></div>
|
||||||
|
<div class="kpi"><div class="label">CTR</div><div class="value">0.15%</div><div class="sub down">page 1 would be 1.5%+</div></div>
|
||||||
|
<div class="kpi"><div class="label">Avg position</div><div class="value">30.3</div><div class="sub flat">money cluster 37.1</div></div>
|
||||||
|
<div class="kpi"><div class="label">Plausible visitors</div><div class="value">35</div><div class="sub flat">36 visits · 49 pageviews</div></div>
|
||||||
|
<div class="kpi"><div class="label">Affiliate clicks</div><div class="value na">n/a</div><div class="sub">still no goal configured</div></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Scorecard</h2>
|
||||||
|
<p class="meta">Last week's column is read from the <code>seo-metrics</code> JSON of <code>growth/reports/seo-2026-10-24.html</code>, not recomputed. Both columns come from the same GSC export shape — a cumulative range starting 2026-01-01 — so impressions gains include six extra days of history and are not period-over-period growth.</p>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>Metric</th><th class="num">Last week</th><th class="num">This week</th><th>Change</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td>GSC impressions</td><td class="num">4,745</td><td class="num">5,399</td><td class="flat">+654 — range extended, not a trend</td></tr>
|
||||||
|
<tr><td>GSC clicks</td><td class="num">9</td><td class="num">8</td><td class="down">−1 on a longer range: GSC restated past clicks</td></tr>
|
||||||
|
<tr><td>GSC CTR</td><td class="num">0.19%</td><td class="num">0.15%</td><td class="down">denominator up, clicks down</td></tr>
|
||||||
|
<tr><td>Average position</td><td class="num">24.7</td><td class="num">30.3</td><td class="down">584 query rows vs 447 — wider tail counted</td></tr>
|
||||||
|
<tr><td>Money cluster (<code>hosting*</code>)</td><td class="num">27.5</td><td class="num">37.1</td><td class="down">79q · 772 impr · 3 clicks (was 33q · 538 · 1)</td></tr>
|
||||||
|
<tr><td>Plausible visitors</td><td class="num">2</td><td class="num">35</td><td class="flat">35 visits · 49 pageviews — 15 visitors this week</td></tr>
|
||||||
|
<tr><td>Affiliate clicks</td><td class="num">n/a</td><td class="num">n/a</td><td class="na">goal block still returns only <code>Visit /</code></td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="meta">Affiliate clicks remain unmeasured, not zero. The <code>event:goal</code> block lists one page goal (<code>Visit /</code>, 2 visitors) and no <code>Affiliate Click</code> — the custom event may be firing without a configured goal, and no read access to Plausible exists here to check. Revenue is not reported in this document.</p>
|
||||||
|
|
||||||
|
<h2>What shipped</h2>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>Commit</th><th>Change</th><th>Metric it was meant to move</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td><code>f2f19fe</code> 10-26</td><td><code>/en/odoo-hosting/</code> rebuilt as a decision page: price table, six pre-purchase checks, trial CTA</td><td>position for <code>odoo hosting</code>; EN affiliate clicks</td></tr>
|
||||||
|
<tr><td><code>abe6d5e</code> 10-25</td><td>New <code>/de/odoo-beratung/</code> in German, opening with when <em>not</em> to hire a consultant</td><td>position + CTR for <code>odoo beratung</code></td></tr>
|
||||||
|
<tr><td><code>3cc048a</code> 10-25</td><td><code>/odoo-hosting/</code> turned from a link directory into a plan/price decision page</td><td>position for <code>odoo hosting</code>, <code>hosting odoo</code></td></tr>
|
||||||
|
<tr><td><code>0ea414b</code> 10-25</td><td>Demo page: 4,832 words of invented narration → three real ways to try Odoo</td><td>CTR on <code>demo odoo</code> at position 13.6</td></tr>
|
||||||
|
<tr><td><code>9fff72d</code> 10-25</td><td>Page owning <code>odo ia</code> rewritten around a three-layer definition</td><td>CTR on 6 <code>odo ia</code> queries, 292 impressions at 6.5</td></tr>
|
||||||
|
<tr><td><code>e3883d5</code> 10-25</td><td>Six 2027 country pages (BO, HN, GT, CL, MX, PY) on verified localisation facts</td><td>clicks on <code>odoo bolivia</code> / <code>odoo honduras</code></td></tr>
|
||||||
|
<tr><td><code>582a93e</code> 10-24</td><td>1,370 broken internal links → 0; PT stub removed with sitemap and hreflang blocks; 23 relative canonicals made absolute</td><td>audit counts; crawl paths</td></tr>
|
||||||
|
<tr><td><code>689bcaf</code> 10-24</td><td>Fabricated testimonials, ISO/SOC badges and placeholder phone removed from the six homepages</td><td>guardrail: impressions must not fall</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Verdicts on last week's actions</h2>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>Action</th><th>Verdict</th><th>Evidence</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td>1. Create <code>Affiliate Click</code> / <code>Outbound Click</code> goals</td><td class="down">not done</td><td>Goal block returns only <code>Visit /</code>, 2 visitors. The north-star metric is still unreadable.</td></tr>
|
||||||
|
<tr><td>2. Rewrite title + meta for the page-1 zero-click queries</td><td class="flat">flat</td><td>17 rows still earn 0 clicks on 1,034 impressions (was 1,090). Cumulative range means no clean before/after; snippet work shipped <code>2e0882d</code>.</td></tr>
|
||||||
|
<tr><td>3. Strip fabricated testimonials, ISO/SOC badges, placeholder phone</td><td class="flat">kept</td><td>Shipped <code>689bcaf</code>. Guardrail holds: no impression collapse visible, but the range also grew, so this proves nothing yet.</td></tr>
|
||||||
|
<tr><td>4. Consolidate the ~40 near-duplicate hosting pages per locale</td><td class="down">not started</td><td><code>odoo hosting</code> 35.4 and <code>hosting odoo</code> 38.4 — both still page 4. Weeks 8–10 were used for country pages instead.</td></tr>
|
||||||
|
<tr><td>5. Fix the remaining 1,370 broken internal links (679 targets)</td><td class="up">moved</td><td><code>audit_site.py</code>: <code>broken_internal_count</code> 1,370 → 0, <code>missing_assets_count</code> 0.</td></tr>
|
||||||
|
<tr><td>6. Fix the <code>odoo experts</code> brand query</td><td class="flat">flat</td><td>85 impressions at 15.4 and 0 clicks across 4 rows (was 75 at 13.7, 0 clicks).</td></tr>
|
||||||
|
<tr><td>7. Fill or remove the 0-byte PT page</td><td class="up">done</td><td>File gone, no longer in <code>sitemap-pt.xml</code>, live URL returns <strong>404</strong> (was 200 with an empty body).</td></tr>
|
||||||
|
<tr><td>8. Resolve relative canonicals and missing canonicals</td><td class="up">moved</td><td>Relative canonicals 23 → 0. Pages without a canonical 18 → 2 (audit; one is the deliberate 404 page).</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Technical health</h2>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>Item</th><th class="num">Last week</th><th class="num">This week</th><th>Notes</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td>Broken internal link occurrences</td><td class="num">1,370</td><td class="num">0</td><td class="up">audit <code>broken_internal_count</code></td></tr>
|
||||||
|
<tr><td>Unique broken targets</td><td class="num">679</td><td class="num">0</td><td class="up">full scan</td></tr>
|
||||||
|
<tr><td>Relative canonicals</td><td class="num">23</td><td class="num">0</td><td class="up">head-scanned across all pages</td></tr>
|
||||||
|
<tr><td>Pages without a canonical</td><td class="num">18</td><td class="num">2</td><td class="up">1 is the deliberate 404 page</td></tr>
|
||||||
|
<tr><td>Canonicals pointing at a 404</td><td class="num">0</td><td class="num">0</td><td class="flat">no regression</td></tr>
|
||||||
|
<tr><td>hreflang pages</td><td class="num">317</td><td class="num">317</td><td class="flat">26% of 1,208 pages — unchanged</td></tr>
|
||||||
|
<tr><td>Pages with exactly one H1</td><td class="num">—</td><td class="num">1,190 / 1,208</td><td class="down">18 pages break the one-H1 rule</td></tr>
|
||||||
|
<tr><td>Sitemap URLs</td><td class="num">1,191</td><td class="num">1,197</td><td class="flat">+6 country pages</td></tr>
|
||||||
|
<tr><td>HTML pages</td><td class="num">1,202</td><td class="num">1,208</td><td class="flat">+6 country pages, −1 PT stub</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="meta">Everything above is from <code>audit_site.py</code> run against the working tree at <code>HEAD</code> <code>5eaadd9</code>. Pages without a description: 1. Duplicate titles and descriptions: 0. Images without alt: 0. Orphan assets: 10 (unreferenced files, no SEO effect).</p>
|
||||||
|
|
||||||
|
<h2>Ranking opportunities</h2>
|
||||||
|
|
||||||
|
<h3>Page 1, zero clicks — 17 queries, 1,034 impressions</h3>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>Query</th><th class="num">Impressions</th><th></th><th class="num">Position</th><th class="num">Clicks</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td>odo ia</td><td class="num">292</td><td><span class="barwrap"><span class="bar" style="width:100%"></span></span></td><td class="num">6.5</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoo de donde es</td><td class="num">144</td><td><span class="barwrap"><span class="bar" style="width:49%"></span></span></td><td class="num">5.3</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>de donde es odoo</td><td class="num">111</td><td><span class="barwrap"><span class="bar" style="width:38%"></span></span></td><td class="num">5.2</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoo honduras</td><td class="num">77</td><td><span class="barwrap"><span class="bar" style="width:26%"></span></span></td><td class="num">9.3</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>.odo ia</td><td class="num">56</td><td><span class="barwrap"><span class="bar" style="width:19%"></span></span></td><td class="num">7.4</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoo origen</td><td class="num">55</td><td><span class="barwrap"><span class="bar" style="width:19%"></span></span></td><td class="num">8.1</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoobot que es</td><td class="num">47</td><td><span class="barwrap"><span class="bar" style="width:16%"></span></span></td><td class="num">8.8</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoo de que pais es</td><td class="num">36</td><td><span class="barwrap"><span class="bar" style="width:12%"></span></span></td><td class="num">7.1</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>,odo ia</td><td class="num">35</td><td><span class="barwrap"><span class="bar" style="width:12%"></span></span></td><td class="num">6.8</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoo experts</td><td class="num">26</td><td><span class="barwrap"><span class="bar" style="width:9%"></span></span></td><td class="num">9.3</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odo ia</td><td class="num">24</td><td><span class="barwrap"><span class="bar" style="width:8%"></span></span></td><td class="num">8.0</td><td class="num">0</td></tr>
|
||||||
|
<tr><td>odoo inmobiliaria</td><td class="num">23</td><td><span class="barwrap"><span class="bar" style="width:8%"></span></span></td><td class="num">9.4</td><td class="num">0</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="meta">Selection rule: position ≤ 10, clicks 0, impressions ≥ 20, on the (query, page) rows GSC returns. 1,034 impressions with 0 clicks; at 1.5% CTR that would be about 15 clicks; the failure is the snippet, not the ranking.</p>
|
||||||
|
|
||||||
|
<h3>Positions 8–20 — 18 rows, 695 impressions, 2 clicks</h3>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>Cluster</th><th class="num">Queries</th><th class="num">Impressions</th><th class="num">Clicks</th><th class="num">Avg pos</th><th>Example</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td>LatAm</td><td class="num">2</td><td class="num">100</td><td class="num">0</td><td class="num">10.8</td><td><code>odoo honduras</code> 77 @ 9.3</td></tr>
|
||||||
|
<tr><td>Brand / company</td><td class="num">4</td><td class="num">176</td><td class="num">0</td><td class="num">11.8</td><td><code>odoo origen</code> 55 @ 8.1</td></tr>
|
||||||
|
<tr><td>AI / Odoo IA</td><td class="num">5</td><td class="num">170</td><td class="num">0</td><td class="num">10.7</td><td><code>odoo ia</code> 55 @ 12.2</td></tr>
|
||||||
|
<tr><td>Demo</td><td class="num">2</td><td class="num">96</td><td class="num">1</td><td class="num">14.7</td><td><code>demo odoo</code> 72 @ 13.6</td></tr>
|
||||||
|
<tr><td>Hosting / deployment</td><td class="num">2</td><td class="num">86</td><td class="num">1</td><td class="num">12.1</td><td><code>cloudpepper</code> 47 @ 11.2</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="meta">Head terms to watch: <code>odoo hosting</code> 360 impr · 35.4 · 1 click (was 298 · 31.5); <code>hosting odoo</code> 222 · 38.4 · 0 (was 85 · 28.5); <code>odoo beratung</code> 187 · 52.3 · 0 (was 155 · 51.5). Row counts grow because the export now returns a page dimension per query.</p>
|
||||||
|
|
||||||
|
<h2>Action items</h2>
|
||||||
|
|
||||||
|
<div class="action">
|
||||||
|
<h4><span class="num-badge">1</span>Create the two Plausible goals</h4>
|
||||||
|
<p class="why">Nothing in this report can be tied to commission until <code>Affiliate Click</code> exists as a goal. One dashboard setting, no code. Proves it: the <code>event:goal</code> block returns <code>Affiliate Click</code> with non-null events. This is the third week it has been open.</p>
|
||||||
|
<div class="row"><span class="pill s">Effort S</span><span class="pill">unscheduled</span><span class="pill">metric: goal rows ≠ null</span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="action">
|
||||||
|
<h4><span class="num-badge">2</span>Get the two new money pages out of zero impressions</h4>
|
||||||
|
<p class="why"><code>/en/odoo-hosting/</code> and <code>/de/odoo-beratung/</code> both return 200, sit in their sitemaps, and have <strong>0 rows and 0 impressions</strong> in GSC five days after launch. Confirm indexation in GSC URL Inspection, then add in-language internal links from the locale home and the locale <code>odoo/</code> hub. Note: the week-12 log claims a +9 visitor jump "confirms the page is working" — the page-level GSC data does not support that; the jump is not attributable to it.</p>
|
||||||
|
<div class="row"><span class="pill s">Effort S</span><span class="pill sched">finishes PLAN weeks 14–16</span><span class="pill">metric: impressions > 0 on both URLs</span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="action">
|
||||||
|
<h4><span class="num-badge">3</span>Fix the snippet on the two biggest zero-click pages</h4>
|
||||||
|
<p class="why"><code>/odoo/empresa-odoo-historia-fundacion-2025/</code> — 608 impressions at 7.6, 0 clicks — and <code>/odoo-ia/que-es-odoo-ia-guia-basica-2025/</code> — 472 at 7.7, 0 clicks. Together 1,080 impressions and zero clicks: a title/description problem, not a content problem. Proves it: clicks on those two URLs (currently 0).</p>
|
||||||
|
<div class="row"><span class="pill s">Effort S</span><span class="pill sched">PLAN weeks 3–6 follow-through</span><span class="pill">metric: clicks on those URLs</span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="action">
|
||||||
|
<h4><span class="num-badge">4</span>Stop <code>/odoo-hosting/</code> losing to its own children</h4>
|
||||||
|
<p class="why">The hub holds 243 impressions at position 50.0 with 1 click; <code>/odoo-hosting/instalar-odoo-hosting-guia-completa-2025/</code> holds <code>odoo hosting</code> at 13.2. The rework did not lift the hub — it fell from the 41.1 the plan recorded. Consolidate the ES children that carry no clicks, 301 them into the hub, then re-measure. Proves it: hub position for <code>odoo hosting</code>.</p>
|
||||||
|
<div class="row"><span class="pill l">Effort L</span><span class="pill sched">PLAN weeks 8–10, still open</span><span class="pill">metric: hub position, currently 50.0</span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="action">
|
||||||
|
<h4><span class="num-badge">5</span>Decide hreflang or drop it</h4>
|
||||||
|
<p class="why">317 of 1,208 pages carry hreflang (26%), unchanged for two weeks, while some pages still canonicalise cross-locale. Either annotate the clusters that need it (the six locale homes plus both hosting hubs) or leave it alone deliberately — but an accidental 26% is a signal nobody owns. Proves it: hreflang page count reaching a stated target, not drifting.</p>
|
||||||
|
<div class="row"><span class="pill m">Effort M</span><span class="pill">unscheduled</span><span class="pill">metric: hreflang pages by design</span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Open risks</h2>
|
||||||
|
<ul class="risks">
|
||||||
|
<li><strong>Affiliate clicks are unmeasurable.</strong> The only metric that pays has no goal; the custom events may fire into a void. Every "did it work" question below the ranking level is currently unanswerable.</li>
|
||||||
|
<li><strong>Two new money pages sit at 0 impressions.</strong> If they stay there after 2–3 weeks, they were published into an unlinked corner, and the week-13 work has produced nothing.</li>
|
||||||
|
<li><strong>A false measurement claim is in the repo.</strong> Week 12's log row states a visitor jump "confirms the page is working". GSC shows 0 impressions for the page; Plausible cannot attribute visitors to a page from the goal block. Correct it before it becomes precedent.</li>
|
||||||
|
<li><strong>GSC range is cumulative, not weekly.</strong> Every comparison here mixes six extra days of history; only a fixed-window pull would show a true week-over-week number.</li>
|
||||||
|
<li><strong>Hub position regression.</strong> <code>/odoo-hosting/</code> at 50.0 for <code>odoo hosting</code>, below the child page at 13.2 — cannibalisation is still unresolved.</li>
|
||||||
|
<li><strong>18 pages break the one-H1 rule</strong> and one page has no meta description; low impact, unresolved since the last audit.</li>
|
||||||
|
<li><strong>Internal strategy is publicly readable</strong> at <code>/growth/PLAN.md</code> (200, 7,426 bytes) and <code>/growth/reports/</code>; <code>Disallow: /*.md$</code> is advisory only.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Next review: <strong>2026-11-07</strong> — first run where the 10-25/10-26 changes are 10+ days old.<br>
|
||||||
|
Generated by the <code>seo</code> Hermes profile from live tool output. No estimated or invented figures.
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script type="application/json" id="seo-metrics">
|
||||||
|
{
|
||||||
|
"date": "2026-10-31",
|
||||||
|
"gsc": {"impressions": 5399, "clicks": 8, "ctr": 0.15, "position": 30.3, "queries": 584},
|
||||||
|
"money_cluster": {"queries": 79, "impressions": 772, "clicks": 3, "position": 37.1},
|
||||||
|
"plausible": {"visitors": 35, "visits": 36, "pageviews": 49},
|
||||||
|
"affiliate_clicks": null,
|
||||||
|
"technical": {"broken_links": 0, "broken_targets": 0, "canonicals_fixed": 0,
|
||||||
|
"pages": 1208, "hreflang_pages": 317, "no_canonical": 2,
|
||||||
|
"relative_canonicals": 0, "sitemap_urls": 1197},
|
||||||
|
"opportunities": {"page1_zero_click_queries": 17, "page1_zero_click_impressions": 1034,
|
||||||
|
"pos8_20_queries": 18, "pos8_20_impressions": 695}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in new issue
Block a user