page-optimization
Skill56 starsChanged 38 days agoMITView on GitHub
Refresh an underperforming page via the OpenGSC MCP: find it with decay/CTR data, pull a full optimization brief, write the new version, and verify it deterministically before it ships.
In this repository9 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- aeo-visibility-reviewSkill
- drops-researchSkill
- gsc-performance-reviewSkill
- keyword-researchSkill
- link-prospectingSkill
- seo-productionSkill
- site-triageSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
Diagnose before writing: Call get_optimization_brief with that URL and read what kind of problem it actually is:
- Very specific: line 61
Do not rewrite a page whose problem is technical.
- Very specific: line 64
If the page is one of two cannibalizing URLs, recommend merge/redirect/differentiate and let the user decide.
- Distinctive: line 72
Call it before any other tool.
- Distinctive: line 77
Before any PAID tool, check the research log: if the same research ran within the last 30 days, reuse that result and say so instead of …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OpenGSC Page Optimization
Goal
Take one page from "it used to do better" to a rewritten draft the user can publish, with evidence for every change and a mechanical check that the rewrite did not invent a fact.
Required inputs
- The site (domain). Call
list_sitesif unknown. - Optionally the page. If the user has not named one, find it — that is step 1.
OpenGSC MCP tools
get_content_decay: pages trending down, with per-bucket history. The usual starting point.get_ctr_benchmark: top-10 queries whose real CTR trails the benchmark for their position.get_optimization_brief: the main call. Everything known about one URL — its queries, striking-distance keywords, CTR gaps, six-month trend, cannibalization conflicts, technical audit issues, and the live page as Markdown.analyze_text: deterministic verification of your draft. No model is called; the answer is the same every time.get_generations: what has already been written for this keyword, so a "refresh" does not become a second competing page.fetch_page_content: a competitor's page as clean Markdown, when the brief shows you are being outranked and you need to see by what.start_rewrite_job/start_generation_job: PAID and asynchronous. They return a job id, not text; pollget_generation_job. Only on explicit user request — see Guardrails.
Workflow
- Find the page.
get_content_decayfor the site (orget_ctr_benchmarkif the user's complaint is "impressions are fine, nobody clicks"). Pick the highest-impact candidate and confirm it with the user. - Diagnose before writing. Call
get_optimization_briefwith that URL and read what kind of problem it actually is:- Position 4–20 with real impressions → the content is not competitive enough. Rewrite.
- Top-10 position but a large negative
ctrGap→ the ranking is fine, the snippet is not. Change the title and meta description; leave the body alone. cannibalizationrows with meaningful impressions → another of the user's own pages is competing. Consolidation first; rewriting either page in isolation makes it worse.auditissues likenoindex, a canonical mismatch, or a 4xx → fix the technical problem. No amount of prose outranks anoindex.
- Check for existing work.
get_generationsfiltered by the keyword. Extend what exists rather than producing a near-duplicate. - Write it yourself. You have the brief, the current body, the target queries and the competitors' gaps in context. Keep every number, price and product name from the original unless the brief gives you a reason to change it.
- Verify.
analyze_textwith your draft astextand the original body assource. Read three things:factDrift.severity—dangermeans values appear in your draft that are not in the source. Fix them before showing the user. This is not advisory.structure.ok— false means you dropped or added headings. Usually accidental.uniquenessPercent— very high on a refresh means you rewrote rather than updated, which throws away whatever was already ranking.
- Present the draft with the evidence for each substantive change.
Output format
- One line on what kind of problem this was (content / snippet / cannibalization / technical).
- Evidence table:
| Change | Why | Evidence from the brief |
- The draft itself.
- The
analyze_textverdict, verbatim: uniqueness, fact drift, structure. - Anything needing the user's judgment — a fact you could not verify, a claim the source made that you could not source.
Guardrails
- Do not call the paid tools without being asked.
start_rewrite_jobandstart_generation_jobspend the instance owner's own AI credits. They refuse to run withoutconfirm: true; do not set that flag to work around the refusal. You are a language model with the brief in context — writing the draft yourself costs the owner nothing extra. Use the paid path only when the user explicitly wants the app's own pipeline: its editorial policy, its banned-word list from the AI-Fingerprint Lab, or Casino RAG grounding. - Never start a second paid job because the first seems slow. Both paid tools return a job id, not text, and a page takes 1–4 minutes. Poll
get_generation_job; it returns finished pages as they complete, so an early poll shows partial work rather than nothing.start_rewrite_jobrefuses to start while another batch runs, and working around that refusal means paying twice for the same page. - Batch instead of looping. To refresh many pages, send the URLs to one
start_rewrite_jobcall (up to 20) rather than one call per page. - Never publish past a
dangerfact drift. An invented number in a rewrite nobody rereads is precisely how a wrong price reaches production. - Do not rewrite a page whose problem is technical. Report the
noindexor the broken canonical instead. get_optimization_briefreturningboilerplateOnly: truemeans the fetch got navigation, not an article. Say so; do not treat menu text as the page's content.- Averages in the brief are averages over the window — say "avg position", not "rank".
- If the page is one of two cannibalizing URLs, recommend merge/redirect/differentiate and let the user decide. Do not recommend deleting a page.
Site context — read first, free
get_site_context is this skill's step zero. It returns the site's shared memory — business
overview, current goal, positioning, writing preferences, the competitor list, key pages and
the research log — and grounds every decision below in what the operator already told us.
- Call it before any other tool. If it errors or comes back empty, continue without it; never block the workflow on missing context.
- This skill especially needs:
writing_preferences,key pages. If a needed section is empty, do a minimal inline fill — ask the user (or infer from the site and confirm), write it back withupdate_site_context, then continue. Never front-load a full interview. - Before any PAID tool, check the research log: if the same research ran within the last 30 days, reuse that result and say so instead of re-buying it.
- On finish, write back what is durable — new or corrected key pages, competitors the work
revealed, positioning facts the user stated — and append a research-log entry if the
session spent paid units (
appendResearchLog).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

