|
1 | 1 | # Monthly SEO Keyword Strategy Review (getathenic.com) |
2 | 2 |
|
3 | | -**Review date:** 2026-03-09 |
| 3 | +**Review date:** 2026-03-19 |
4 | 4 | **Primary goal:** identify keyword opportunities to grow *qualified organic traffic* and improve click-through-rate (CTR) on high-impression pages. |
5 | 5 |
|
6 | | -## Data sources used (this month) |
| 6 | +## Data sources used (this review) |
7 | 7 |
|
8 | | -1. **Google Search Console** (last 28 days: **2026-02-09 → 2026-03-07**, vs previous 28 days: **2026-01-12 → 2026-02-08**) |
9 | | -2. **Google Ads Keyword Planner**: *attempted but blocked by API configuration error* (invalid Google Ads Customer ID formatting). This document therefore uses Search Console as the ground truth for “real demand we’re already showing for”, which is typically more actionable than planner estimates. |
| 8 | +1. **Google Search Console** (last 28 days: **2026-02-19 → 2026-03-18**, vs previous 28 days: **2026-01-22 → 2026-02-18**) |
| 9 | +2. **Google Ads Keyword Planner**: attempted again, but the API integration is still failing due to an invalid configured Google Ads Customer ID. |
| 10 | + |
| 11 | +**Keyword Planner error (actionable fix):** |
| 12 | +- Error returned by API: `GOOGLE_ADS_CUSTOMER_ID is invalid: "476-798-8021\n"` (note the trailing newline) |
| 13 | +- Fix: update the configured customer ID to a valid **10-digit** value *with no whitespace/newlines* (dashes are fine: `123-456-7890`). |
10 | 14 |
|
11 | 15 | --- |
12 | 16 |
|
13 | | -## Executive summary (what changed this month) |
| 17 | +## Executive summary (what changed vs last review) |
| 18 | + |
| 19 | +### 1) Visibility step-change: “comparison” content is now earning large impression volume |
| 20 | +Across the last 28 days, multiple comparison pages moved into a pattern of: |
| 21 | +- **Avg position ~6–7** (top 10) |
| 22 | +- **Tens of thousands of impressions** |
| 23 | +- **Very low CTR** (often **< 0.07%**) → the site is *being shown*, but searchers aren’t choosing the snippet. |
| 24 | + |
| 25 | +This is the highest-leverage SEO work for the next 30 days. |
| 26 | + |
| 27 | +### 2) New cluster with real click volume: Linear vs Plane vs Height |
| 28 | +The page `/blog/linear-vs-height-vs-plane-project-management` is now a top click driver. |
| 29 | +- **28 clicks / 2,172 impressions / 1.29% CTR / avg position 6.30** |
| 30 | + |
| 31 | +This is a strong signal to expand into adjacent “project management tool comparison” head-to-heads. |
| 32 | + |
| 33 | +### 3) New high-impression / zero-click opportunity: HubSpot vs ActiveCampaign (AI features) |
| 34 | +The page `/blog/hubspot-activecampaign-ai-agents-comparison` has meaningful visibility but no traffic yet. |
| 35 | +- **0 clicks / 2,820 impressions / 0.00% CTR / avg position 8.58** |
14 | 36 |
|
15 | | -### 1) Biggest immediate upside: improve CTR on pages already ranking in positions ~5–8 |
16 | | -Several pages have **very large impression volume** and **average position inside the top 10**, but **CTR near ~0.05%–0.08%**. This is usually a snippet + intent-match problem (title/meta, SERP features, missing “pricing / free tier / 2026” modifiers). |
| 37 | +This is almost certainly a title/meta + intent-match issue. |
| 38 | + |
| 39 | +--- |
| 40 | + |
| 41 | +## Biggest immediate upside: CTR improvement on pages already ranking in positions ~5–8 |
17 | 42 |
|
18 | 43 | **Top CTR-upside pages (last 28 days):** |
19 | 44 |
|
20 | 45 | | Page | Clicks | Impressions | CTR | Avg position | |
21 | 46 | |---|---:|---:|---:|---:| |
22 | | -| /blog/vercel-vs-railway-vs-render-ai-deployment | 10 | 18,628 | 0.054% | 6.40 | |
23 | | -| /blog/stripe-vs-paddle-vs-lemon-squeezy-saas-billing | 10 | 13,268 | 0.075% | 6.36 | |
24 | | -| /blog/claude-vs-gpt4o-vs-gemini-enterprise-comparison | 3 | 22,400 | 0.013% | 5.84 | |
25 | | -| /blog/supabase-vs-firebase-vs-convex-ai-backend | 5 | 6,593 | 0.076% | 7.03 | |
26 | | -| /blog/pinecone-vs-weaviate-vs-qdrant-vs-chroma-vector-search | 4 | 5,330 | 0.075% | 7.56 | |
| 47 | +| /blog/claude-vs-gpt4o-vs-gemini-enterprise-comparison | 6 | 31,192 | 0.019% | 6.01 | |
| 48 | +| /blog/vercel-vs-railway-vs-render-ai-deployment | 12 | 23,395 | 0.051% | 6.49 | |
| 49 | +| /blog/stripe-vs-paddle-vs-lemon-squeezy-saas-billing | 9 | 16,534 | 0.054% | 6.27 | |
| 50 | +| /blog/pinecone-vs-weaviate-vs-qdrant-vs-pgvector | 6 | 10,431 | 0.058% | 6.85 | |
| 51 | +| /blog/supabase-vs-firebase-vs-convex-ai-backend | 5 | 7,869 | 0.064% | 7.16 | |
| 52 | +| /blog/hubspot-activecampaign-ai-agents-comparison | 0 | 2,820 | 0.000% | 8.58 | |
27 | 53 |
|
28 | | -### 2) Notable “trend / emergence” signals |
29 | | -Compared to the prior 28 days, the site started showing meaningful demand for: |
| 54 | +**What this means in clicks (illustrative):** |
| 55 | +- If `/blog/claude-vs-gpt4o-vs-gemini-enterprise-comparison` moves from **0.019% → 0.20% CTR**, that’s roughly **+56 clicks / 28 days** at current impressions. |
| 56 | +- If `/blog/vercel-vs-railway-vs-render-ai-deployment` moves from **0.051% → 0.20% CTR**, that’s roughly **+35 clicks / 28 days**. |
30 | 57 |
|
31 | | -- **railway vs vercel**: 238 impressions (was 4) → *major jump*. |
32 | | -- **paddle vs lemon squeezy** and related Lemon Squeezy fee/pricing variants → *new and growing set*. |
33 | | -- Continued demand for **e2b vs modal** and related runtime/sandbox comparisons. |
34 | | - |
35 | | -### 3) Service terms (“bespoke web design”) are not currently competitive |
36 | | -The page `/blog/bespoke-web-design-complete-guide-2026` is currently showing **very low impressions** and **very weak average positions** for the core head terms: |
| 58 | +--- |
37 | 59 |
|
38 | | -- “bespoke web design” (avg position ~80) |
39 | | -- “bespoke web development” (avg position ~93) |
| 60 | +## Biggest movers (last 28 days vs previous 28 days) |
40 | 61 |
|
41 | | -This suggests the site’s topical authority is currently stronger around “X vs Y” comparison queries than around agency/service terms. If bespoke web design remains a core revenue driver, we need **dedicated landing pages** + **supporting cluster content**. |
| 62 | +| Page | Clicks (prev → now) | Impressions (prev → now) | Note | |
| 63 | +|---|---:|---:|---| |
| 64 | +| /blog/stripe-vs-paddle-vs-lemon-squeezy-saas-billing | 4 → 9 | 1,378 → 16,534 | major impression growth; CTR now the bottleneck | |
| 65 | +| /blog/vercel-vs-railway-vs-render-ai-deployment | 2 → 12 | 2,018 → 23,395 | huge visibility gain; snippet underperforming | |
| 66 | +| /blog/e2b-vs-modal-vs-flyio-sandbox-comparison | 44 → 9 | 3,511 → 3,808 | clicks down sharply; monitor ranking + intent drift | |
| 67 | +| /blog/linear-vs-height-vs-plane-project-management | (not top 50) → 28 | (not top 50) → 2,172 | new high-performing cluster | |
| 68 | +| /blog/postman-vs-insomnia-vs-bruno-api-testing | (not top 50) → 32 | (not top 50) → 3,644 | strong performer; expand variants | |
42 | 69 |
|
43 | 70 | --- |
44 | 71 |
|
45 | 72 | ## Updated keyword clusters (prioritized) |
46 | 73 |
|
47 | | -### Cluster A (P0): Deployment platforms for apps/AI workloads |
48 | | -**Why P0:** highest impressions, page already ranks in top 10; CTR is extremely low. |
| 74 | +### Cluster A (P0): LLM model comparisons (Enterprise: Claude vs GPT-4o vs Gemini) |
| 75 | +**Why P0:** *largest impressions on the site* with average position ~6 and near-zero CTR. |
49 | 76 |
|
50 | | -**Core keywords (observed demand):** |
51 | | -- railway vs vercel (238 impressions, pos ~3.5) |
52 | | -- vercel vs railway (165 impressions, pos ~4.45) |
53 | | -- railway vs vercel comparison 2026 (50 impressions, pos ~4.74) |
54 | | -- railway free tier limits 2026 (18 impressions, pos ~10.78) |
55 | | -- railway vs render pricing 2026 (11 impressions, pos ~9.91) |
| 77 | +**Observed demand patterns (Search Console):** |
| 78 | +- Many “best model for X” use-case modifiers (e.g. *HTML extraction*, *PDF to markdown*, *legal translation*). |
| 79 | +- Broad “best AI / best LLM” in multiple languages → suggests the page is being used by Google as a generic candidate, which can be good for impressions but bad for CTR if the snippet doesn’t match. |
56 | 80 |
|
57 | 81 | **Page mapping:** |
58 | | -- Primary: `/blog/vercel-vs-railway-vs-render-ai-deployment` |
| 82 | +- Primary: `/blog/claude-vs-gpt4o-vs-gemini-enterprise-comparison` |
59 | 83 |
|
60 | 84 | **Recommendations (next 30 days):** |
61 | | -- Rewrite title/meta to explicitly include **“Railway vs Vercel (2026)”** and one differentiator: *pricing*, *free tier*, *DX*, *long-running services*, *AI workloads*. |
62 | | -- Add a short **“2026 pricing / free tier”** section near the top; many query modifiers indicate price sensitivity. |
63 | | -- Add FAQ section targeting: “Is Railway cheaper than Vercel?”, “Does Railway support GPUs?”, “Railway free tier limits 2026”. |
| 85 | +- Title/meta: make the promise explicit and click-worthy: **“Claude vs GPT-4o vs Gemini (2026): price, context, latency, benchmarks”**. |
| 86 | +- Add a “Use-cases” jump table near the top (HTML extraction, long-doc parsing, coding, RAG), so the snippet better matches the long-tail. |
| 87 | +- Add an FAQ section with exact-match questions ("best model for html data extraction", "best llm for pdf to markdown"). |
64 | 88 |
|
65 | 89 | --- |
66 | 90 |
|
67 | | -### Cluster B (P0): SaaS billing / Merchant of Record comparisons |
68 | | -**Why P0:** very high impressions; many query variants around pricing/fees. |
| 91 | +### Cluster B (P0): Deployment platforms for apps/AI workloads (Vercel vs Railway vs Render) |
| 92 | +**Why P0:** very high impressions; page already ranks in top 10; CTR still extremely low. |
69 | 93 |
|
70 | | -**Core keywords (observed demand):** |
71 | | -- paddle vs lemon squeezy (120 impressions, pos ~7.83) |
72 | | -- lemon squeezy vs paddle (96 impressions, pos ~7.40) |
73 | | -- lemon squeezy vs paddle vs stripe (31 impressions, pos ~5.97) |
74 | | -- compare stripe tax vs paddle (39 impressions, pos ~6.62) |
75 | | -- lemon squeezy pricing 5% + $0.50 (17 impressions, pos ~10.35) |
| 94 | +**Observed modifiers to capture:** |
| 95 | +- **free tier limits / pricing** |
| 96 | +- **GPU support** |
| 97 | +- “Railway vs Render (2026)” variants |
76 | 98 |
|
77 | 99 | **Page mapping:** |
78 | | -- Primary: `/blog/stripe-vs-paddle-vs-lemon-squeezy-saas-billing` |
| 100 | +- Primary: `/blog/vercel-vs-railway-vs-render-ai-deployment` |
79 | 101 |
|
80 | | -**Recommendations (next 30 days):** |
81 | | -- Tighten snippet to match intent: include “**fees**”, “**Merchant of Record**”, “**Stripe Tax**”, and “**pricing (2026)**”. |
82 | | -- Add a “Fees calculator” style table (even static) to win clicks for the recurring “5% + $0.50” searches. |
83 | | -- Add internal links from adjacent finance content (Atlas article) using anchors like “paddle vs lemon squeezy” and “merchant of record”. |
| 102 | +**Recommendations:** |
| 103 | +- Add a visible **Pricing / Free tier (2026)** table above the fold. |
| 104 | +- Add FAQ targeting: “Railway free tier limits 2026”, “Does Railway support GPUs?”, “Railway vs Render pricing 2026”. |
| 105 | +- Consider 1 supporting page if this query class continues to grow: |
| 106 | + - `Railway free tier limits (2026): what you get + when you pay` |
84 | 107 |
|
85 | 108 | --- |
86 | 109 |
|
87 | | -### Cluster C (P0): Backend-as-a-Service (BaaS) decisions (Supabase / Convex / Firebase) |
88 | | -**Why P0:** clear head-term demand with solid positions (~3–5) but near-zero CTR → snippet mismatch. |
| 110 | +### Cluster C (P0): SaaS billing / Merchant of Record (Stripe vs Paddle vs Lemon Squeezy) |
| 111 | +**Why P0:** very high impressions; recurring “fees/pricing” intent; current snippet under-matches. |
89 | 112 |
|
90 | | -**Core keywords (observed demand):** |
91 | | -- convex vs supabase (290 impressions, pos ~4.56) |
92 | | -- supabase vs convex (186 impressions, pos ~4.76) |
93 | | -- convex vs firebase (40 impressions, pos ~7.9) |
94 | | -- convex vs firebase vs supabase (30 impressions, pos ~6.87) |
| 113 | +**Observed modifiers to capture:** |
| 114 | +- “Stripe Tax vs Paddle” |
| 115 | +- “Lemon Squeezy pricing 5% + $0.50” |
95 | 116 |
|
96 | 117 | **Page mapping:** |
97 | | -- Primary: `/blog/supabase-vs-firebase-vs-convex-ai-backend` |
| 118 | +- Primary: `/blog/stripe-vs-paddle-vs-lemon-squeezy-saas-billing` |
98 | 119 |
|
99 | | -**Recommendations (next 30 days):** |
100 | | -- Adjust title to explicitly include “**Convex vs Supabase**” (since that’s the dominant head-to-head in Search Console). |
101 | | -- Add a “Who should choose Convex vs Supabase?” block at the top. |
102 | | -- Add FAQ: “Is Convex better than Supabase?”, “Convex pricing vs Firebase”, “Supabase to Convex migration”. |
| 120 | +**Recommendations:** |
| 121 | +- Add a fee-breakdown table that explicitly includes **“5% + $0.50”** wording. |
| 122 | +- Add a dedicated on-page section “Stripe Tax vs Paddle: what’s different?” |
| 123 | +- Consider 1 supporting page: |
| 124 | + - `Lemon Squeezy pricing explained: 5% + $0.50 (examples + calculator)` |
103 | 125 |
|
104 | 126 | --- |
105 | 127 |
|
106 | | -### Cluster D (P1): API testing tools (Postman / Insomnia / Bruno) |
107 | | -**Why P1:** consistent clicks, but there are still many variants you can capture with better intent alignment. |
| 128 | +### Cluster D (P0): BaaS decisions (Convex vs Supabase vs Firebase) |
| 129 | +**Why P0:** strong head-term visibility; the head query is getting impressions but not clicks. |
108 | 130 |
|
109 | | -**Core keywords (observed demand):** |
110 | | -- insomnia vs bruno (116 impressions, 3 clicks, pos ~6.07) |
111 | | -- postman vs insomnia vs bruno (59 impressions, 2 clicks, pos ~2.97) |
112 | | -- bruno vs postman vs insomnia (72 impressions, 2 clicks, pos ~3.58) |
| 131 | +**Evidence:** |
| 132 | +- Query → page mapping: `convex vs supabase` → `/blog/supabase-vs-firebase-vs-convex-ai-backend` |
| 133 | +- For `convex vs supabase`: **267 impressions / 0 clicks / avg position 5.01** |
| 134 | + |
| 135 | +**Recommendations:** |
| 136 | +- Adjust title to lead with the dominant head-to-head: **“Convex vs Supabase (vs Firebase) (2026)”**. |
| 137 | +- Add an above-the-fold “Who should pick Convex vs Supabase?” summary. |
| 138 | +- Add FAQ: “Is Convex better than Supabase?”, “Convex pricing vs Firebase”, “Supabase to Convex migration”. |
| 139 | + |
| 140 | +--- |
| 141 | + |
| 142 | +### Cluster E (P1): API testing tools (Postman vs Insomnia vs Bruno) |
| 143 | +**Why P1:** already the top click driver; expand to capture variant head-to-heads. |
113 | 144 |
|
114 | 145 | **Page mapping:** |
115 | 146 | - Primary: `/blog/postman-vs-insomnia-vs-bruno-api-testing` |
116 | 147 |
|
117 | 148 | **Recommendations:** |
118 | | -- Add sections for “Bruno vs Postman” and “Insomnia vs Postman” as explicit H2s; those variants show up with impressions but low clicks. |
| 149 | +- Add explicit H2s for “Bruno vs Postman” and “Insomnia vs Postman”. |
| 150 | +- Add a short “Which should you use in 2026?” decision tree. |
119 | 151 |
|
120 | 152 | --- |
121 | 153 |
|
122 | | -### Cluster E (P2): Bespoke web design / custom website (commercial intent) |
123 | | -**Why P2:** this is commercial-intent but currently not ranking well. |
| 154 | +### Cluster F (P1): Project management tools (Linear vs Plane vs Height) |
| 155 | +**Why P1:** strong CTR + meaningful clicks; easy adjacent expansion. |
| 156 | + |
| 157 | +**Page mapping:** |
| 158 | +- Primary: `/blog/linear-vs-height-vs-plane-project-management` |
| 159 | + |
| 160 | +**Next keywords/pages to add (based on observed demand + adjacent SERPs):** |
| 161 | +- Linear vs Height |
| 162 | +- Linear vs Plane |
| 163 | +- Linear vs Jira vs Asana (already getting impressions) |
| 164 | +- Linear vs Asana (already getting impressions) |
| 165 | + |
| 166 | +--- |
124 | 167 |
|
125 | | -**Observed keywords (low visibility):** |
126 | | -- bespoke web design (3 impressions, avg pos ~80) |
127 | | -- bespoke web development (1 impression, avg pos ~93) |
| 168 | +### Cluster G (P1): Marketing automation AI features (HubSpot vs ActiveCampaign) |
| 169 | +**Why P1:** substantial impressions with **0 clicks** and average position ~8.6. |
128 | 170 |
|
129 | 171 | **Page mapping:** |
130 | | -- Current: `/blog/bespoke-web-design-complete-guide-2026` |
| 172 | +- Primary: `/blog/hubspot-activecampaign-ai-agents-comparison` |
131 | 173 |
|
132 | | -**Recommendations (strategy shift):** |
133 | | -- Create a **dedicated landing page** (not a blog post) targeting: “Bespoke web design”, “custom web design”, “bespoke website”, “web design for startups”. |
134 | | -- Build supporting cluster posts: |
135 | | - - “Custom website vs template: ROI breakdown” |
136 | | - - “Website redesign checklist (2026)” (already exists—strengthen internal linking) |
137 | | - - “Next.js website builder guide” (already exists—link to bespoke landing page) |
| 174 | +**Recommendations:** |
| 175 | +- Title/meta must explicitly match the dominant query framing: |
| 176 | + - include “**AI features**”, “**marketing automation**”, and “**2026**”. |
| 177 | +- Add an above-the-fold comparison table that includes the words users search (AI features, personalization, segmentation, deliverability, workflows). |
138 | 178 |
|
139 | 179 | --- |
140 | 180 |
|
141 | | -## Deprioritize / exclude (this month) |
| 181 | +### Cluster H (P2): Vector database comparisons |
| 182 | +**Why P2:** high impressions, moderate clicks; CTR improvement still useful but secondary to the top 3 clusters. |
| 183 | + |
| 184 | +**Page mapping:** |
| 185 | +- `/blog/pinecone-vs-weaviate-vs-qdrant-vs-pgvector` |
| 186 | +- `/blog/pinecone-vs-weaviate-vs-qdrant-vector-databases` |
| 187 | + |
| 188 | +--- |
142 | 189 |
|
143 | | -These are showing in Search Console but are either noise, low relevance, or not aligned to the site’s strategy: |
| 190 | +## Deprioritize / exclude (this month) |
144 | 191 |
|
145 | | -- One-word/no-intent queries: `english`, `yes` |
146 | | -- Very long prompt-like “evaluate the company…” queries (likely LLM-generated searches). Treat as **non-primary**; do not build pages specifically for them. |
147 | | -- Misspellings with negligible volume (`anthenic`, `athenics`) → handle via minor copy tweaks if desired, but don’t prioritize. |
| 192 | +1. **One-word/no-intent queries**: `english`, `yes`, and other noise. |
| 193 | +2. **Prompt-like “evaluate the company…” queries**: treat as non-primary. Don’t build dedicated pages for these. |
| 194 | +3. **Quoted code/token queries** (e.g. library import strings): these create impressions but rarely drive qualified traffic. Avoid optimizing titles/meta toward these; keep content readable and well-structured. |
148 | 195 |
|
149 | 196 | --- |
150 | 197 |
|
151 | 198 | ## 30-day action plan (SEO execution) |
152 | 199 |
|
153 | | -1. **CTR sprint (highest ROI):** update titles/meta + top-of-article summaries for the P0 clusters (Deployment, Billing, BaaS). Target +0.3% CTR on the two biggest pages. |
154 | | -2. **Create 2 supporting pages** to capture modifiers already showing: |
155 | | - - “Railway free tier limits (2026)” (or add as dedicated section + jump links) |
156 | | - - “Lemon Squeezy fees: 5% + $0.50 explained (with examples)” |
157 | | -3. **Commercial page build:** add a bespoke web design landing page + internal links from the high-traffic comparison posts. |
| 200 | +1. **CTR sprint (highest ROI):** update titles/meta + add above-the-fold summary blocks for: |
| 201 | + - Claude vs GPT-4o vs Gemini |
| 202 | + - Vercel vs Railway vs Render |
| 203 | + - Stripe vs Paddle vs Lemon Squeezy |
| 204 | + - Convex vs Supabase |
| 205 | + - HubSpot vs ActiveCampaign |
| 206 | + |
| 207 | +2. **Publish 2 supporting pages** to capture clear modifiers already visible in Search Console: |
| 208 | + - Railway free tier limits (2026) |
| 209 | + - Lemon Squeezy pricing (5% + $0.50) explained |
| 210 | + |
| 211 | +3. **Expand winning clusters:** publish 1–2 additional “Linear vs X” pages (low effort, high intent-match). |
| 212 | + |
| 213 | +4. **Unblock Keyword Planner (platform-level):** fix the Google Ads customer ID configuration so we can enrich these clusters with net-new keywords that aren’t yet appearing in Search Console. |
158 | 214 |
|
159 | 215 | --- |
160 | 216 |
|
161 | | -## Notes / issues |
| 217 | +## Appendix: previous review snapshot (2026-03-09) |
162 | 218 |
|
163 | | -- **Google Ads Keyword Planner API is currently failing** due to an invalid configured customer ID. Fixing this will let us enrich these clusters with **net-new keywords** that aren’t yet appearing in Search Console. |
| 219 | +The previous review content has been superseded by this update; see git history for the full prior snapshot. |
0 commit comments