You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: add evidence-led GSC SEO optimizer skill 🤖🤖🤖 - #4099
Add a Search Console analysis skill for choosing a small, evidence-backed batch of page improvements, including a no-change recommendation when the data is weak or a page was recently edited. It checks exact property, country/device filters, inclusive Pacific-time windows, independent totals and query/page linkage before interpreting performance.
The default workflow is read-only. CSV/ZIP mode works locally with Python standard-library code and needs no account. Optional Google API access uses existing authorization and the Search Console read-only scope. No embedded credentials, telemetry, vendor connector, automatic OAuth or external uploads are included.
Differentiation
The existing search-ai-optimization-expert agent provides broad SEO/AEO/GEO guidance. This skill addresses the narrower GSC evidence-to-edit workflow with reproducible export handling and constraints on aggregate/query inference. It does not replace a technical site audit or general SEO implementation agent.
Included resources
Data access, data quality, prioritization and reporting references.
A CSV/ZIP importer that preserves unknown values and separate tables, rejects ambiguous comparison columns, and bounds archive size without extracting paths.
An optional read-only API helper for scope verification, paginated analytics, independently requested totals and URL Inspection.
14 dependency-free helper tests and synthetic CSV fixtures; API responses are mocked.
Behavioral validation
Tested in GitHub Copilot CLI 1.0.88 using isolated directories, synthetic supplied evidence and only skill/read tools. No production data or live Google requests were used.
Case
Observed result
Current export declares Germany/28 days but its Filters say worldwide/24 days; comparison uses a different property type; Pages and Queries are separate; sitemap indexed=0
Declines a sitewide growth claim and forced two-page rewrite. Does not assign the query to a page or infer deindexing from a sitemap count.
Comparable totals plus exact page-filtered query rows; branded pricing page edited Sept 22; sparse page edited Sept 23; last finalized data Sept 24; intentional noindex preview
Prioritizes the relevant API-docs page, preserves the targeted title without contrary SERP evidence, leaves the other pages alone, and reports only two complete evidence days for the pricing edit.
An initial run anchored a proposed review date to the historical baseline. The data-quality reference now explicitly anchors post-change windows to deployment and counts available evidence only through the finalized-data endpoint. The prioritization case was rerun after that correction; both directory adapters produced the intended decisions. These are bounded behavioral checks, not a guarantee across models.
Examples
“Review these two GSC ZIP exports for my German market. Which pages should we improve next, and which should we leave alone?”
“These page and query exports look promising. Can we actually tell which query belongs to which page?”
“We changed pricing three days ago. Is its low CTR evidence that we should rewrite the title again?”
Provenance and limitations
AI-assisted contribution by a contributor affiliated with Tracetify, adapted from Tracetify Skills, MIT; attribution and license retained. The directory adapter omits vendor-specific routing and private-preference conventions.
Claude Code runtime compatibility, live Google authorization and live API responses have not been tested in this contribution. No claim of independent human usage validation, increased rankings or measured ROI is made.
Relative resource references, skill-creator validator and git diff --check passed.
Required eng/fix-line-endings.sh run with an external BSD-sed compatibility wrapper on macOS; upstream script unchanged.
docs/README.agents.md includes six existing MCP install-link refreshes produced by the required generator. They are retained so README regeneration is clean; no agent source was changed.
Automated risk-scan note: unpinned-version-indicator matched “Latest returned finalized date” in an API diagnostic string. That wording describes a data date, not a package, action or container version. The three script-touch notices identify the intentionally bundled Python helpers/tests.
✓ [spec-compliance] All 1 skill(s) are spec-compliant.
ℹ️
✓ spec-compliance: All spec checks passed.
ℹ️
✓ [valid-refs] All file references across 1 skill(s) are valid.
ℹ️
✓ valid-refs: All file references resolve to existing files within the skill directory.
ℹ️
1 skill(s) linted, 1 passed
Full linter output
### Linting skills/gsc-seo-optimizer
✅ gsc-seo-optimizer (2/2 checks passed)
✓ [spec-compliance] All 1 skill(s) are spec-compliant.
✓ spec-compliance: All spec checks passed.
✓ [valid-refs] All file references across 1 skill(s) are valid.
✓ valid-refs: All file references resolve to existing files within the skill directory.
1 skill(s) linted, 1 passed
Risk tier:merge-risk:high — Privileged execution, automation, or review-policy change Required to merge: passing submission-gate checks plus 1 approval from reviewers with write access, including a maintainer with admin or maintain permission.
Why this tier
skills/gsc-seo-optimizer/scripts/gsc_fetch.py is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
skills/gsc-seo-optimizer/scripts/import_gsc.py is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
skills/gsc-seo-optimizer/scripts/requirements-api.txt is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
skills/gsc-seo-optimizer/tests/test_gsc.py is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
Friendly ping: all automated checks are green and the PR is waiting on a reviewer with write access. Happy to adjust anything if it needs changes. Thanks!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add a Search Console analysis skill for choosing a small, evidence-backed batch of page improvements, including a no-change recommendation when the data is weak or a page was recently edited. It checks exact property, country/device filters, inclusive Pacific-time windows, independent totals and query/page linkage before interpreting performance.
The default workflow is read-only. CSV/ZIP mode works locally with Python standard-library code and needs no account. Optional Google API access uses existing authorization and the Search Console read-only scope. No embedded credentials, telemetry, vendor connector, automatic OAuth or external uploads are included.
Differentiation
The existing
search-ai-optimization-expertagent provides broad SEO/AEO/GEO guidance. This skill addresses the narrower GSC evidence-to-edit workflow with reproducible export handling and constraints on aggregate/query inference. It does not replace a technical site audit or general SEO implementation agent.Included resources
Behavioral validation
Tested in GitHub Copilot CLI 1.0.88 using isolated directories, synthetic supplied evidence and only skill/read tools. No production data or live Google requests were used.
An initial run anchored a proposed review date to the historical baseline. The data-quality reference now explicitly anchors post-change windows to deployment and counts available evidence only through the finalized-data endpoint. The prioritization case was rerun after that correction; both directory adapters produced the intended decisions. These are bounded behavioral checks, not a guarantee across models.
Examples
Provenance and limitations
AI-assisted contribution by a contributor affiliated with Tracetify, adapted from Tracetify Skills, MIT; attribution and license retained. The directory adapter omits vendor-specific routing and private-preference conventions.
Claude Code runtime compatibility, live Google authorization and live API responses have not been tested in this contribution. No claim of independent human usage validation, increased rankings or measured ROI is made.
Repository validation
npx @microsoft/vally-cli lint skills/gsc-seo-optimizer --verbose— spec compliance and relative references passed.npm run skill:validate— all 424 skills valid.npm start— generated README/marketplace build passed.npm run plugin:validate— passed; existing external-catalog warnings remain unrelated.python3 -m unittest discover -s skills/gsc-seo-optimizer/tests -v— 14 passed.git diff --checkpassed.eng/fix-line-endings.shrun with an external BSD-sed compatibility wrapper on macOS; upstream script unchanged.docs/README.agents.mdincludes six existing MCP install-link refreshes produced by the required generator. They are retained so README regeneration is clean; no agent source was changed.Automated risk-scan note:
unpinned-version-indicatormatched “Latest returned finalized date” in an API diagnostic string. That wording describes a data date, not a package, action or container version. The three script-touch notices identify the intentionally bundled Python helpers/tests.