Rescue low-CTR SEO pages with fresh title and meta drafts
Every other Thursday, find your underperforming organic pages and get fresh title and meta description drafts queued in Notion for review.
Build me an agent workflow that runs a low-CTR rescue pass on my Google Search Console property every other Thursday and drafts fresh title and meta description candidates into a Notion backlog. The work is intent reasoning and copywriting, so it needs to run as an agent rather than deterministic code.
Trigger: cron, every other Thursday at 9am in my local timezone.
Inputs I will provide on setup: my Google Search Console property (URL-prefix or sc-domain), the Notion database id for my SEO Metadata Backlog, and the Slack channel id for my marketing channel.
Step 1. Pull page-level performance for the last 28 days from Google Search Console using the Search Analytics Query operation. Group by page. Capture clicks, impressions, CTR, and average position. Paginate with rowLimit and startRow until the property is fully covered. Remember GSC data lags 2 to 3 days, so use a 28-day window that ends 3 days ago.
Step 2. Pick rescue candidates. Keep only pages with impressions of at least 500. For each page, compare actual CTR to a benchmark CTR for its average position. Use a position-to-CTR table along the lines of position 1 around 27 percent, position 2 around 15 percent, position 3 around 11 percent, position 4 around 8 percent, position 5 around 6 percent, positions 6 through 10 declining to roughly 2 percent. Flag a page as a candidate when its actual CTR is less than 60 percent of the expected CTR for its position.
Step 3. For each candidate page, call Search Analytics Query again, filtered to that page URL and grouped by query, to pull the top 3 driving queries by impressions.
Step 4. For each candidate page, call Inspect URL to confirm Google's selected canonical matches the URL and that the page is indexed. If the page is not indexed or the canonical differs, write that in the Notion row and skip drafting copy for it. The problem isn't CTR.
Step 5. For each remaining candidate, fetch the current page so you can read the live title tag and meta description. Then reason about search intent for the top driving query. Decide whether the current title appears to mismatch intent (informational vs transactional vs navigational), and whether it front-loads the primary keyword. Also reason about whether the SERP for that query is likely dominated by an AI Overview or a featured snippet (definitional, how-to, or one-line factual queries are typical signals); if so, mark the row with a SERP feature risk flag so I know a rewrite may not move the needle.
Step 6. Draft 3 alternative title tags (50 to 60 characters each) and 2 alternative meta descriptions (105 to 155 characters each). Each variant should better match the search intent of the top query and lead with the primary keyword. Preserve any existing brand suffix from the current title.
Step 7. For each candidate, call the Notion Create a Page operation as a child of my SEO Metadata Backlog database. Populate properties for URL, current title, current meta description, top 3 driving queries, impressions, actual CTR, expected CTR for position, the 3 proposed title variants, the 2 proposed meta variants, the SERP feature risk flag, and a 2 to 3 sentence rationale explaining why this page was flagged and why the proposed variants should perform better.
Step 8. After the run, call the Slack Send a Message operation to post a summary in my marketing channel: total candidate count, the top 3 URLs by impressions, the count flagged with SERP feature risk, and a link to the Notion SEO Metadata Backlog database view.
Guardrails. Cap the run at roughly 25 candidates per execution so a bad week does not flood Notion. If GSC returns a 429, back off and retry. Never propose a title longer than 60 characters or a meta longer than 155 characters. Never modify the live page; only draft into Notion.
Additional information
What does this prompt do?
- Pulls the last 28 days of page-level performance from Google Search Console.
- Flags pages with strong impressions but click-through rates well below the benchmark for their average position.
- Drafts three new title tags and two new meta descriptions for each underperformer, with a short note on the search intent behind the top query.
- Files each candidate in your Notion SEO backlog and posts a summary to your marketing Slack channel.
What do I need to use this?
- A Google Search Console account with at least one verified property.
- A Notion workspace with a database set up as your SEO metadata backlog.
- A Slack workspace and a channel for marketing updates.
How can I customize it?
- Change the cadence from every other Thursday to weekly, monthly, or a different day and time.
- Adjust the impression floor (500 by default) or how far below benchmark a page has to be before it gets flagged.
- Post the summary to a different Slack channel, or have it DM you instead of posting in public.
Frequently asked questions
Will this actually change my live titles and metas?
How does it pick which pages to rescue?
What about pages where Google shows an AI Overview or featured snippet?
Can I run it more or less often?
Does it need write access to my Search Console property?
Stop letting high-impression pages bleed clicks.
Connect Google Search Console, Notion, and Slack once. Geni queues your next batch of title rewrites every other Thursday, ready for review.