Skip to main content

analyse-search-performance

Produces a structured GSC performance analysis: patterns, wins, drops, and CTR opportunities by page and query cluster. Use for a quarterly review or to diagnose a traffic change.

Source facts

Repository
seohow/seo
Last source activity
June 2, 2026 at 11:22
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
analyse-search-performance
description
Produces a structured GSC performance analysis: patterns, wins, drops, and CTR opportunities by page and query cluster. Use for a quarterly review or to diagnose a traffic change.
# Analyse Search Performance This skill produces a structured GSC performance analysis. Output is the report stakeholders read — pattern-rich, decision-oriented, anchored to clusters where possible. The skill is opinionated about a few things: rolling up to cluster level produces more useful insights than page-level data alone; CTR vs benchmark is the highest-ROI optimisation lens; quarter-over-quarter is the right comparison window for most analyses (28-day windows are too noisy); decline detection should drive refresh prioritisation, not panic. ## When to use this skill - The user wants a quarterly / monthly GSC review. - The user is preparing a board / executive report on SEO performance. - The user wants to identify refresh / optimisation candidates. - The user is investigating an apparent decline / surge. - The user is briefing strategy on which clusters are working / not. ## When NOT to use this skill - The user wants to audit GSC configuration — use `audit-search-console-setup`. - The user wants to set up rank tracking — use `set-up-rank-tracking`. - The user wants to plan content refresh based on the analysis — that's the next step (handoff to `plan-content-refresh`). - The user wants daily-granularity rank data — GSC reports averages; use a third-party rank tracker. ## Inputs required 1. **Business context and SEO foundation** — read `businesses/<slug>/business_context.md` and, for SEO-specific work, `businesses/<slug>/seo_foundation.md`. Resolve `<slug>` by listing `businesses/`: if exactly one folder exists, use it; if multiple, ask which business; if none, recommend running `business-context` first. If SEO foundation is missing, recommend running `seo-foundation` before producing output. Critical sections: products/services (3), goals (7). 2. **Cluster map** — read `businesses/<slug>/clusters/cluster-map.md`. Cluster rollup is part of the analysis. 3. **GSC access** — required (or exported CSV / API access). 4. **Comparison window** — required. Default: last 90 days vs prior 90 days. Alternative: YoY (last 90 days vs same 90 days last year), if data retention covers it. 5. **Analysis depth** — optional. "Standard" (top queries, top pages, decline detection, CTR opportunities) or "Deep" (adds query-page intersection, cluster rollup, segment analysis). Default: standard for monthly, deep for quarterly. If GSC access or comparison window is missing, ask. The analysis is comparative. ## Process 1. **Pull the data.** - Performance report: queries × pages × dates. Last 90 days + prior 90 days (or YoY). - If site is large (>1,000 query rows): use API or BigQuery export. 2. **Top-queries summary.** - Top 25 queries by clicks (current period). - Top 25 queries by impressions (current period). - Top movers — queries that gained the most clicks vs prior period. - Top decliners — queries that lost the most clicks vs prior period. 3. **Top-pages summary.** - Top 25 pages by clicks. - Top 25 pages by impressions. - Top movers and decliners (page level). 4. **Decline detection.** - Queries that lost ≥30% impressions and were getting ≥100 impressions/mo prior — flagged for investigation. - Pages that lost ≥30% clicks and were getting ≥50 clicks/mo prior — flagged for refresh consideration. - Position drops ≥5 positions on previously-top-10 queries — flagged. 5. **CTR opportunities.** - Queries with position 4-15 and CTR ≥30% below position-benchmark — title/description rewrite candidates. - Position-CTR benchmarks: position 1 ~30%, 2 ~15%, 3 ~10%, 4 ~7%, 5 ~5%, 6-10 ~2-4%, 11-20 ~1-2%. Below-benchmark by ≥30% is the signal. 6. **Query ↔ page intersection.** - Identify cases where multiple pages are competing for the same query (cannibalisation): same query, multiple pages with non-trivial impressions. Flag for canonical / consolidation review. - Identify cases where a page ranks for queries the team didn't target (unexpected wins) — feed back to keyword research. 7. **Cluster rollup.** - For each cluster from the cluster map: total clicks, total impressions, average position, cluster-level WoW / MoM / QoQ trend. - Identify clusters that are gaining vs decaying. - Identify clusters with high impressions but low clicks (CTR opportunity at cluster level). 8. **Page-type rollup.** - Blog vs PDP vs collection vs other: clicks, impressions, position, conversions if joinable to GA4. - Often surfaces structural insight (e.g. blog grew 40% but PDPs flat). 9. **Branded vs non-branded.** - Approximate split (queries containing brand name vs not). - Branded growth = brand awareness; non-branded growth = SEO contribution. - Flag if branded grew but non-branded didn't (often signals over-attribution to SEO of brand-driven gains). 10. **Country / device segmentation (where relevant).** - For brands operating in multiple markets: country-level breakdown. - Device split: mobile vs desktop CTR / position differences. 11. **Insights & recommendations.** - What's working (continue / double down). - What's decaying (refresh / fix). - What's surprising (investigate / capitalise). - Top 5-10 prioritised actions, each tied to an existing toolkit skill (refresh, title rewrite, canonical fix, etc.). 12. **Write the report.** ## Output format ```markdown # GSC Performance Analysis — [Business name] **Analysis period:** [start date] → [end date] **Comparison period:** [start date] → [end date] **Analysis date:** [date] ## Executive summary - Total clicks: [n] ([+/- %] vs prior) - Total impressions: [n] ([+/- %] vs prior) - Average position: [n] ([+/- ] vs prior) - Average CTR: [%] ([+/- pp] vs prior) - **Headline:** [1-2 sentences on the dominant story] ## Top 10 winners (queries) | Query | Current clicks | Δ vs prior | Current position | Driver | |-------|----------------|------------|------------------|--------| | ... | ... | ... | ... | ... | ## Top 10 decliners (queries) | Query | Current clicks | Δ vs prior | Current position | Hypothesis | |-------|----------------|------------|------------------|------------| | ... | ... | ... | ... | ... | ## Top 10 winners (pages) [same shape] ## Top 10 decliners (pages) [same shape; "Hypothesis" column flags refresh candidate / SERP shift / etc.] ## CTR opportunities Queries with position 4-15 and CTR ≥30% below benchmark: | Query | Position | CTR | Benchmark CTR | Page | Action | |-------|----------|-----|---------------|------|--------| | ... | 7 | 1.8% | 4.5% | /blog/... | Rewrite title (`generate-title-tags`) | ## Query ↔ page intersection - Cannibalisation flags (same query, multiple pages): [list] - Unexpected wins (pages ranking for non-targeted queries): [list] ## Cluster rollup | Cluster | Clicks (current) | Δ vs prior | Avg position | Trend | |---------|------------------|------------|--------------|-------| | Sun-care | n | +n% | 12 | 📈 | | Skincare-ingredients | n | +n% | 18 | 📈 | | Refills | n | -n% | 22 | 📉 | | ... | ... | ... | ... | ... | ## Page-type rollup | Page type | Clicks | Impressions | Avg position | Δ clicks | |-----------|--------|-------------|--------------|----------| | Blog | n | n | n | +n% | | PDP | n | n | n | -n% | | Collection | n | n | n | +n% | | Other | n | n | n | n% | ## Branded vs non-branded | Segment | Clicks (current) | Δ vs prior | |---------|------------------|------------| | Branded (queries with "field and sun") | n | +n% | | Non-branded | n | +n% | | **SEO-driven contribution:** non-branded movement | Verdict: [...] ## Insights & recommendations 1. **[Insight 1].** [What we see; why it matters; recommended action; next-step skill.] 2. **[Insight 2].** [...] 3. **[Insight 3].** [...] 4. **[Insight 4].** [...] 5. **[Insight 5].** [...] ## Prioritised action list | # | Action | Skill / handoff | Severity | Effort | |---|--------|-----------------|----------|--------| | 1 | Refresh /blog/how-to-apply-mineral-sunscreen (lost 50% clicks) | `plan-content-refresh` | P0 | 6 hrs | | 2 | Rewrite titles on 8 CTR-opportunity queries | `generate-title-tags` | P0 | 2 days | | 3 | Investigate refills cluster decline (-22% QoQ) | Strategy review | P1 | 4 hrs | | ... | ... | ... | ... | ... | ## Open questions - [ ] Confirm seasonality / market context (e.g. is the SPF impressions surge due to seasonal demand or SEO)? - [ ] Confirm any algorithm-update timing (Google issued [update] on [date]; correlate?). - [ ] Confirm any technical changes (migration, redesign, JS rendering) in the period. ``` Save the produced file to `businesses/<slug>/analytics/gsc-performance-[YYYY-MM-DD].md`. After writing, tell the user the file path so they can open it. ## Quality bar - Comparison period explicit (last 90d vs prior 90d, or YoY). - Top winners + top decliners are both surfaced (not just one direction). - Decline thresholds documented (≥30% decline + ≥100 impressions/mo prior). - CTR-opportunity table uses position-CTR benchmarks; benchmarks documented. - Cluster rollup matches the brand's cluster map; not just generic page-type splits. - Branded vs non-branded approximation present; insights distinguish brand growth from SEO contribution. - Action list is prioritised, effort-estimated, and links to specific toolkit skills for execution. - Open questions cover seasonality / algorithm updates / technical changes. ## Common mistakes to avoid - Don't anchor on absolute numbers without comparison. SEO moves slowly; trend matters more than snapshot. - Don't compare 28-day windows as the primary unit. Too noisy; QoQ and YoY are the right defaults. - Don't ignore the position-CTR-benchmark lens. CTR opportunities are some of the highest-ROI fixes. - Don't conflate branded growth with SEO contribution. Branded growth comes from PR / paid / brand awareness; non-branded is the SEO signal. - Don't recommend refresh on every decay. Some decay is seasonal / SERP-shift / algorithm-update — investigate before reflexively refreshing. - Don't skip the cluster rollup. Page-level data alone produces noisy reports; cluster-level produces strategic insight. - Don't propose 30 actions. Top 5-10 prioritised actions; everything else can wait. - Don't ignore unexpected wins. Pages ranking for non-targeted queries are research signal — feed back to Strategy. ## Example **Input (abbreviated):** Field & Sun. Last 90d (2026-02 to 2026-04) vs prior 90d (2025-11 to 2026-01). **Output (abbreviated):** Headline: clicks +24% QoQ driven by sun-care cluster surge (+47%); refills cluster contracting (-22%); CTR opportunities on 8 mid-page-1 queries worth ~30% click lift. Top winners: "is zinc oxide safe daily" +320% clicks (cluster-effect from new pillar); "mineral sunscreen guide" +∞% (new pillar launched mid-period). Top decliners: "winter skincare trends" -85% (off-strategy seasonal content; recommend prune); "/blog/how-to-apply-mineral-sunscreen" -50% clicks (refresh candidate). CTR opportunities (8): mostly sun-care queries at position 6-12 with CTR < 2.5% (benchmark 3-5%) — title rewrites recommended. Cluster rollup: sun-care 📈 +47%; skincare-ingredients 📈 +18%; refills 📉 -22%; vitamin-C 📊 stable. Page-type: blog +38%, PDP +12%, collections flat — pillar / spoke architecture is paying off. Branded vs non-branded: branded +8%, non-branded +29% — SEO contribution is real, not brand-driven. Top actions: (1) Refresh `/blog/how-to-apply-mineral-sunscreen` via `plan-content-refresh`; (2) Rewrite 8 titles via `generate-title-tags`; (3) Prune off-strategy refills content via `plan-content-refresh`; (4) Investigate refills cluster strategically (Strategy review). Open questions: any seasonal effect we should adjust for; March 2026 spam update timing. Saved to `businesses/field-and-sun/analytics/gsc-performance-2026-05-01.md`.
View on GitHub