--- id: AgriciDaniel/claude-seo/seo-google version: "65726690" license: MIT install: manual updated: 2026-07-27 --- # seo-google — seo-google connects Claude Code to live Google Search Console data, surfacing Core Web Vitals, search performance metrics, and ranking insights directly in your workflow. Run technical SEO audits and content analysis powered by actual field data from Google's index. Publisher: AgriciDaniel · Stars: 12542 · Updated: 2026-07-27 Install (manual): `git clone https://github.com/AgriciDaniel/claude-seo` ## SKILL.md # Google SEO APIs Direct access to Google's own SEO data. Bridges the gap between crawl-based analysis (existing claude-seo skills) and Google's real-time field data: actual Chrome user metrics, real indexation status, search performance, and organic traffic. All APIs are free. Setup requires a Google Cloud project with API key and/or service account -- run `/seo google setup` for step-by-step instructions. ## Prerequisites Before executing any command, check credentials: ```bash claude-seo run google_auth.py --check --json ``` Config file: `~/.config/claude-seo/google-api.json` ```json { "service_account_path": "/path/to/service_account.json", "api_key": "", "default_property": "sc-domain:example.com", "ga4_property_id": "properties/123456789" } ``` If missing, read `references/auth-setup.md` and walk the user through setup. ### Credential Tiers | Tier | Detection | Available Commands | |------|-----------|-------------------| | **0** (API Key) | `api_key` present | `pagespeed`, `crux`, `crux-history`, `youtube`, `nlp` | | **1** (OAuth/SA) | + OAuth token or service account | Tier 0 + `gsc`, `inspect`, `sitemaps`, `index` | | **2** (Full) | + `ga4_property_id` configured | Tier 1 + `ga4`, `ga4-pages` | | **3** (Ads) | + `ads_developer_token` + `ads_customer_id` | Tier 2 + `keywords`, `volume` | Always communicate the detected tier before running commands. ## Quick Reference | Command | What it does | Tier | |---------|-------------|------| | `/seo google setup` | Check/configure API credentials | -- | | `/seo google pagespeed ` | PSI Lighthouse + CrUX field data | 0 | | `/seo google crux ` | CrUX field data only (p75 metrics) | 0 | | `/seo google crux-history ` | 25-week CWV trend analysis | 0 | | `/seo google gsc ` | Search Console: clicks, impressions, CTR, position | 1 | | `/seo google inspect ` | URL Inspection: index status, canonical, crawl info | 1 | | `/seo google inspect-batch ` | Batch URL Inspection from file | 1 | | `/seo google sitemaps ` | GSC sitemap status | 1 | | `/seo google index ` | Submit URL to Indexing API | 1 | | `/seo google index-batch ` | Batch submit up to 200 URLs | 1 | | `/seo google ga4 [property-id]` | GA4 organic traffic report | 2 | | `/seo google ga4-pages [property-id]` | Top organic landing pages | 2 | | `/seo google youtube ` | YouTube video search (views, likes, duration) | 0 | | `/seo google youtube-video ` | YouTube video details + top comments | 0 | | `/seo google nlp ` | NLP entity extraction + sentiment + classification | 0 | | `/seo google entities ` | Entity analysis only (for E-E-A-T) | 0 | | `/seo google keywords ` | Keyword ideas from Google Ads Keyword Planner | 3 | | `/seo google volume ` | Search volume lookup from Keyword Planner | 3 | | `/seo google entity ` | Knowledge Graph entity check | 0 | | `/seo google safety ` | Web Risk URL safety check | 0 | | `/seo google quotas` | Show rate limits for all APIs | -- | --- ## PageSpeed + CrUX ### `/seo google pagespeed ` Combined Lighthouse lab data + CrUX field data. **Script:** `claude-seo run pagespeed_check.py --json` **Reference:** `references/pagespeed-crux-api.md` **Default:** Both mobile + desktop strategies, all Lighthouse categories. Output merges lab scores (point-in-time Lighthouse) with field data (28-day Chrome user metrics). CrUX tries URL-level first, falls back to origin-level. ### `/seo google crux ` CrUX field data only (no Lighthouse run). Faster. **Script:** `claude-seo run pagespeed_check.py --crux-only --json` ### `/seo google crux-history ` 25-week CrUX History trends. Shows whether CWV metrics are improving, stable, or degrading. **Script:** `claude-seo run crux_history.py --json` **Reference:** `references/pagespeed-crux-api.md` Output includes per-metric trend direction, percentage change, and weekly p75 values. --- ## Search Console ### `/seo google gsc ` Search Analytics: clicks, impressions, CTR, position for last 28 days. **Script:** `claude-seo run gsc_query.py --property --json` **Reference:** `references/search-console-api.md` **Default:** 28 days, dimensions=query,page, type=web, limit=1000. Includes quick-win detection: queries at position 4-10 with high impressions. The `totals` block comes from a separate dimensionless aggregate query because query-level rows can omit anonymized low-volume traffic. Treat totals as site-wide only when `totals_complete` is true. `--limit` caps total returned dimension rows, not the size of every pagination request. > **AI surfaces in GSC (2026):** > - **Generative AI performance report** (launched 2026-06-03), a dedicated view of **AI Overviews + AI Mode** visibility. **Impressions only** (no clicks/CTR/position/query); dimensions Pages/Countries/Devices/Dates (Pacific Time); 1,000-row limit; newest data preliminary; a separate Discover gen-AI report also exists. Rolling out to a subset of properties. > - **AI Mode already rolls into standard Performance totals** (Web search type), clicks (external-link clicks in AI Mode) and impressions are counted in the normal report, so you **cannot** cleanly split "classic" vs "AI" traffic from totals. Use the Generative AI report for impressions-only AI visibility. > - **Data-reliability caveat:** a GSC logging error made **impressions, CTR, and average position unreliable from 2025-05-13 to 2026-04-27** (clicks unaffected; fixed forward-only, **no backfill**). Treat impression/CTR/position trends spanning that window with caution; expect an apparent impressions drop after the fix. ### `/seo google inspect ` URL Inspection: real indexation status from Google. **Script:** `claude-seo run gsc_inspect.py --json` Returns: verdict (PASS/FAIL), coverage state, robots.txt status, indexing state, page fetch state, canonical selection, mobile usability, rich results. ### `/seo google inspect-batch ` Batch inspection from a file (one URL per line). Rate limited to 2,000/day per site. **Script:** `claude-seo run gsc_inspect.py --batch --json` ### `/seo google sitemaps ` List submitted sitemaps with status, errors, warnings. Sitemap contents report submitted counts only; URL Inspection API is the indexation truth for whether specific URLs are indexed. **Script:** `claude-seo run gsc_query.py sitemaps --property --json` --- ## Indexing API ### `/seo google index ` Notify Google of a URL update. **Script:** `claude-seo run indexing_notify.py --json` **Reference:** `references/indexing-api.md` The Indexing API is officially for JobPosting and BroadcastEvent/VideoObject pages. Always inform the user of this restriction. Daily quota: 200 publish requests. ### `/seo google index-batch ` Batch submit URLs from a file. Tracks quota usage. **Script:** `claude-seo run indexing_notify.py --batch --json` --- ## GA4 Traffic ### `/seo google ga4 [property-id]` Organic traffic report: daily sessions, users, pageviews, bounce rate, engagement. **Script:** `claude-seo run ga4_report.py --property --json` **Reference:** `references/ga4-data-api.md` **Default:** 28 days, filtered to Organic Search channel group. > **GA4 "AI Assistants" channel (live ~2026-05-13):** GA4 added a native *AI Assistants* Default Channel Group. Sessions referred by a recognized AI assistant get `medium=ai-assistant`. Google's recognized sources are **ChatGPT, Gemini, Claude, Deepseek, Copilot, Grok** and the channel **excludes** Google AI Overviews / AI Mode. **Verify Perplexity separately if needed**; unsupported sources may stay in Referral, and most AI sessions arrive referrer-less and fall into **Direct**, so this channel undercounts AI traffic. Forward-only, no backfill. ### `/seo google ga4-pages [property-id]` Top organic landing pages ranked by sessions. **Script:** `claude-seo run ga4_report.py --property --report top-pages --json` --- ## YouTube (Video SEO) Some third-party studies report a 0.737 correlation between YouTube mentions and AI visibility. Treat it as a methodology-dependent signal. Free, API key only. ### `/seo google youtube ` Search YouTube for videos. Returns title, channel, views, likes, duration. **Script:** `claude-seo run youtube_search.py search "" --json` **Reference:** `references/youtube-api.md` **Quota:** 100 units per search (10,000 units/day free). ### `/seo google youtube-video ` Detailed video info + tags + top 10 comments. **Script:** `claude-seo run youtube_search.py video --json` **Quota:** 2 units (video details + comments). --- ## NLP Content Analysis Google NLP entity/sentiment output for internal content-quality checks. Do not treat it as Google E-E-A-T scoring. ### `/seo google nlp ` Full NLP analysis: entities, sentiment, content classification. **Script:** `claude-seo run nlp_analyze.py --url --json` or `--text "..."` **Reference:** `references/nlp-api.md` **Free tier:** 5,000 units/month. Requires billing enabled on GCP project. ### `/seo google entities ` Entity extraction only (faster, less quota). **Script:** `claude-seo run nlp_analyze.py --url --features entities --json` --- ## Keyword Research (Google Ads) Gold-standard keyword volume data. Requires Google Ads account. ### `/seo google keywords ` Generate keyword ideas from seed terms. **Script:** `claude-seo run keyword_planner.py ideas "" --json` **Reference:** `references/keyword-planner-api.md` **Requires:** Ads developer token + customer ID in config (Tier 3). ### `/seo google volume ` Search volume for specific keywords (comma-separated). **Script:** `claude-seo run keyword_planner.py volume "," --json` --- ## Supplementary ### `/seo google entity ` Knowledge Graph entity check. Verifies brand presence. **Reference:** `references/supplementary-apis.md` Uses Knowledge Graph Search API with API key. ### `/seo google safety ` Web Risk API check for malware/social engineering flags. **Reference:** `references/supplementary-apis.md` ### `/seo google quotas` Display rate limits table. Read `references/rate-limits-quotas.md`. --- ## Reports After any analysis command, offer to generate a PDF/HTML report. ### `/seo google report ` Generate a professional PDF report with charts and analytics. **Script:** `claude-seo run google_report.py --type --data --domain --format pdf` | Type | Input | Output | |------|-------|--------| | `cwv-audit` | PSI + CrUX + CrUX History data | Core Web Vitals audit with gauges, timelines, distributions | | `gsc-performance` | GSC query data | Search Console report with query tables, quick wins | | `indexation` | Batch inspection data | Indexation status with coverage donut chart | | `full` | All data combined | Comprehensive Google SEO report (all sections) | **Workflow:** 1. Run data collection commands (pagespeed, gsc, inspect-batch, etc.) 2. Save JSON output to file: `claude-seo run pagespeed_check.py --json > data.json` 3. Generate report: `claude-seo run google_report.py --type cwv-audit --data data.json --domain ` **Convention:** After completing analysis, suggest: "Generate a report? Use `/seo google report `" --- ## Rate Limits | API | Per-Minute | Per-Day | Auth | |-----|-----------|---------|------| | PSI v5 | 240 QPM | 25,000 QPD | API Key | | CrUX + History | 150 QPM (shared) | Unlimited | API Key | | GSC Search Analytics | 1,200 QPM/site | 30M QPD | Service Account | | GSC URL Inspection | 600 QPM | 2,000 QPD/site | Service Account | | Indexing API | 380 RPM | 200 publish/day | Service Account | | GA4 Data API | 10 concurrent | ~25K tokens/day | Service Account | ## Cross-Skill Integration - **seo-audit**: Spawns `seo-google` agent for live CWV + indexation data (conditional) - **seo-technical**: Uses pagespeed_check.py for real CWV field data - **seo-performance**: CrUX field data supplements Lighthouse lab data - **seo-sitemap**: GSC sitemap status shows submitted counts, errors, and warnings; use URL Inspection for indexation truth - **seo-content**: GSC query data informs keyword targeting - **seo-geo**: Use GSC Generative AI performance reports and AI Overviews/AI Mode/Discover gen-AI include/exclude controls where available ## Output Format - CWV metrics: traffic-light rating (Good / Needs Improvement / Poor) - Performance reports: tables with sortable columns - Always include data freshness note - Save reports as `GOOGLE-API-REPORT-{domain}.md` - Markdown/LLM templates in `assets/templates/`: `cwv-audit-report.md`, `gsc-performance-report.md`, `indexation-status-report.md`; distinct from `google_report.py`'s PDF pipeline ## Technical Notes - INP replaced FID on March 12, 2024. Never reference FID. - CLS values from CrUX are string-encoded (e.g., "0.05"). Scripts handle parsing. - CrUX 404 = insufficient traffic, not an auth error. - Search Analytics data has 2-3 day lag. - `round_trip_time` replaced `effectiveConnectionType` in CrUX (Feb 2025). - Custom Search JSON API is closed to new customers (2025). ## Error Handling | Scenario | Action | |----------|--------| | No credentials configured | Run `/seo google setup`. List Tier 0 commands that work with just an API key. | | Service account lacks GSC access | Report error. Instruct: add `client_email` to GSC > Settings > Users > Add. | | CrUX data unavailable (404) | Report insufficient Chrome traffic. Suggest PSI lab data as fallback. | | GA4 property not found | Report error. Show how to find property ID in GA4 Admin > Property Details. | | Indexing API quota exceeded | Report 200/day limit. Suggest prioritizing most important URLs. | | Rate limit (429) | Wait and retry with exponential backoff. Report which API hit the limit. | [View on SkillFed](https://skillfed.io/AgriciDaniel/claude-seo/seo-google) · [View on GitHub](https://github.com/AgriciDaniel/claude-seo)