0% 5h quota used · resets in 2h live · 08/09/2026 12:11 CEST

tn:ctr-optimizer

Convert impressions the site already earns into clicks — rewrite titles, meta descriptions and rich-result markup on pages that rank well but earn few clicks, and grade the previous run's pages 28 days on.

Runs 1
last 19d ago
Failed 0
no current streak
Median run $1.56
5m · tn ceiling $8.00 per run
Spent in total $1.56
28 turns of agent work

Manifest

tn/tasks.yaml
Address
tn:ctr-optimizer — also tn:ctr-optimizer
Runner
claude-code
Policy
pr may push a countryos/* branch and open a draft PR — the review is the gate
Workspace
the cms clone
Schedule
0 9 20 * * · next 20/09/2026 09:00
Model
opus
Budget
100 turns · 60 minutes
Triggerable
yes — free text can reach it
Notifies
every run — 🟢 on success, 🔴 on failure
Description (manifest)
Convert impressions the site already earns into clicks — rewrite titles, meta descriptions and rich-result markup on pages that rank well but earn few clicks, and grade the previous run's pages 28 days on.
WhenWhat it reportedTurnsTookCost
20/08/2026 09:05Opened draft PR #16566 (https://github.com/Selectra-Dev/cms/pull/16566) with two attributable CTR rewrites — `/coupures` retargeted at "panne de courant" (1,282 impr at 0…285m$1.56ok

The skill it runs

countries/tn/skills/ctr-optimizer/SKILL.md · 112 lines
Read the skill

CTR optimizer — tunisie-electricite.com

You are in the cms monorepo clone. Unlike seo-audit, which asks is this page healthy, this task asks is this page earning what its rank should earn — and it is the only TN task with a metric that grades its own previous run.

The site's bottleneck is not rank. Average position sits around 6, impressions grow faster than clicks, and several pages hold five-figure impression pools at under 1 % CTR. That gap is what this task closes.

Before anything else: grade the last run

Read memory/journal.md for the previous ctr-optimizer entry. If one exists and its PR merged at least 28 days ago, re-measure exactly the URLs it touched before choosing new work:

gsc page https://tunisie-electricite.com/<path> --site tunisie-electricite.com

Journal the before → after for each: impressions, clicks, CTR, position. This is the point of the task — a rewrite that lost clicks must be reported as a loss and its page put on a do-not-touch list, not quietly replaced with a new attempt. Do not roll back a losing rewrite in the same run: recommend the revert, let the human decide, then move on to fresh pages.

Pick the work

gsc-opportunities --site tunisie-electricite.com

Three of its sections are actionable here; use them in this order.

  1. cannibals first. Two of your own URLs splitting one query is the only failure this task can fix outright, and it caps every other gain on those pages. For each: decide which URL should own the query, then make the loser stop competing — retarget its title/H1/meta at its own distinct intent and link it to the winner. Never delete or redirect a page in this task; that is an architecture decision for a human.
  2. ctr-gaps next, top of the list down. These pages already rank — they are losing the click in the SERP.
  3. page-two only to inform the copy: a query at position 8-25 needs rank, which is content and links, not a snippet. Note the good ones for business-review to raise as content proposals; do not try to fix them here.

Then, for every page you intend to touch, pull what it actually ranks for:

gsc page https://tunisie-electricite.com/<path> --site tunisie-electricite.com

Write to the queries the page really receives, not to the topic you assume it covers. A page whose top queries are paiement facture steg par carte bancaire and steg en ligne is being found by people mid-transaction; a title that promises an explanation loses them.

Cap the run at 6 pages. A smaller batch that can be attributed beats a sweep whose result nobody can read.

What you may change

  • $title — write for the real query, front-load the words the searcher typed, keep ≤ 65 characters.
  • $metaDescription — ≤ 160 characters, French (fr-TN), and it must promise something the official STEG site does not: the number without a login, the procedure in steps, the figure itself.
  • $keywords, H1, and the intro paragraph, when they contradict the new angle.
  • Rich-result markup: FAQPage where a real FAQ accordion exists, HowTo for a procedure the page genuinely documents. Copy the exact JSON-LD pattern from a page that already has it — do not invent a structure, and never mark up questions or steps the page does not visibly answer.

What you may not change

  • Any fact — tariff, phone number, address, procedure. Hard rule 1 applies in full: a rewrite that rephrases a figure must keep the figure identical. If a snippet would read better with a number the page does not already state, leave it out.
  • Body content beyond the intro, page structure, new pages, data files, or anything outside sites/tunisie-electricite.com/ and departments/tunisia-energy/.
  • The dynamic templates' data — you may rewrite the title/meta expression in annuaire/_gouvernorat.blade.php or coupures/_municipalite.blade.php, but check what it renders for several real slugs first, including the longest governorate name, so no generated title blows the character limit.

Ship it

  1. Branch countryos/tn/<YYYY-MM-DD>-ctr-optimizer from origin/develop. One commit per page, so a reviewer can reject a single rewrite.
  2. Re-measure every new title and meta with node and confirm the real character count — count them, do not eyeball, and decode HTML entities first (&#039; inflates a naive .length).
  3. Push and open a draft PR to develop with gh pr create --draft, titled [tn] CTR optimizer <YYYY-MM-DD>. The body must be a table: page · impressions · current CTR · position · before → after title and meta · the queries each rewrite targets. A reviewer has to be able to disagree with one line without reading the diff.
  4. Append a journal entry naming every URL touched and the date this run becomes measurable (merge date + 28 days), so the next run knows what to grade.
  5. Report the PR URL and the modelled click gap you went after in your final message.

Never merge or mark the PR ready yourself.