content-groups
Skill0 starsChanged 21 days agoMITView on GitHub
Define and measure content groups, the URL-rule segments (blog, product, category or locale folders, subdomains) of one Search Console property, with the GSC Wizard MCP tools. Lists the saved groups and their rules, proposes new groups from the site's folder structure with breakdown_by_path, creates, edits or deletes groups after confirmation, and measures clicks, impressions, CTR, position, page count and click share per group plus the uncategorized remainder with get_content_group_performance. Use when the user asks about content groups or site sections, "how is the blog doing versus the product pages", wants to segment pages by URL pattern, or asks which part of the site drives organic traffic.
In this repository33 other files it gives its agents.
- ai-assistant-trafficSkill
- anomaly-checkSkill
- bing-crawl-healthSkill
- bing-performanceSkill
- branded-splitSkill
- cannibalizationSkill
- client-reportSkill
- content-decaySkill
- core-web-vitalsSkill
- country-deviceSkill
- ctr-optimizationSkill
- experiment-resultsSkill
- ga4-overviewSkill
- indexing-healthSkill
- indexing-trackerSkill
- indexnow-submitSkill
- long-tail-analysisSkill
- merchant-center-healthSkill
- onpage-auditSkill
- page-deep-diveSkill
- portfolio-overviewSkill
- property-setupSkill
- query-deep-diveSkill
- quick-winsSkill
- ranking-changesSkill
- shopping-performanceSkill
- site-auditSkill
- sitemap-auditSkill
- site-migrationSkill
- traffic-dropSkill
- traffic-forecastSkill
- weekly-reportSkill
- yandex-performanceSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 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.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Read the saved groups: Call list_content_groups with siteUrl and read:
- Very specific: line 31
Drill into one group or the uncategorized bucket: Call get_content_group_performance again with groupId set to a group id or the literal …
- Distinctive: line 40
If a write is refused because the connection is read-only, say that this step needs write access and continue with the read-only parts.
- Distinctive: line 54
Do not fabricate rows the tools did not return.
≈ “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
Content Groups
Define URL-rule based content groups on one property and measure how each group performs, so the user sees which parts of the site carry the organic traffic and which pages fall outside every group. The user's request may contain a property, a date range, a focus hint (a folder, a group name, "propose groups"), or an instruction to create, edit or delete a group; honor it when present.
Workflow
- Resolve the property. If the user's request or the conversation names a property, use it. Site URLs use GSC formats:
sc-domain:example.comorhttps://www.example.com/. Otherwise calllist_sitesand pick the obvious match. If several plausible properties exist, ask the user which one before continuing. Use the last 28 days compared with the previous period unless the user specifies dates. GSC data lags about 2 to 3 days: never treat the most recent 2 days as complete, and if a dip appears at the very edge of the range, say it is likely reporting lag, not a real drop. - Read the saved groups. Call
list_content_groupswithsiteUrland read:groups: each entry carriesid,name,description,rules,colorandcreated_at, sorted by name;- the order caveat: that list is a display order only. When the groups are measured, matching is first-match-wins with the newest group evaluated first, so a page that matches two groups counts in the newer one;
emptyBecause: the property has no groups yet. Continue with step 3 and propose groups instead of measuring.
- Propose groups from the site's structure. Call
breakdown_by_pathwithsiteUrlanddepth: 1(host plus first folder; raisedepthto 2, at most 4, when one folder holds most of the traffic and the user wants it split). Omit the dates for the last 28 settled days;limitdefaults to 100 (max 1000). Each row ingroupshaspath,host,subdomain,clicks,impressions,ctr,avgPositionandpageCount, sorted by clicks. Quote the property totals fromcoverage.siteTotals, never from summed rows, and relaytruncationNotewhentruncatedis true (on the live-API path the least-clicked pages are missing from every group). Turn the folders and subdomains that carry meaningful clicks into proposed groups, one rule each. A rule is a{ "type", "value" }object and a group takes 1 to 50 of them:prefixwith the full URL start, for example{ "type": "prefix", "value": "https://www.example.com/blog/" }, for a folder or subdomain;containsfor a token anywhere in the URL, such as a locale segment or a query parameter;equalsfor one exact page;regexfor a pattern, in RE2 syntax (no lookahead, lookbehind or backreferences).
- Measure the saved groups. Call
get_content_group_performancewithsiteUrl. The tool compares periods only when both comparison dates are given, so compute the windows:endDateis today minus 3 days,startDate27 days before that,comparisonEndDatethe day beforestartDate, andcomparisonStartDate27 days before that. Omitting the comparison pair returnshasComparison: falseand noprev*fields; to avoid guessing the settled edge, call once without dates, readrangeback and derive the comparison pair from it.searchTypedefaults toweb(alsoimage,video,news,discover). Read out of the response:groups: one row per group withgroupId,name,matchOrder,clicks,impressions,ctr,position,pages,clickShareand, with a comparison,prevClicks,prevImpressions,prevCtr,prevPosition;uncategorizedis the same row for the pages no group claims. Rows come inmatchOrder(evaluation order), not ranked by clicks, so sort them yourself for the table.clickShare: the group's share of all matched clicks, uncategorized included, on a 0-100 scale.dataSourceandtruncated: from the warehouse the totals cover every page of the property; from the live API they cover the top 25,000 pages by clicks andtruncatedis true.fallbackReason, when present, names a regex rule the warehouse could not run.- The tool errors when the property has no groups at all, and answers with
emptyBecausewhen groups exist but no page has data in the range.
- Drill into one group or the uncategorized bucket. Call
get_content_group_performanceagain withgroupIdset to a group id or the literal"uncategorized";limitcaps the rows (default 100, max 1000).- The response lists
pageswithpage,clicks,impressions,ctrandposition, by clicks, undergroupIdandgroupName. - The uncategorized drill-down is the input for new rules: its top pages show which folders or URL patterns still lack a group.
- An empty drill-down explains itself in
emptyBecause: the rules match nothing, or a group earlier inmatchOrderclaims every page they match; for a named groupnextStepsays what to compare.
- The response lists
- Create, edit or delete groups (write access). These are writes: ALWAYS list the exact group name and every rule, say what will change, and ask the user to confirm before calling.
create_content_grouptakessiteUrl,name(unique per property, up to 200 characters),rules(the shape from step 3) and optionaldescriptionandcolor(6-digit hex). It returns the savedgroupand, when relevant,ruleWarningswith aseverityandmessageper issue: a regex that cannot compile is rejected outright, a pattern that can backtrack catastrophically is saved but skipped and so matches no page, and a pattern the warehouse cannot run is saved but moves the group's reads to the capped live API. Relay every warning. Because the newest group is evaluated first, a broad new group takes pages away from the older groups it overlaps; say so before creating a catch-all.update_content_grouptakesgroupIdplus any ofname,description,color,rules. Passingrulesreplaces the whole list, so read the current rules withlist_content_groupsfirst when the user means to add one. The edit applies to the very next performance call; nothing is recomputed or stored.delete_content_grouptakesgroupIdand returnsdeleted: truewith the group'sname. Deleting a group removes no page data; its pages fall back into the next matching group or into uncategorized.- If a write is refused because the connection is read-only, say that this step needs write access and continue with the read-only parts.
- Scope other reports to a group. Call
get_filter_optionswithsiteUrl. ItscontentGroupslist says per group whether it isfilterable, with areasonandmessagewhen it is not;brand.configuredsays whether branded keywords are set. Scoped reads need an active plan or trial: on a free account the five tools below refuse the scope withpayment_required, while their unscoped calls still work. When the user wants a group-level report, pass a filterable id ascontentGroupIdto:get_site_summary, for the group's totals with a prior-period comparison;query_top_queriesorquery_top_pages, for the queries and pages inside the group;query_countriesorquery_devices, for the group's market and device mix.
Interpretation rules
ctrvalues are already percentages on a 0-100 scale. Never multiply them by 100.position: lower is better. A change toward a lower number is an improvement; never color it as a decline.- Present every multi-row result as a compact markdown table (top rows only, typically 5 to 10); keep prose for interpretation, not for restating numbers.
- Judge groups by the clicks and impressions at stake, not by percentage change alone: a 30% drop on a 20-click group matters less than a 5% drop on the group holding half the traffic.
- An uncategorized bucket above roughly 15% of clicks means the groups do not yet describe the site; propose rules from its top pages. A group with many
pagesbut few clicks is a thin section; for a page-level triage of it run the content-decay skill, and for a full picture the site-audit skill. - Do not fabricate rows the tools did not return.
Output
Group performance (one table, tool and date range stated above it), sorted by clicks with the Uncategorized row last. Changes are derived from
clicksandprevClicks; say so.Group Clicks Previous Change Impressions CTR Position Pages Click share - Uncategorized share: its clicks and
clickShare, plus the top uncategorized pages from step 5 when the share is material. Proposed groups, with the evidence from
breakdown_by_pathor the uncategorized drill-down, and a status of created, awaiting confirmation, or suggestion only.Name Rule(s) Clicks Pages Status - End with a short prioritized list of 3 to 7 concrete recommendations: which groups to create or fix, which group's pages to refresh or consolidate, and which group-scoped report to run next.
Error handling
If any tool call fails with an authentication or subscription error, tell the user to run /mcp to (re)authenticate, and that a GSC Wizard account with an active plan or trial plus a connected Google Search Console account is required. If the property is not found, re-run list_sites and offer the closest matches instead of guessing a URL format. If a single tool fails for another reason, report the gap in the relevant section and complete the rest of the workflow with the remaining data.
Grounding
Every number you report must name the tool it came from and the date range it covers, for example "clicks 12,340 (get_site_summary, 2026-09-21 to 2026-09-27)". For a table, state the tool and date range once on the line above it. If you derive a figure yourself (a delta, a sum, a share), say so and name the tool outputs it was computed from. Never report a number no tool returned.
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.

