Rescue low-CTR SEO pages with fresh title and meta drafts

By General Input

Every other Thursday, find your underperforming organic pages and get fresh title and meta description drafts queued in Notion for review.

Integrations

  • Google Search Console
  • Notion
  • Slack

Type

Agentic Task

Categories

  • Marketing

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredChat quality review board for LiveChat support leadsWin back no-show and cancelled appointments every morningLive Loop returns analytics with product-level drill-downNewsletter pre-flight and approval board for Mailjet sendsTurn a prospect spreadsheet into personalized sequence enrollmentsMailjet email delivery lookup console for support teamsCatch feature flags that never got switched on in productionScreen chartered vessels for AIS gaps and sanctions red flags