Build week 4 of Pulseboard, the marketing analytics tool I am building for service business agencies. Quick write-up of the find that landed hardest this week.
I pulled our own Google Search Console into the engine last Sunday. Over fourteen days, our agency site (movou.com) earned 1,062 organic impressions and exactly one click. The one click was on the brand query "movou."
Looking through it by query, seven of eight priority geo keywords are ranking on page one or page two:
The position numbers are fine. The titles are not earning the click.
The reason this is invisible in most agency stacks is structural. GSC's default report shows ranking position and CTR in different tabs. GA4 does not surface CTR at all (it lives in Search Console). Unless you are a dedicated SEO running a weekly title-rewrite ritual, you are looking at position-only dashboards and celebrating page-one rankings that are quietly bleeding traffic.
When we paired position and CTR on the same chart in Pulseboard, the "ranking-but-not-clicking" pattern lit up immediately. The recommendation we ended up writing was: rewrite titles for the seven priority queries to include city plus outcome (e.g., "Lithia Springs SEO Company. Rank in the 3-Pack in 90 Days.").
Design question I am chewing on:
When the tool spots this pattern, should it just flag the queries and let the user rewrite, or should it auto-generate three title variants from query intent and let you pick? I am leaning auto-generate because the manual rewrite step is where most agencies stall, but I am worried about producing LLM slop that ranks worse than the original.
Anyone here built CTR-aware recommendations for SEO? How did you split the heuristic vs LLM work? Where did the auto-suggestions break down on you?
Built something close to this for a client (n8n + Claude API + GSC). Couple of patterns that survived production:
The slop concern is real — LLM-from-scratch titles drift toward generic ("Top SEO Services for Lithia Springs Businesses 2026") and quietly lose keyword density. The fix is a 2-stage gen pipeline:
That's where it earns its keep.
Claude responds well to explicit structured-output constraints — char count caps (≤60), required tokens (city must appear verbatim, service must appear verbatim), forbidden tokens (no "best", no "top", no "premier"). Without this, you get the "Best Top Premier Expert" adjective stack that ranks worse than the original.
The 5-15 min daily review IS the moat. Auto-publish breaks the second Claude hallucinates a wrong city name (will happen — and it'll be a P0 for your agency users). Approval gate eliminates the entire "why did our title flip to something weird?" support category. I'd frame the approval queue as a Pulseboard feature, not a workaround — agencies running 30+ client SEO simultaneously NEED that batch-review UX more than they need full automation.
Without storing pre-change ranking + CTR baseline, you can't tell if the new title actually worked or if a competitor's title broke. This is the single biggest "we tried it but couldn't measure it" failure on tools like this.
Direct answer to your heuristic-vs-LLM split: heuristics generate breadth, LLM picks. That inversion changes everything about your slop risk.