Google SEO APIs

Google SEO APIs: Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, and GA4 organic traffic.

How to use it

  1. Hit Copy SKILL.md — or use the Claude Code line below to get every file.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit AgriciDaniel/claude-seo/skills/seo-google#main ~/.claude/skills/seo-google

For one project only, change the path to .claude/skills/seo-google. This skill also uses google_auth.py, pagespeed_check.py, crux_history.py, gsc_query.py, gsc_inspect.py, robots.txt — copying SKILL.md alone won't be enough. See the folder on GitHub.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text364 lines
seo-google/SKILL.md364 lines15.4 KBpushed 11d agoRawView on GitHub

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:

"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run google_auth.py --check --json

Config file: ~/.config/claude-seo/google-api.json

{
  "service_account_path": "/path/to/service_account.json",
  "api_key": "<GOOGLE_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 <url> PSI Lighthouse + CrUX field data 0
/seo google crux <url> CrUX field data only (p75 metrics) 0
/seo google crux-history <url> 25-week CWV trend analysis 0
/seo google gsc <property> Search Console: clicks, impressions, CTR, position 1
/seo google inspect <url> URL Inspection: index status, canonical, crawl info 1
/seo google inspect-batch <file> Batch URL Inspection from file 1
/seo google sitemaps <property> GSC sitemap status 1
/seo google index <url> Submit URL to Indexing API 1
/seo google index-batch <file> 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 <query> YouTube video search (views, likes, duration) 0
/seo google youtube-video <id> YouTube video details + top comments 0
/seo google nlp <url-or-text> NLP entity extraction + sentiment + classification 0
/seo google entities <url-or-text> Entity analysis only (for E-E-A-T) 0
/seo google keywords <seed> Keyword ideas from Google Ads Keyword Planner 3
/seo google volume <keywords> Search volume lookup from Keyword Planner 3
/seo google entity <query> Knowledge Graph entity check 0
/seo google safety <url> Web Risk URL safety check 0
/seo google quotas Show rate limits for all APIs --

PageSpeed + CrUX

/seo google pagespeed <url>

Combined Lighthouse lab data + CrUX field data.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --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 <url>

CrUX field data only (no Lighthouse run). Faster.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --crux-only --json

/seo google crux-history <url>

25-week CrUX History trends. Shows whether CWV metrics are improving, stable, or degrading.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run crux_history.py <url> --json Reference: references/pagespeed-crux-api.md

Output includes per-metric trend direction, percentage change, and weekly p75 values.


Search Console

/seo google gsc <property>

Search Analytics: clicks, impressions, CTR, position for last 28 days.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_query.py --property <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.

Platform properties (2026): Search Console can expose verified TikTok, Instagram, X, and YouTube accounts as individual properties. Verify each account separately, unless it was already added through a claimed Search profile. Use these properties for Google Search performance only, not as a substitute for the platform's own analytics. Source: developers.google.com/search/docs/monitor-debug/analyze-social-video-content

/seo google inspect <url>

URL Inspection: real indexation status from Google.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_inspect.py <url> --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 <file>

Batch inspection from a file (one URL per line). Rate limited to 2,000/day per site.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_inspect.py --batch <file> --json

/seo google sitemaps <property>

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_PLUGIN_ROOT}/scripts/claude-seo" run gsc_query.py sitemaps --property <property> --json


Indexing API

/seo google index <url>

Notify Google of a URL update.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run indexing_notify.py <url> --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 <file>

Batch submit URLs from a file. Tracks quota usage.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run indexing_notify.py --batch <file> --json


GA4 Traffic

/seo google ga4 [property-id]

Organic traffic report: daily sessions, users, pageviews, bounce rate, engagement.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run ga4_report.py --property <id> --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_PLUGIN_ROOT}/scripts/claude-seo" run ga4_report.py --property <id> --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 <query>

Search YouTube for videos. Returns title, channel, views, likes, duration.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run youtube_search.py search "<query>" --json Reference: references/youtube-api.md Quota: 100 units per search (10,000 units/day free).

/seo google youtube-video <video_id>

Detailed video info + tags + top 10 comments.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run youtube_search.py video <video_id> --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 <url-or-text>

Full NLP analysis: entities, sentiment, content classification.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run nlp_analyze.py --url <url> --json or --text "..." Reference: references/nlp-api.md Free tier: 5,000 units/month. Requires billing enabled on GCP project.

/seo google entities <url-or-text>

Entity extraction only (faster, less quota).

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run nlp_analyze.py --url <url> --features entities --json


Keyword Research (Google Ads)

Gold-standard keyword volume data. Requires Google Ads account.

/seo google keywords <seed>

Generate keyword ideas from seed terms.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run keyword_planner.py ideas "<seed>" --json Reference: references/keyword-planner-api.md Requires: Ads developer token + customer ID in config (Tier 3).

/seo google volume <keywords>

Search volume for specific keywords (comma-separated).

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run keyword_planner.py volume "<kw1>,<kw2>" --json


Supplementary

/seo google entity <query>

Knowledge Graph entity check. Verifies brand presence.

Reference: references/supplementary-apis.md Uses Knowledge Graph Search API with API key.

/seo google safety <url>

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 <type>

Generate a professional PDF report with charts and analytics.

Script: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run google_report.py --type <type> --data <json> --domain <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_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --json > data.json
  3. Generate report: "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run google_report.py --type cwv-audit --data data.json --domain <domain>

Convention: After completing analysis, suggest: "Generate a report? Use /seo google report <type>"


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.
1---
2name: seo-google
3description: >
4 Google SEO APIs: Search Console (Search Analytics, URL Inspection, Sitemaps),
5 PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3,
6 and GA4 organic traffic. Provides real Google field data for Core Web Vitals,
7 indexation status, search performance, and organic traffic trends. Use when
8 user says "search console", "GSC", "PageSpeed", "CrUX", "field data",
9 "indexing API", "GA4 organic", "URL inspection", or "real CWV data".
10user-invocable: true
11argument-hint: "[command] [url|property]"
12license: MIT
13metadata:
14 author: AgriciDaniel
15 version: "2.3.1"
16 category: seo
17---
18 
19# Google SEO APIs
20 
21Direct access to Google's own SEO data. Bridges the gap between crawl-based
22analysis (existing claude-seo skills) and Google's real-time field data: actual
23Chrome user metrics, real indexation status, search performance, and organic traffic.
24 
25All APIs are free. Setup requires a Google Cloud project with API key and/or
26service account -- run `/seo google setup` for step-by-step instructions.
27 
28## Prerequisites
29 
30Before executing any command, check credentials:
31```bash
32"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run google_auth.py --check --json
33```
34 
35Config file: `~/.config/claude-seo/google-api.json`
36```json
37{
38 "service_account_path": "/path/to/service_account.json",
39 "api_key": "<GOOGLE_API_KEY>",
40 "default_property": "sc-domain:example.com",
41 "ga4_property_id": "properties/123456789"
42}
43```
44 
45If missing, read `references/auth-setup.md` and walk the user through setup.
46 
47### Credential Tiers
48 
49| Tier | Detection | Available Commands |
50|------|-----------|-------------------|
51| **0** (API Key) | `api_key` present | `pagespeed`, `crux`, `crux-history`, `youtube`, `nlp` |
52| **1** (OAuth/SA) | + OAuth token or service account | Tier 0 + `gsc`, `inspect`, `sitemaps`, `index` |
53| **2** (Full) | + `ga4_property_id` configured | Tier 1 + `ga4`, `ga4-pages` |
54| **3** (Ads) | + `ads_developer_token` + `ads_customer_id` | Tier 2 + `keywords`, `volume` |
55 
56Always communicate the detected tier before running commands.
57 
58## Quick Reference
59 
60| Command | What it does | Tier |
61|---------|-------------|------|
62| `/seo google setup` | Check/configure API credentials | -- |
63| `/seo google pagespeed <url>` | PSI Lighthouse + CrUX field data | 0 |
64| `/seo google crux <url>` | CrUX field data only (p75 metrics) | 0 |
65| `/seo google crux-history <url>` | 25-week CWV trend analysis | 0 |
66| `/seo google gsc <property>` | Search Console: clicks, impressions, CTR, position | 1 |
67| `/seo google inspect <url>` | URL Inspection: index status, canonical, crawl info | 1 |
68| `/seo google inspect-batch <file>` | Batch URL Inspection from file | 1 |
69| `/seo google sitemaps <property>` | GSC sitemap status | 1 |
70| `/seo google index <url>` | Submit URL to Indexing API | 1 |
71| `/seo google index-batch <file>` | Batch submit up to 200 URLs | 1 |
72| `/seo google ga4 [property-id]` | GA4 organic traffic report | 2 |
73| `/seo google ga4-pages [property-id]` | Top organic landing pages | 2 |
74| `/seo google youtube <query>` | YouTube video search (views, likes, duration) | 0 |
75| `/seo google youtube-video <id>` | YouTube video details + top comments | 0 |
76| `/seo google nlp <url-or-text>` | NLP entity extraction + sentiment + classification | 0 |
77| `/seo google entities <url-or-text>` | Entity analysis only (for E-E-A-T) | 0 |
78| `/seo google keywords <seed>` | Keyword ideas from Google Ads Keyword Planner | 3 |
79| `/seo google volume <keywords>` | Search volume lookup from Keyword Planner | 3 |
80| `/seo google entity <query>` | Knowledge Graph entity check | 0 |
81| `/seo google safety <url>` | Web Risk URL safety check | 0 |
82| `/seo google quotas` | Show rate limits for all APIs | -- |
83 
84---
85 
86## PageSpeed + CrUX
87 
88### `/seo google pagespeed <url>`
89 
90Combined Lighthouse lab data + CrUX field data.
91 
92**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --json`
93**Reference:** `references/pagespeed-crux-api.md`
94**Default:** Both mobile + desktop strategies, all Lighthouse categories.
95 
96Output merges lab scores (point-in-time Lighthouse) with field data (28-day
97Chrome user metrics). CrUX tries URL-level first, falls back to origin-level.
98 
99### `/seo google crux <url>`
100 
101CrUX field data only (no Lighthouse run). Faster.
102 
103**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --crux-only --json`
104 
105### `/seo google crux-history <url>`
106 
10725-week CrUX History trends. Shows whether CWV metrics are improving, stable, or degrading.
108 
109**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run crux_history.py <url> --json`
110**Reference:** `references/pagespeed-crux-api.md`
111 
112Output includes per-metric trend direction, percentage change, and weekly p75 values.
113 
114---
115 
116## Search Console
117 
118### `/seo google gsc <property>`
119 
120Search Analytics: clicks, impressions, CTR, position for last 28 days.
121 
122**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_query.py --property <property> --json`
123**Reference:** `references/search-console-api.md`
124**Default:** 28 days, dimensions=query,page, type=web, limit=1000.
125 
126Includes quick-win detection: queries at position 4-10 with high impressions.
127The `totals` block comes from a separate dimensionless aggregate query because
128query-level rows can omit anonymized low-volume traffic. Treat totals as
129site-wide only when `totals_complete` is true. `--limit` caps total returned
130dimension rows, not the size of every pagination request.
131 
132> **AI surfaces in GSC (2026):**
133> - **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.
134> - **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.
135> - **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.
136 
137> **Platform properties (2026):** Search Console can expose verified TikTok,
138> Instagram, X, and YouTube accounts as individual properties. Verify each
139> account separately, unless it was already added through a claimed Search
140> profile. Use these properties for Google Search performance only, not as a
141> substitute for the platform's own analytics. Source:
142> developers.google.com/search/docs/monitor-debug/analyze-social-video-content
143 
144### `/seo google inspect <url>`
145 
146URL Inspection: real indexation status from Google.
147 
148**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_inspect.py <url> --json`
149 
150Returns: verdict (PASS/FAIL), coverage state, robots.txt status, indexing state,
151page fetch state, canonical selection, mobile usability, rich results.
152 
153### `/seo google inspect-batch <file>`
154 
155Batch inspection from a file (one URL per line). Rate limited to 2,000/day per site.
156 
157**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_inspect.py --batch <file> --json`
158 
159### `/seo google sitemaps <property>`
160 
161List submitted sitemaps with status, errors, warnings. Sitemap contents report
162submitted counts only; URL Inspection API is the indexation truth for whether
163specific URLs are indexed.
164 
165**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_query.py sitemaps --property <property> --json`
166 
167---
168 
169## Indexing API
170 
171### `/seo google index <url>`
172 
173Notify Google of a URL update.
174 
175**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run indexing_notify.py <url> --json`
176**Reference:** `references/indexing-api.md`
177 
178The Indexing API is officially for JobPosting and BroadcastEvent/VideoObject pages.
179Always inform the user of this restriction. Daily quota: 200 publish requests.
180 
181### `/seo google index-batch <file>`
182 
183Batch submit URLs from a file. Tracks quota usage.
184 
185**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run indexing_notify.py --batch <file> --json`
186 
187---
188 
189## GA4 Traffic
190 
191### `/seo google ga4 [property-id]`
192 
193Organic traffic report: daily sessions, users, pageviews, bounce rate, engagement.
194 
195**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run ga4_report.py --property <id> --json`
196**Reference:** `references/ga4-data-api.md`
197**Default:** 28 days, filtered to Organic Search channel group.
198 
199> **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.
200 
201### `/seo google ga4-pages [property-id]`
202 
203Top organic landing pages ranked by sessions.
204 
205**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run ga4_report.py --property <id> --report top-pages --json`
206 
207---
208 
209## YouTube (Video SEO)
210 
211Some 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.
212 
213### `/seo google youtube <query>`
214 
215Search YouTube for videos. Returns title, channel, views, likes, duration.
216 
217**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run youtube_search.py search "<query>" --json`
218**Reference:** `references/youtube-api.md`
219**Quota:** 100 units per search (10,000 units/day free).
220 
221### `/seo google youtube-video <video_id>`
222 
223Detailed video info + tags + top 10 comments.
224 
225**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run youtube_search.py video <video_id> --json`
226**Quota:** 2 units (video details + comments).
227 
228---
229 
230## NLP Content Analysis
231 
232Google NLP entity/sentiment output for internal content-quality checks. Do not treat it as Google E-E-A-T scoring.
233 
234### `/seo google nlp <url-or-text>`
235 
236Full NLP analysis: entities, sentiment, content classification.
237 
238**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run nlp_analyze.py --url <url> --json` or `--text "..."`
239**Reference:** `references/nlp-api.md`
240**Free tier:** 5,000 units/month. Requires billing enabled on GCP project.
241 
242### `/seo google entities <url-or-text>`
243 
244Entity extraction only (faster, less quota).
245 
246**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run nlp_analyze.py --url <url> --features entities --json`
247 
248---
249 
250## Keyword Research (Google Ads)
251 
252Gold-standard keyword volume data. Requires Google Ads account.
253 
254### `/seo google keywords <seed>`
255 
256Generate keyword ideas from seed terms.
257 
258**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run keyword_planner.py ideas "<seed>" --json`
259**Reference:** `references/keyword-planner-api.md`
260**Requires:** Ads developer token + customer ID in config (Tier 3).
261 
262### `/seo google volume <keywords>`
263 
264Search volume for specific keywords (comma-separated).
265 
266**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run keyword_planner.py volume "<kw1>,<kw2>" --json`
267 
268---
269 
270## Supplementary
271 
272### `/seo google entity <query>`
273 
274Knowledge Graph entity check. Verifies brand presence.
275 
276**Reference:** `references/supplementary-apis.md`
277Uses Knowledge Graph Search API with API key.
278 
279### `/seo google safety <url>`
280 
281Web Risk API check for malware/social engineering flags.
282 
283**Reference:** `references/supplementary-apis.md`
284 
285### `/seo google quotas`
286 
287Display rate limits table. Read `references/rate-limits-quotas.md`.
288 
289---
290 
291## Reports
292 
293After any analysis command, offer to generate a PDF/HTML report.
294 
295### `/seo google report <type>`
296 
297Generate a professional PDF report with charts and analytics.
298 
299**Script:** `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run google_report.py --type <type> --data <json> --domain <domain> --format pdf`
300 
301| Type | Input | Output |
302|------|-------|--------|
303| `cwv-audit` | PSI + CrUX + CrUX History data | Core Web Vitals audit with gauges, timelines, distributions |
304| `gsc-performance` | GSC query data | Search Console report with query tables, quick wins |
305| `indexation` | Batch inspection data | Indexation status with coverage donut chart |
306| `full` | All data combined | Comprehensive Google SEO report (all sections) |
307 
308**Workflow:**
3091. Run data collection commands (pagespeed, gsc, inspect-batch, etc.)
3102. Save JSON output to file: `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --json > data.json`
3113. Generate report: `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run google_report.py --type cwv-audit --data data.json --domain <domain>`
312 
313**Convention:** After completing analysis, suggest: "Generate a report? Use `/seo google report <type>`"
314 
315---
316 
317## Rate Limits
318 
319| API | Per-Minute | Per-Day | Auth |
320|-----|-----------|---------|------|
321| PSI v5 | 240 QPM | 25,000 QPD | API Key |
322| CrUX + History | 150 QPM (shared) | Unlimited | API Key |
323| GSC Search Analytics | 1,200 QPM/site | 30M QPD | Service Account |
324| GSC URL Inspection | 600 QPM | 2,000 QPD/site | Service Account |
325| Indexing API | 380 RPM | 200 publish/day | Service Account |
326| GA4 Data API | 10 concurrent | ~25K tokens/day | Service Account |
327 
328## Cross-Skill Integration
329 
330- **seo-audit**: Spawns `seo-google` agent for live CWV + indexation data (conditional)
331- **seo-technical**: Uses pagespeed_check.py for real CWV field data
332- **seo-performance**: CrUX field data supplements Lighthouse lab data
333- **seo-sitemap**: GSC sitemap status shows submitted counts, errors, and warnings; use URL Inspection for indexation truth
334- **seo-content**: GSC query data informs keyword targeting
335- **seo-geo**: Use GSC Generative AI performance reports and AI Overviews/AI Mode/Discover gen-AI include/exclude controls where available
336 
337## Output Format
338 
339- CWV metrics: traffic-light rating (Good / Needs Improvement / Poor)
340- Performance reports: tables with sortable columns
341- Always include data freshness note
342- Save reports as `GOOGLE-API-REPORT-{domain}.md`
343- 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
344 
345## Technical Notes
346 
347- INP replaced FID on March 12, 2024. Never reference FID.
348- CLS values from CrUX are string-encoded (e.g., "0.05"). Scripts handle parsing.
349- CrUX 404 = insufficient traffic, not an auth error.
350- Search Analytics data has 2-3 day lag.
351- `round_trip_time` replaced `effectiveConnectionType` in CrUX (Feb 2025).
352- Custom Search JSON API is closed to new customers (2025).
353 
354## Error Handling
355 
356| Scenario | Action |
357|----------|--------|
358| No credentials configured | Run `/seo google setup`. List Tier 0 commands that work with just an API key. |
359| Service account lacks GSC access | Report error. Instruct: add `client_email` to GSC > Settings > Users > Add. |
360| CrUX data unavailable (404) | Report insufficient Chrome traffic. Suggest PSI lab data as fallback. |
361| GA4 property not found | Report error. Show how to find property ID in GA4 Admin > Property Details. |
362| Indexing API quota exceeded | Report 200/day limit. Suggest prioritizing most important URLs. |
363| Rate limit (429) | Wait and retry with exponential backoff. Report which API hit the limit. |
364 

Discussion

Alternatives

Also in SEO & keywords