antigravity-seo-kit 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of antigravity-seo-kit might be problematic. Click here for more details.
- package/.agent/agent.md +96 -0
- package/.agent/skills/seo/SKILL.md +153 -0
- package/.agent/skills/seo/references/cwv-thresholds.md +108 -0
- package/.agent/skills/seo/references/eeat-framework.md +214 -0
- package/.agent/skills/seo/references/local-schema-types.md +230 -0
- package/.agent/skills/seo/references/local-seo-signals.md +218 -0
- package/.agent/skills/seo/references/maps-api-endpoints.md +160 -0
- package/.agent/skills/seo/references/maps-free-apis.md +176 -0
- package/.agent/skills/seo/references/maps-gbp-checklist.md +150 -0
- package/.agent/skills/seo/references/maps-geo-grid.md +154 -0
- package/.agent/skills/seo/references/quality-gates.md +155 -0
- package/.agent/skills/seo/references/schema-types.md +118 -0
- package/.agent/skills/seo/schema/templates.json +213 -0
- package/.agent/skills/seo/scripts/analyze_visual.py +217 -0
- package/.agent/skills/seo/scripts/capture_screenshot.py +181 -0
- package/.agent/skills/seo/scripts/fetch_page.py +196 -0
- package/.agent/skills/seo/scripts/parse_html.py +201 -0
- package/.agent/skills/seo-audit/SKILL.md +278 -0
- package/.agent/skills/seo-competitor-pages/SKILL.md +212 -0
- package/.agent/skills/seo-content/SKILL.md +230 -0
- package/.agent/skills/seo-dataforseo/SKILL.md +418 -0
- package/.agent/skills/seo-geo/SKILL.md +305 -0
- package/.agent/skills/seo-google/SKILL.md +405 -0
- package/.agent/skills/seo-google/assets/templates/cwv-audit-report.md +48 -0
- package/.agent/skills/seo-google/assets/templates/gsc-performance-report.md +44 -0
- package/.agent/skills/seo-google/assets/templates/indexation-status-report.md +43 -0
- package/.agent/skills/seo-google/references/auth-setup.md +154 -0
- package/.agent/skills/seo-google/references/ga4-data-api.md +184 -0
- package/.agent/skills/seo-google/references/indexing-api.md +107 -0
- package/.agent/skills/seo-google/references/keyword-planner-api.md +66 -0
- package/.agent/skills/seo-google/references/nlp-api.md +55 -0
- package/.agent/skills/seo-google/references/pagespeed-crux-api.md +204 -0
- package/.agent/skills/seo-google/references/rate-limits-quotas.md +75 -0
- package/.agent/skills/seo-google/references/search-console-api.md +156 -0
- package/.agent/skills/seo-google/references/supplementary-apis.md +99 -0
- package/.agent/skills/seo-google/references/youtube-api.md +49 -0
- package/.agent/skills/seo-google/scripts/crux_history.py +321 -0
- package/.agent/skills/seo-google/scripts/ga4_report.py +478 -0
- package/.agent/skills/seo-google/scripts/google_auth.py +795 -0
- package/.agent/skills/seo-google/scripts/google_report.py +2273 -0
- package/.agent/skills/seo-google/scripts/gsc_inspect.py +340 -0
- package/.agent/skills/seo-google/scripts/gsc_query.py +378 -0
- package/.agent/skills/seo-google/scripts/indexing_notify.py +313 -0
- package/.agent/skills/seo-google/scripts/keyword_planner.py +297 -0
- package/.agent/skills/seo-google/scripts/nlp_analyze.py +309 -0
- package/.agent/skills/seo-google/scripts/pagespeed_check.py +649 -0
- package/.agent/skills/seo-google/scripts/youtube_search.py +355 -0
- package/.agent/skills/seo-hreflang/SKILL.md +192 -0
- package/.agent/skills/seo-image-gen/SKILL.md +211 -0
- package/.agent/skills/seo-image-gen/references/cost-tracking.md +47 -0
- package/.agent/skills/seo-image-gen/references/gemini-models.md +200 -0
- package/.agent/skills/seo-image-gen/references/mcp-tools.md +115 -0
- package/.agent/skills/seo-image-gen/references/post-processing.md +192 -0
- package/.agent/skills/seo-image-gen/references/presets.md +69 -0
- package/.agent/skills/seo-image-gen/references/prompt-engineering.md +411 -0
- package/.agent/skills/seo-image-gen/references/seo-image-presets.md +137 -0
- package/.agent/skills/seo-image-gen/scripts/batch.py +97 -0
- package/.agent/skills/seo-image-gen/scripts/cost_tracker.py +191 -0
- package/.agent/skills/seo-image-gen/scripts/edit.py +141 -0
- package/.agent/skills/seo-image-gen/scripts/generate.py +149 -0
- package/.agent/skills/seo-image-gen/scripts/presets.py +153 -0
- package/.agent/skills/seo-image-gen/scripts/setup_mcp.py +151 -0
- package/.agent/skills/seo-image-gen/scripts/validate_setup.py +133 -0
- package/.agent/skills/seo-images/SKILL.md +176 -0
- package/.agent/skills/seo-local/SKILL.md +381 -0
- package/.agent/skills/seo-maps/SKILL.md +328 -0
- package/.agent/skills/seo-page/SKILL.md +86 -0
- package/.agent/skills/seo-plan/SKILL.md +118 -0
- package/.agent/skills/seo-plan/assets/agency.md +175 -0
- package/.agent/skills/seo-plan/assets/ecommerce.md +167 -0
- package/.agent/skills/seo-plan/assets/generic.md +144 -0
- package/.agent/skills/seo-plan/assets/local-service.md +160 -0
- package/.agent/skills/seo-plan/assets/publisher.md +153 -0
- package/.agent/skills/seo-plan/assets/saas.md +135 -0
- package/.agent/skills/seo-programmatic/SKILL.md +171 -0
- package/.agent/skills/seo-schema/SKILL.md +223 -0
- package/.agent/skills/seo-sitemap/SKILL.md +180 -0
- package/.agent/skills/seo-technical/SKILL.md +211 -0
- package/.agent/workflows/seo-audit.md +17 -0
- package/.agent/workflows/seo-competitor-pages.md +12 -0
- package/.agent/workflows/seo-content.md +14 -0
- package/.agent/workflows/seo-geo.md +12 -0
- package/.agent/workflows/seo-google.md +12 -0
- package/.agent/workflows/seo-hreflang.md +12 -0
- package/.agent/workflows/seo-images.md +13 -0
- package/.agent/workflows/seo-local.md +12 -0
- package/.agent/workflows/seo-maps.md +11 -0
- package/.agent/workflows/seo-page.md +13 -0
- package/.agent/workflows/seo-plan.md +13 -0
- package/.agent/workflows/seo-programmatic.md +12 -0
- package/.agent/workflows/seo-schema.md +11 -0
- package/.agent/workflows/seo-sitemap.md +9 -0
- package/.agent/workflows/seo-technical.md +18 -0
- package/LICENSE +88 -0
- package/README.md +122 -0
- package/bin/cli.js +117 -0
- package/docs/ARCHITECTURE.md +218 -0
- package/docs/COMMANDS.md +184 -0
- package/docs/INSTALLATION.md +100 -0
- package/docs/MCP-INTEGRATION.md +153 -0
- package/docs/TROUBLESHOOTING.md +151 -0
- package/docs/superpowers/plans/2026-03-13-github-audit-fixes.md +511 -0
- package/extensions/banana/README.md +95 -0
- package/extensions/banana/docs/BANANA-SETUP.md +86 -0
- package/extensions/banana/install.sh +170 -0
- package/extensions/banana/references/cost-tracking.md +47 -0
- package/extensions/banana/references/gemini-models.md +200 -0
- package/extensions/banana/references/mcp-tools.md +115 -0
- package/extensions/banana/references/post-processing.md +192 -0
- package/extensions/banana/references/presets.md +69 -0
- package/extensions/banana/references/prompt-engineering.md +411 -0
- package/extensions/banana/references/seo-image-presets.md +137 -0
- package/extensions/banana/scripts/batch.py +97 -0
- package/extensions/banana/scripts/cost_tracker.py +191 -0
- package/extensions/banana/scripts/edit.py +141 -0
- package/extensions/banana/scripts/generate.py +149 -0
- package/extensions/banana/scripts/presets.py +153 -0
- package/extensions/banana/scripts/setup_mcp.py +151 -0
- package/extensions/banana/scripts/validate_setup.py +133 -0
- package/extensions/banana/uninstall.sh +43 -0
- package/extensions/dataforseo/README.md +169 -0
- package/extensions/dataforseo/docs/DATAFORSEO-SETUP.md +74 -0
- package/extensions/dataforseo/field-config.json +280 -0
- package/extensions/dataforseo/install.ps1 +110 -0
- package/extensions/dataforseo/install.sh +161 -0
- package/extensions/dataforseo/uninstall.ps1 +35 -0
- package/extensions/dataforseo/uninstall.sh +39 -0
- package/lib/api.js +190 -0
- package/lib/fingerprint.js +68 -0
- package/lib/installer.js +486 -0
- package/lib/utils.js +254 -0
- package/package.json +40 -0
- package/pyproject.toml +11 -0
- package/requirements-google.txt +15 -0
- package/requirements.txt +11 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-google
|
|
3
|
+
description: >
|
|
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", "google api setup",
|
|
10
|
+
"real CWV data", "impressions", "clicks", "CTR", "position data",
|
|
11
|
+
"LCP", "INP", "CLS", "FCP", "TTFB", or "Lighthouse scores".
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Google SEO APIs
|
|
15
|
+
|
|
16
|
+
Direct access to Google's own SEO data. Bridges the gap between crawl-based
|
|
17
|
+
analysis (existing seo-kit skills) and Google's real-time field data: actual
|
|
18
|
+
Chrome user metrics, real indexation status, search performance, and organic traffic.
|
|
19
|
+
|
|
20
|
+
All APIs are free. Setup requires a Google Cloud project with API key and/or
|
|
21
|
+
service account -- run `/seo google setup` for step-by-step instructions.
|
|
22
|
+
|
|
23
|
+
## Prerequisites
|
|
24
|
+
|
|
25
|
+
Before executing any command, check credentials:
|
|
26
|
+
```bash
|
|
27
|
+
python scripts/google_auth.py --check --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Config file: `.agent/skills/seo-google/config/google-api.json`
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"service_account_path": "/path/to/service_account.json",
|
|
34
|
+
"api_key": "AIzaSy...",
|
|
35
|
+
"default_property": "sc-domain:example.com",
|
|
36
|
+
"ga4_property_id": "properties/123456789"
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If missing, read `references/auth-setup.md` and walk the user through setup.
|
|
41
|
+
|
|
42
|
+
### Credential Tiers
|
|
43
|
+
|
|
44
|
+
| Tier | Detection | Available Commands |
|
|
45
|
+
|------|-----------|-------------------|
|
|
46
|
+
| **0** (API Key) | `api_key` present | `pagespeed`, `crux`, `crux-history`, `youtube`, `nlp` |
|
|
47
|
+
| **1** (OAuth/SA) | + OAuth token or service account | Tier 0 + `gsc`, `inspect`, `sitemaps`, `index` |
|
|
48
|
+
| **2** (Full) | + `ga4_property_id` configured | Tier 1 + `ga4`, `ga4-pages` |
|
|
49
|
+
| **3** (Ads) | + `ads_developer_token` + `ads_customer_id` | Tier 2 + `keywords`, `volume` |
|
|
50
|
+
|
|
51
|
+
Always communicate the detected tier before running commands.
|
|
52
|
+
|
|
53
|
+
## Quick Reference
|
|
54
|
+
|
|
55
|
+
| Command | What it does | Tier |
|
|
56
|
+
|---------|-------------|------|
|
|
57
|
+
| `/seo google setup` | Check/configure API credentials | -- |
|
|
58
|
+
| `/seo google pagespeed <url>` | PSI Lighthouse + CrUX field data | 0 |
|
|
59
|
+
| `/seo google crux <url>` | CrUX field data only (p75 metrics) | 0 |
|
|
60
|
+
| `/seo google crux-history <url>` | 25-week CWV trend analysis | 0 |
|
|
61
|
+
| `/seo google gsc <property>` | Search Console: clicks, impressions, CTR, position | 1 |
|
|
62
|
+
| `/seo google inspect <url>` | URL Inspection: index status, canonical, crawl info | 1 |
|
|
63
|
+
| `/seo google inspect-batch <file>` | Batch URL Inspection from file | 1 |
|
|
64
|
+
| `/seo google sitemaps <property>` | GSC sitemap status | 1 |
|
|
65
|
+
| `/seo google index <url>` | Submit URL to Indexing API | 1 |
|
|
66
|
+
| `/seo google index-batch <file>` | Batch submit up to 200 URLs | 1 |
|
|
67
|
+
| `/seo google ga4 [property-id]` | GA4 organic traffic report | 2 |
|
|
68
|
+
| `/seo google ga4-pages [property-id]` | Top organic landing pages | 2 |
|
|
69
|
+
| `/seo google youtube <query>` | YouTube video search (views, likes, duration) | 0 |
|
|
70
|
+
| `/seo google youtube-video <id>` | YouTube video details + top comments | 0 |
|
|
71
|
+
| `/seo google nlp <url-or-text>` | NLP entity extraction + sentiment + classification | 0 |
|
|
72
|
+
| `/seo google entities <url-or-text>` | Entity analysis only (for E-E-A-T) | 0 |
|
|
73
|
+
| `/seo google keywords <seed>` | Keyword ideas from Google Ads Keyword Planner | 3 |
|
|
74
|
+
| `/seo google volume <keywords>` | Search volume lookup from Keyword Planner | 3 |
|
|
75
|
+
| `/seo google entity <query>` | Knowledge Graph entity check | 0 |
|
|
76
|
+
| `/seo google safety <url>` | Web Risk URL safety check | 0 |
|
|
77
|
+
| `/seo google quotas` | Show rate limits for all APIs | -- |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## PageSpeed + CrUX
|
|
82
|
+
|
|
83
|
+
### `/seo google pagespeed <url>`
|
|
84
|
+
|
|
85
|
+
Combined Lighthouse lab data + CrUX field data.
|
|
86
|
+
|
|
87
|
+
**Script:** `python scripts/pagespeed_check.py <url> --json`
|
|
88
|
+
**Reference:** `references/pagespeed-crux-api.md`
|
|
89
|
+
**Default:** Both mobile + desktop strategies, all Lighthouse categories.
|
|
90
|
+
|
|
91
|
+
Output merges lab scores (point-in-time Lighthouse) with field data (28-day
|
|
92
|
+
Chrome user metrics). CrUX tries URL-level first, falls back to origin-level.
|
|
93
|
+
|
|
94
|
+
### `/seo google crux <url>`
|
|
95
|
+
|
|
96
|
+
CrUX field data only (no Lighthouse run). Faster.
|
|
97
|
+
|
|
98
|
+
**Script:** `python scripts/pagespeed_check.py <url> --crux-only --json`
|
|
99
|
+
|
|
100
|
+
### `/seo google crux-history <url>`
|
|
101
|
+
|
|
102
|
+
25-week CrUX History trends. Shows whether CWV metrics are improving, stable, or degrading.
|
|
103
|
+
|
|
104
|
+
**Script:** `python scripts/crux_history.py <url> --json`
|
|
105
|
+
**Reference:** `references/pagespeed-crux-api.md`
|
|
106
|
+
|
|
107
|
+
Output includes per-metric trend direction, percentage change, and weekly p75 values.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Search Console
|
|
112
|
+
|
|
113
|
+
### `/seo google gsc <property>`
|
|
114
|
+
|
|
115
|
+
Search Analytics: clicks, impressions, CTR, position for last 28 days.
|
|
116
|
+
|
|
117
|
+
**Script:** `python scripts/gsc_query.py --property <property> --json`
|
|
118
|
+
**Reference:** `references/search-console-api.md`
|
|
119
|
+
**Default:** 28 days, dimensions=query,page, type=web, limit=1000.
|
|
120
|
+
|
|
121
|
+
Includes quick-win detection: queries at position 4-10 with high impressions.
|
|
122
|
+
|
|
123
|
+
### `/seo google inspect <url>`
|
|
124
|
+
|
|
125
|
+
URL Inspection: real indexation status from Google.
|
|
126
|
+
|
|
127
|
+
**Script:** `python scripts/gsc_inspect.py <url> --json`
|
|
128
|
+
|
|
129
|
+
Returns: verdict (PASS/FAIL), coverage state, robots.txt status, indexing state,
|
|
130
|
+
page fetch state, canonical selection, mobile usability, rich results.
|
|
131
|
+
|
|
132
|
+
### `/seo google inspect-batch <file>`
|
|
133
|
+
|
|
134
|
+
Batch inspection from a file (one URL per line). Rate limited to 2,000/day per site.
|
|
135
|
+
|
|
136
|
+
**Script:** `python scripts/gsc_inspect.py --batch <file> --json`
|
|
137
|
+
|
|
138
|
+
### `/seo google sitemaps <property>`
|
|
139
|
+
|
|
140
|
+
List submitted sitemaps with status, errors, warnings.
|
|
141
|
+
|
|
142
|
+
**Script:** `python scripts/gsc_query.py sitemaps --property <property> --json`
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Indexing API
|
|
147
|
+
|
|
148
|
+
### `/seo google index <url>`
|
|
149
|
+
|
|
150
|
+
Notify Google of a URL update.
|
|
151
|
+
|
|
152
|
+
**Script:** `python scripts/indexing_notify.py <url> --json`
|
|
153
|
+
**Reference:** `references/indexing-api.md`
|
|
154
|
+
|
|
155
|
+
The Indexing API is officially for JobPosting and BroadcastEvent/VideoObject pages.
|
|
156
|
+
Always inform the user of this restriction. Daily quota: 200 publish requests.
|
|
157
|
+
|
|
158
|
+
### `/seo google index-batch <file>`
|
|
159
|
+
|
|
160
|
+
Batch submit URLs from a file. Tracks quota usage.
|
|
161
|
+
|
|
162
|
+
**Script:** `python scripts/indexing_notify.py --batch <file> --json`
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## GA4 Traffic
|
|
167
|
+
|
|
168
|
+
### `/seo google ga4 [property-id]`
|
|
169
|
+
|
|
170
|
+
Organic traffic report: daily sessions, users, pageviews, bounce rate, engagement.
|
|
171
|
+
|
|
172
|
+
**Script:** `python scripts/ga4_report.py --property <id> --json`
|
|
173
|
+
**Reference:** `references/ga4-data-api.md`
|
|
174
|
+
**Default:** 28 days, filtered to Organic Search channel group.
|
|
175
|
+
|
|
176
|
+
### `/seo google ga4-pages [property-id]`
|
|
177
|
+
|
|
178
|
+
Top organic landing pages ranked by sessions.
|
|
179
|
+
|
|
180
|
+
**Script:** `python scripts/ga4_report.py --property <id> --report top-pages --json`
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## YouTube (Video SEO)
|
|
185
|
+
|
|
186
|
+
YouTube mentions have the strongest AI visibility correlation (0.737). Free, API key only.
|
|
187
|
+
|
|
188
|
+
### `/seo google youtube <query>`
|
|
189
|
+
|
|
190
|
+
Search YouTube for videos. Returns title, channel, views, likes, duration.
|
|
191
|
+
|
|
192
|
+
**Script:** `python scripts/youtube_search.py search "<query>" --json`
|
|
193
|
+
**Reference:** `references/youtube-api.md`
|
|
194
|
+
**Quota:** 100 units per search (10,000 units/day free).
|
|
195
|
+
|
|
196
|
+
### `/seo google youtube-video <video_id>`
|
|
197
|
+
|
|
198
|
+
Detailed video info + tags + top 10 comments.
|
|
199
|
+
|
|
200
|
+
**Script:** `python scripts/youtube_search.py video <video_id> --json`
|
|
201
|
+
**Quota:** 2 units (video details + comments).
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## NLP Content Analysis
|
|
206
|
+
|
|
207
|
+
Google's own entity/sentiment analysis. Enhances E-E-A-T scoring.
|
|
208
|
+
|
|
209
|
+
### `/seo google nlp <url-or-text>`
|
|
210
|
+
|
|
211
|
+
Full NLP analysis: entities, sentiment, content classification.
|
|
212
|
+
|
|
213
|
+
**Script:** `python scripts/nlp_analyze.py --url <url> --json` or `--text "..."`
|
|
214
|
+
**Reference:** `references/nlp-api.md`
|
|
215
|
+
**Free tier:** 5,000 units/month. Requires billing enabled on GCP project.
|
|
216
|
+
|
|
217
|
+
### `/seo google entities <url-or-text>`
|
|
218
|
+
|
|
219
|
+
Entity extraction only (faster, less quota).
|
|
220
|
+
|
|
221
|
+
**Script:** `python scripts/nlp_analyze.py --url <url> --features entities --json`
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Keyword Research (Google Ads)
|
|
226
|
+
|
|
227
|
+
Gold-standard keyword volume data. Requires Google Ads account.
|
|
228
|
+
|
|
229
|
+
### `/seo google keywords <seed>`
|
|
230
|
+
|
|
231
|
+
Generate keyword ideas from seed terms.
|
|
232
|
+
|
|
233
|
+
**Script:** `python scripts/keyword_planner.py ideas "<seed>" --json`
|
|
234
|
+
**Reference:** `references/keyword-planner-api.md`
|
|
235
|
+
**Requires:** Ads developer token + customer ID in config (Tier 3).
|
|
236
|
+
|
|
237
|
+
### `/seo google volume <keywords>`
|
|
238
|
+
|
|
239
|
+
Search volume for specific keywords (comma-separated).
|
|
240
|
+
|
|
241
|
+
**Script:** `python scripts/keyword_planner.py volume "<kw1>,<kw2>" --json`
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Supplementary
|
|
246
|
+
|
|
247
|
+
### `/seo google entity <query>`
|
|
248
|
+
|
|
249
|
+
Knowledge Graph entity check. Verifies brand presence.
|
|
250
|
+
|
|
251
|
+
**Reference:** `references/supplementary-apis.md`
|
|
252
|
+
Uses Knowledge Graph Search API with API key.
|
|
253
|
+
|
|
254
|
+
### `/seo google safety <url>`
|
|
255
|
+
|
|
256
|
+
Web Risk API check for malware/social engineering flags.
|
|
257
|
+
|
|
258
|
+
**Reference:** `references/supplementary-apis.md`
|
|
259
|
+
|
|
260
|
+
### `/seo google quotas`
|
|
261
|
+
|
|
262
|
+
Display rate limits table. Read `references/rate-limits-quotas.md`.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Reports
|
|
267
|
+
|
|
268
|
+
After any analysis command, offer to generate a PDF/HTML report.
|
|
269
|
+
|
|
270
|
+
### `/seo google report <type>`
|
|
271
|
+
|
|
272
|
+
Generate a professional PDF report with charts and analytics.
|
|
273
|
+
|
|
274
|
+
**Script:** `python scripts/google_report.py --type <type> --data <json> --domain <domain> --format pdf`
|
|
275
|
+
|
|
276
|
+
| Type | Input | Output |
|
|
277
|
+
|------|-------|--------|
|
|
278
|
+
| `cwv-audit` | PSI + CrUX + CrUX History data | Core Web Vitals audit with gauges, timelines, distributions |
|
|
279
|
+
| `gsc-performance` | GSC query data | Search Console report with query tables, quick wins |
|
|
280
|
+
| `indexation` | Batch inspection data | Indexation status with coverage donut chart |
|
|
281
|
+
| `full` | All data combined | Comprehensive Google SEO report (all sections) |
|
|
282
|
+
|
|
283
|
+
**Workflow:**
|
|
284
|
+
1. Run data collection commands (pagespeed, gsc, inspect-batch, etc.)
|
|
285
|
+
2. Save JSON output to file: `python scripts/pagespeed_check.py <url> --json > data.json`
|
|
286
|
+
3. Generate report: `python scripts/google_report.py --type cwv-audit --data data.json --domain <domain>`
|
|
287
|
+
|
|
288
|
+
**Convention:** After completing analysis, suggest: "Generate a report? Use `/seo google report <type>`"
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Rate Limits
|
|
293
|
+
|
|
294
|
+
| API | Per-Minute | Per-Day | Auth |
|
|
295
|
+
|-----|-----------|---------|------|
|
|
296
|
+
| PSI v5 | 240 QPM | 25,000 QPD | API Key |
|
|
297
|
+
| CrUX + History | 150 QPM (shared) | Unlimited | API Key |
|
|
298
|
+
| GSC Search Analytics | 1,200 QPM/site | 30M QPD | Service Account |
|
|
299
|
+
| GSC URL Inspection | 600 QPM | 2,000 QPD/site | Service Account |
|
|
300
|
+
| Indexing API | 380 RPM | 200 publish/day | Service Account |
|
|
301
|
+
| GA4 Data API | 10 concurrent | ~25K tokens/day | Service Account |
|
|
302
|
+
|
|
303
|
+
## Cross-Skill Integration
|
|
304
|
+
|
|
305
|
+
- **seo-audit**: Activates `seo-google` agent for live CWV + indexation data (conditional)
|
|
306
|
+
- **seo-technical**: Uses pagespeed_check.py for real CWV field data
|
|
307
|
+
- **seo-performance**: CrUX field data supplements Lighthouse lab data
|
|
308
|
+
- **seo-sitemap**: GSC sitemap status shows real crawl/index coverage
|
|
309
|
+
- **seo-content**: GSC query data informs keyword targeting
|
|
310
|
+
- **seo-geo**: GSC search appearance data includes AI Overview references
|
|
311
|
+
|
|
312
|
+
## Output Format
|
|
313
|
+
|
|
314
|
+
- CWV metrics: traffic-light rating (Good / Needs Improvement / Poor)
|
|
315
|
+
- Performance reports: tables with sortable columns
|
|
316
|
+
- Always include data freshness note
|
|
317
|
+
- Save reports as `GOOGLE-API-REPORT-{domain}.md`
|
|
318
|
+
- Use templates from `assets/templates/` for structured output
|
|
319
|
+
|
|
320
|
+
## Technical Notes
|
|
321
|
+
|
|
322
|
+
- INP replaced FID on March 12, 2024. Never reference FID.
|
|
323
|
+
- CLS values from CrUX are string-encoded (e.g., "0.05"). Scripts handle parsing.
|
|
324
|
+
- CrUX 404 = insufficient traffic, not an auth error.
|
|
325
|
+
- Search Analytics data has 2-3 day lag.
|
|
326
|
+
- `round_trip_time` replaced `effectiveConnectionType` in CrUX (Feb 2025).
|
|
327
|
+
- Custom Search JSON API is closed to new customers (2025).
|
|
328
|
+
|
|
329
|
+
## Error Handling
|
|
330
|
+
|
|
331
|
+
| Scenario | Action |
|
|
332
|
+
|----------|--------|
|
|
333
|
+
| No credentials configured | Run `/seo google setup`. List Tier 0 commands that work with just an API key. |
|
|
334
|
+
| Service account lacks GSC access | Report error. Instruct: add `client_email` to GSC > Settings > Users > Add. |
|
|
335
|
+
| CrUX data unavailable (404) | Report insufficient Chrome traffic. Suggest PSI lab data as fallback. |
|
|
336
|
+
| GA4 property not found | Report error. Show how to find property ID in GA4 Admin > Property Details. |
|
|
337
|
+
| Indexing API quota exceeded | Report 200/day limit. Suggest prioritizing most important URLs. |
|
|
338
|
+
| Rate limit (429) | Wait and retry with exponential backoff. Report which API hit the limit. |
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
## Specialist Role Instructions
|
|
342
|
+
|
|
343
|
+
When operating as a specialist during audits:
|
|
344
|
+
|
|
345
|
+
You are a Google SEO API data analyst. When delegated tasks during an SEO audit:
|
|
346
|
+
|
|
347
|
+
1. Check credentials: `python scripts/google_auth.py --check --json`
|
|
348
|
+
2. Determine tier (0 = API key, 1 = + service account, 2 = + GA4)
|
|
349
|
+
3. Execute tier-appropriate analysis
|
|
350
|
+
4. Format output to match seo-kit conventions
|
|
351
|
+
|
|
352
|
+
## Tier-Based Workflow
|
|
353
|
+
|
|
354
|
+
### Tier 0 (API Key Only)
|
|
355
|
+
- Run PSI + CrUX on homepage: `python scripts/pagespeed_check.py <url> --json`
|
|
356
|
+
- Run CrUX History for origin: `python scripts/crux_history.py <origin> --origin --json`
|
|
357
|
+
- Report CWV field data with traffic-light ratings
|
|
358
|
+
|
|
359
|
+
### Tier 1 (+ Service Account)
|
|
360
|
+
- All Tier 0 checks
|
|
361
|
+
- GSC top queries/pages (28 days): `python scripts/gsc_query.py --property <prop> --json`
|
|
362
|
+
- URL Inspection on homepage + key pages: `python scripts/gsc_inspect.py <url> --json`
|
|
363
|
+
- GSC sitemap status: `python scripts/gsc_query.py sitemaps --property <prop> --json`
|
|
364
|
+
|
|
365
|
+
### Tier 2 (Full)
|
|
366
|
+
- All Tier 1 checks
|
|
367
|
+
- GA4 organic traffic (28 days): `python scripts/ga4_report.py --property <id> --json`
|
|
368
|
+
- Top organic landing pages: `python scripts/ga4_report.py --property <id> --report top-pages --json`
|
|
369
|
+
|
|
370
|
+
## Core Web Vitals Thresholds
|
|
371
|
+
|
|
372
|
+
| Metric | Good | Needs Improvement | Poor |
|
|
373
|
+
|--------|------|-------------------|------|
|
|
374
|
+
| LCP | ≤ 2,500ms | 2,500-4,000ms | > 4,000ms |
|
|
375
|
+
| INP | ≤ 200ms | 200-500ms | > 500ms |
|
|
376
|
+
| CLS | ≤ 0.1 | 0.1-0.25 | > 0.25 |
|
|
377
|
+
|
|
378
|
+
INP replaced FID on March 12, 2024. Never reference FID.
|
|
379
|
+
|
|
380
|
+
## Output Format
|
|
381
|
+
|
|
382
|
+
Match existing seo-kit patterns:
|
|
383
|
+
- Tables for metrics with traffic-light ratings
|
|
384
|
+
- Scores as XX/100
|
|
385
|
+
- Priority: Critical > High > Medium > Low
|
|
386
|
+
- Note data source as "Google API (field data)" to distinguish from static analysis
|
|
387
|
+
- Include data freshness notes (CrUX: 28-day rolling, GSC: 2-3 day lag, GA4: 1 day lag)
|
|
388
|
+
|
|
389
|
+
## Report Generation (MANDATORY)
|
|
390
|
+
|
|
391
|
+
After completing data collection at any tier, ALWAYS offer to generate a PDF report.
|
|
392
|
+
The report uses the enterprise template: white cover, navy accents, Times New Roman, charts at 85% width, Google logo on title page. No page-break-inside: avoid (causes white gaps).
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
python scripts/google_report.py --type full --data data.json --domain DOMAIN --format pdf --json
|
|
396
|
+
```
|
|
397
|
+
Report types: `cwv-audit`, `gsc-performance`, `indexation`, `full`.
|
|
398
|
+
Before presenting: verify `"review": {"status": "PASS"}` in the JSON output.
|
|
399
|
+
|
|
400
|
+
## Error Handling
|
|
401
|
+
|
|
402
|
+
- If credentials are missing, report which tier is available and what can still be checked
|
|
403
|
+
- If CrUX returns 404, note insufficient Chrome traffic and fall back to PSI lab data
|
|
404
|
+
- If GSC returns 403, report the service account email and instruct on adding permissions
|
|
405
|
+
- Never fail silently -- always report what succeeded and what failed
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Core Web Vitals Audit
|
|
2
|
+
|
|
3
|
+
**URL/Origin:** {target}
|
|
4
|
+
**Strategy:** {strategy}
|
|
5
|
+
|
|
6
|
+
## CrUX Field Data (28-day rolling average)
|
|
7
|
+
|
|
8
|
+
Real Chrome user experience data from the Chrome UX Report.
|
|
9
|
+
|
|
10
|
+
| Metric | p75 Value | Rating | Good Threshold | Distribution |
|
|
11
|
+
|--------|-----------|--------|----------------|-------------|
|
|
12
|
+
| LCP | {lcp_value} | {lcp_rating} | ≤ 2,500ms | Good: {lcp_good}% / NI: {lcp_ni}% / Poor: {lcp_poor}% |
|
|
13
|
+
| INP | {inp_value} | {inp_rating} | ≤ 200ms | Good: {inp_good}% / NI: {inp_ni}% / Poor: {inp_poor}% |
|
|
14
|
+
| CLS | {cls_value} | {cls_rating} | ≤ 0.1 | Good: {cls_good}% / NI: {cls_ni}% / Poor: {cls_poor}% |
|
|
15
|
+
| FCP | {fcp_value} | {fcp_rating} | ≤ 1,800ms | Good: {fcp_good}% / NI: {fcp_ni}% / Poor: {fcp_poor}% |
|
|
16
|
+
| TTFB | {ttfb_value} | {ttfb_rating} | ≤ 800ms | Good: {ttfb_good}% / NI: {ttfb_ni}% / Poor: {ttfb_poor}% |
|
|
17
|
+
|
|
18
|
+
**Collection Period:** {collection_start} to {collection_end}
|
|
19
|
+
|
|
20
|
+
## Lighthouse Lab Scores
|
|
21
|
+
|
|
22
|
+
| Category | Score |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Performance | {perf_score}/100 |
|
|
25
|
+
| Accessibility | {a11y_score}/100 |
|
|
26
|
+
| Best Practices | {bp_score}/100 |
|
|
27
|
+
| SEO | {seo_score}/100 |
|
|
28
|
+
|
|
29
|
+
## CrUX History Trends (25-week)
|
|
30
|
+
|
|
31
|
+
| Metric | Direction | Change | Earliest → Latest |
|
|
32
|
+
|--------|-----------|--------|-------------------|
|
|
33
|
+
{trends_table}
|
|
34
|
+
|
|
35
|
+
## Top Opportunities
|
|
36
|
+
|
|
37
|
+
| Opportunity | Estimated Savings |
|
|
38
|
+
|-------------|-------------------|
|
|
39
|
+
{opportunities_table}
|
|
40
|
+
|
|
41
|
+
## Recommendations
|
|
42
|
+
|
|
43
|
+
{recommendations}
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
*CrUX data updated daily ~04:00 UTC. 28-day rolling average.*
|
|
47
|
+
*INP replaced FID as the responsiveness Core Web Vital on March 12, 2024.*
|
|
48
|
+
*Generated {timestamp}.*
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Google Search Console Performance Report
|
|
2
|
+
|
|
3
|
+
**Property:** {property}
|
|
4
|
+
**Date Range:** {start_date} — {end_date}
|
|
5
|
+
**Search Type:** {search_type}
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
| Metric | Value |
|
|
10
|
+
|--------|-------|
|
|
11
|
+
| Total Clicks | {total_clicks} |
|
|
12
|
+
| Total Impressions | {total_impressions} |
|
|
13
|
+
| Average CTR | {avg_ctr}% |
|
|
14
|
+
| Average Position | {avg_position} |
|
|
15
|
+
|
|
16
|
+
## Top Queries
|
|
17
|
+
|
|
18
|
+
| # | Query | Clicks | Impressions | CTR | Position |
|
|
19
|
+
|---|-------|--------|-------------|-----|----------|
|
|
20
|
+
{queries_table}
|
|
21
|
+
|
|
22
|
+
## Top Pages
|
|
23
|
+
|
|
24
|
+
| # | Page | Clicks | Impressions | CTR | Position |
|
|
25
|
+
|---|------|--------|-------------|-----|----------|
|
|
26
|
+
{pages_table}
|
|
27
|
+
|
|
28
|
+
## Quick Wins (Position 4-10, High Impressions)
|
|
29
|
+
|
|
30
|
+
These queries rank on page 1 but below position 3. A small ranking improvement could yield significant traffic gains.
|
|
31
|
+
|
|
32
|
+
| Query | Position | Impressions | Clicks | CTR | Opportunity |
|
|
33
|
+
|-------|----------|-------------|--------|-----|-------------|
|
|
34
|
+
{quick_wins_table}
|
|
35
|
+
|
|
36
|
+
## Device Breakdown
|
|
37
|
+
|
|
38
|
+
| Device | Clicks | Impressions | CTR | Position |
|
|
39
|
+
|--------|--------|-------------|-----|----------|
|
|
40
|
+
{device_table}
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
*Data freshness: Search Analytics has a 2-3 day lag. Data available for ~16 months.*
|
|
44
|
+
*Generated {timestamp} via Google Search Console API.*
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# URL Indexation Status Report
|
|
2
|
+
|
|
3
|
+
**Property:** {property}
|
|
4
|
+
**URLs Inspected:** {total_urls}
|
|
5
|
+
|
|
6
|
+
## Summary
|
|
7
|
+
|
|
8
|
+
| Status | Count | Percentage |
|
|
9
|
+
|--------|-------|-----------|
|
|
10
|
+
| Indexed (PASS) | {pass_count} | {pass_pct}% |
|
|
11
|
+
| Not Indexed (FAIL) | {fail_count} | {fail_pct}% |
|
|
12
|
+
| Neutral | {neutral_count} | {neutral_pct}% |
|
|
13
|
+
| Errors | {error_count} | {error_pct}% |
|
|
14
|
+
|
|
15
|
+
## Detailed Results
|
|
16
|
+
|
|
17
|
+
| URL | Verdict | Coverage State | Fetch State | Google Canonical | Last Crawl |
|
|
18
|
+
|-----|---------|---------------|-------------|-----------------|------------|
|
|
19
|
+
{results_table}
|
|
20
|
+
|
|
21
|
+
## Canonical Mismatches
|
|
22
|
+
|
|
23
|
+
URLs where Google selected a different canonical than declared:
|
|
24
|
+
|
|
25
|
+
| URL | User Canonical | Google Canonical |
|
|
26
|
+
|-----|---------------|-----------------|
|
|
27
|
+
{canonical_mismatches_table}
|
|
28
|
+
|
|
29
|
+
## Common Issues
|
|
30
|
+
|
|
31
|
+
| Issue | Count | Priority | Action |
|
|
32
|
+
|-------|-------|----------|--------|
|
|
33
|
+
{issues_table}
|
|
34
|
+
|
|
35
|
+
## Rich Results Detected
|
|
36
|
+
|
|
37
|
+
| URL | Rich Result Type | Status |
|
|
38
|
+
|-----|-----------------|--------|
|
|
39
|
+
{rich_results_table}
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
*URL Inspection API: 2,000 inspections/day per site, 600/min.*
|
|
43
|
+
*Generated {timestamp} via Google Search Console URL Inspection API.*
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Google API Authentication Setup
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Three credential types serve different APIs:
|
|
6
|
+
|
|
7
|
+
| Type | Used By | Cost |
|
|
8
|
+
|------|---------|------|
|
|
9
|
+
| **API Key** | PageSpeed Insights, CrUX, CrUX History, Knowledge Graph | Free |
|
|
10
|
+
| **Service Account** | Search Console, Indexing API, GA4 | Free |
|
|
11
|
+
| **Both** | Full seo-google skill | Free |
|
|
12
|
+
|
|
13
|
+
## Step 1: Create a Google Cloud Project
|
|
14
|
+
|
|
15
|
+
1. Go to [console.cloud.google.com](https://console.cloud.google.com)
|
|
16
|
+
2. Click **Select a project** > **New Project**
|
|
17
|
+
3. Name it (e.g., "Claude SEO") and note the project ID
|
|
18
|
+
4. Select the project after creation
|
|
19
|
+
|
|
20
|
+
## Step 2: Enable APIs
|
|
21
|
+
|
|
22
|
+
Navigate to **APIs & Services > Library** and enable:
|
|
23
|
+
|
|
24
|
+
| API | Required For |
|
|
25
|
+
|-----|-------------|
|
|
26
|
+
| Google Search Console API | GSC Search Analytics, URL Inspection, Sitemaps |
|
|
27
|
+
| PageSpeed Insights API | PSI Lighthouse lab data |
|
|
28
|
+
| Chrome UX Report API | CrUX field data + History |
|
|
29
|
+
| Web Search Indexing API | Indexing API v3 |
|
|
30
|
+
| Google Analytics Data API | GA4 organic traffic |
|
|
31
|
+
| Knowledge Graph Search API | Entity verification (optional) |
|
|
32
|
+
|
|
33
|
+
## Step 3: Create an API Key
|
|
34
|
+
|
|
35
|
+
1. **APIs & Services > Credentials > Create Credentials > API key**
|
|
36
|
+
2. Click **Restrict key**:
|
|
37
|
+
- Under **API restrictions**, select: PageSpeed Insights API, Chrome UX Report API, Knowledge Graph Search API
|
|
38
|
+
3. Copy the key (starts with `AIzaSy...`)
|
|
39
|
+
|
|
40
|
+
## Step 4: Create a Service Account
|
|
41
|
+
|
|
42
|
+
1. **IAM & Admin > Service Accounts > Create Service Account**
|
|
43
|
+
2. Name: `claude-seo` (or similar)
|
|
44
|
+
3. Skip optional permissions steps
|
|
45
|
+
4. Click on the created service account > **Keys > Add Key > Create new key > JSON**
|
|
46
|
+
5. Download the JSON file and store it securely (e.g., `~/.config/claude-seo/service_account.json`)
|
|
47
|
+
|
|
48
|
+
The JSON file looks like:
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"type": "service_account",
|
|
52
|
+
"project_id": "your-project-id",
|
|
53
|
+
"private_key_id": "...",
|
|
54
|
+
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
|
|
55
|
+
"client_email": "claude-seo@your-project.iam.gserviceaccount.com",
|
|
56
|
+
"client_id": "...",
|
|
57
|
+
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
|
58
|
+
"token_uri": "https://oauth2.googleapis.com/token"
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The `client_email` field is what you add to GSC and GA4.
|
|
63
|
+
|
|
64
|
+
## Step 5: Grant Search Console Access
|
|
65
|
+
|
|
66
|
+
1. Go to [Google Search Console](https://search.google.com/search-console)
|
|
67
|
+
2. Select your property
|
|
68
|
+
3. **Settings > Users and permissions > Add user**
|
|
69
|
+
4. Paste the service account `client_email`
|
|
70
|
+
5. Set permission level:
|
|
71
|
+
- **Full** for read-only (Search Analytics, URL Inspection, Sitemaps)
|
|
72
|
+
- **Owner** if you also need the Indexing API
|
|
73
|
+
|
|
74
|
+
## Step 6: Grant GA4 Access
|
|
75
|
+
|
|
76
|
+
1. Go to [Google Analytics](https://analytics.google.com)
|
|
77
|
+
2. **Admin > Property Access Management > Add users** (the + icon)
|
|
78
|
+
3. Paste the service account `client_email`
|
|
79
|
+
4. Set role: **Viewer** (minimum for read-only reporting)
|
|
80
|
+
5. Note the numeric property ID from **Admin > Property Details** (e.g., `123456789`)
|
|
81
|
+
|
|
82
|
+
## Step 7: Create Config File
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
mkdir -p ~/.config/claude-seo
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Save to `~/.config/claude-seo/google-api.json`:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"service_account_path": "~/.config/claude-seo/service_account.json",
|
|
93
|
+
"api_key": "AIzaSy...",
|
|
94
|
+
"default_property": "sc-domain:example.com",
|
|
95
|
+
"ga4_property_id": "properties/123456789"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Property URL Formats
|
|
100
|
+
|
|
101
|
+
| Format | Example | When to Use |
|
|
102
|
+
|--------|---------|-------------|
|
|
103
|
+
| Domain property | `sc-domain:example.com` | Covers all URLs on the domain (recommended) |
|
|
104
|
+
| URL-prefix property | `https://example.com/` | Covers only that specific prefix |
|
|
105
|
+
|
|
106
|
+
## Step 8: Verify Setup
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
python scripts/google_auth.py --check
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Expected output at Tier 2 (full):
|
|
113
|
+
```
|
|
114
|
+
Credential Tier: 2 -- Full (API key + Service Account + GA4)
|
|
115
|
+
|
|
116
|
+
[OK] PageSpeed Insights v5
|
|
117
|
+
[OK] Chrome UX Report (CrUX) API
|
|
118
|
+
[OK] CrUX History API
|
|
119
|
+
[OK] Google Search Console API
|
|
120
|
+
Service account: claude-seo@your-project.iam.gserviceaccount.com
|
|
121
|
+
[OK] Google Indexing API v3
|
|
122
|
+
[OK] GA4 Data API v1beta
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Environment Variable Alternatives
|
|
126
|
+
|
|
127
|
+
Instead of (or in addition to) the config file:
|
|
128
|
+
|
|
129
|
+
| Variable | Purpose |
|
|
130
|
+
|----------|---------|
|
|
131
|
+
| `GOOGLE_API_KEY` | API key for PSI/CrUX |
|
|
132
|
+
| `GOOGLE_APPLICATION_CREDENTIALS` | Path to service account JSON |
|
|
133
|
+
| `GA4_PROPERTY_ID` | GA4 property (e.g., `properties/123456789`) |
|
|
134
|
+
| `GSC_PROPERTY` | Default GSC property (e.g., `sc-domain:example.com`) |
|
|
135
|
+
|
|
136
|
+
## OAuth Scopes Used
|
|
137
|
+
|
|
138
|
+
| Scope | APIs |
|
|
139
|
+
|-------|------|
|
|
140
|
+
| `https://www.googleapis.com/auth/webmasters.readonly` | GSC (read) |
|
|
141
|
+
| `https://www.googleapis.com/auth/webmasters` | GSC (read/write, needed for sitemap submission) |
|
|
142
|
+
| `https://www.googleapis.com/auth/indexing` | Indexing API |
|
|
143
|
+
| `https://www.googleapis.com/auth/analytics.readonly` | GA4 (read) |
|
|
144
|
+
|
|
145
|
+
## Troubleshooting
|
|
146
|
+
|
|
147
|
+
| Error | Fix |
|
|
148
|
+
|-------|-----|
|
|
149
|
+
| `403 Forbidden` on GSC | Service account email not added to GSC property, or wrong permission level |
|
|
150
|
+
| `403 Forbidden` on GA4 | Service account email not added to GA4 property as Viewer |
|
|
151
|
+
| `404 Not Found` on GSC | Wrong property URL format. Use `sc-domain:` or include trailing slash for URL-prefix |
|
|
152
|
+
| `404 Not Found` on CrUX | Site has insufficient Chrome traffic. Not a credentials issue. |
|
|
153
|
+
| `429 Rate Limit` | Wait and retry. See rate-limits-quotas.md for per-API limits |
|
|
154
|
+
| `API not enabled` | Enable the specific API in GCP Console > APIs & Services > Library |
|