gsc-cli 2.2.0 → 2.2.2
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.
- checksums.yaml +4 -4
- data/AUTH.md +4 -1
- data/README.md +184 -140
- data/bin/gsc +9 -9
- data/dist/gsc +9 -9
- data/lib/gsc/cli/keywords.rb +7 -7
- data/lib/gsc/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ab180fed2f9ef6a48d37dd386354f989bc28754efed1ab80d266376663508758
|
|
4
|
+
data.tar.gz: e6da57a476597d37e570d8fabd2853fbbec7b06d26be4fcf1c2fb6dee3de6627
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 44f6b7a4bb0a9234cc55cf106454bca07bafa45f6137cbb34a159ca4641f7b2e2733313480730f65168444332b8b52d617051f98582c408e53373a12dd81323b
|
|
7
|
+
data.tar.gz: bf58ea4760ab212945846dabcddbb75e65e3c3a482c86d6ec34b2ecf4480b89a3aaa16b0810c5b84b61d31624ed1c6990aaa44503fc4fbac19551d0d5e52908c
|
data/AUTH.md
CHANGED
|
@@ -152,9 +152,12 @@ gsc import clip
|
|
|
152
152
|
|
|
153
153
|
### Option B: Direct API Integration
|
|
154
154
|
If you prefer automated terminal lookups without using the browser extension:
|
|
155
|
-
1. Get an API key from [Keywords Everywhere](https://keywordseverywhere.com
|
|
155
|
+
1. Get an API key from [Keywords Everywhere](https://keywordseverywhere.com/?fpr=us25sg) *(referral link that supports gsc-cli development)* ($1.25 one-time for 100,000 credits).
|
|
156
156
|
2. Save your key:
|
|
157
157
|
```bash
|
|
158
|
+
gsc connect ke <YOUR_API_KEY>
|
|
159
|
+
|
|
160
|
+
# Or manually:
|
|
158
161
|
gsc config set keywords_everywhere_api_key your_ke_api_key_here
|
|
159
162
|
|
|
160
163
|
# Or pass as environment variable
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# 🚀
|
|
1
|
+
# 🚀 GSC-CLI: The Zero-Gem Google Search Console & Technical SEO Engine in Pure Ruby
|
|
2
2
|
|
|
3
3
|
> **Zero Gem Dependencies.** Pure Ruby standard library (`Net::HTTP`, `OpenSSL`, `JSON`).
|
|
4
|
-
> **
|
|
4
|
+
> **Sub-millisecond Google Search Console inspection, instant Googlebot indexing, and AI Overview detection in pure standard library.** Extract first-party Google rankings, automate technical SEO audits, and generate server-side remediation rules in **< 50 milliseconds** with zero external dependencies.
|
|
5
5
|
|
|
6
6
|
[](https://www.ruby-lang.org)
|
|
7
7
|
[](https://rubygems.org/gems/gsc-cli)
|
|
@@ -23,37 +23,44 @@
|
|
|
23
23
|
<sub>Explore other software built by our team:</sub><br>
|
|
24
24
|
⚡ <a href="https://superspeedapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli"><b>Superspeed</b></a> — Built for Shopify speed, CRO & revenue leak intelligence app (5.0 ★)<br>
|
|
25
25
|
🛒 <a href="https://supercartapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli"><b>Supercart</b></a> — Built for Shopify slide cart drawer, in-house shipping protection & upsells (5.0 ★)<br>
|
|
26
|
-
📦 <a href="https://packinglog.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli"><b>PackingLog</b></a> —
|
|
26
|
+
📦 <a href="https://packinglog.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli"><b>PackingLog</b></a> — Our newly launched physical moving inventory and QR-code tracking SaaS — where waiting weeks for Googlebot to discover new landing pages wasn't an option.
|
|
27
27
|
</p>
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
31
|
-
## ⚡
|
|
31
|
+
## ⚡ Why We Built This: Escaping the 40-Gem Tax
|
|
32
32
|
|
|
33
|
-
Every software
|
|
33
|
+
Every software engineer, technical SEO, and developer-operator managing search presence faces the exact same architectural frustrations:
|
|
34
34
|
|
|
35
|
-
1. **
|
|
36
|
-
2. **
|
|
37
|
-
3. **Google Search Console's Web UI
|
|
38
|
-
4. **Google AI Overviews (AIO)
|
|
39
|
-
5. **AI Coding Agents Cannot Click Web Buttons**: Modern coding agents (Antigravity, Claude Code, Cursor, Cline)
|
|
35
|
+
1. **The 40-Gem Dependency Tax**: The official Google API Ruby gems (`google-apis-searchconsole_v1`, `google-apis-indexing_v3`, `googleauth`, `signet`, `faraday`) pull in **40+ transitive gem dependencies**. They add 3 to 5 seconds to cold-boot time, trigger Bundler version conflicts, inflate container image sizes, and introduce ongoing supply-chain vulnerability alerts.
|
|
36
|
+
2. **Paying $300 to $1,000+/Month for Sampled Guesswork**: Third-party SEO suites charge hundreds of dollars per month to scrape search results with external proxy farms and estimate traffic using sampled third-party panels. Meanwhile, **Google Search Console provides 100% first-party ground-truth data** for your domain directly from production search logs—completely free.
|
|
37
|
+
3. **Google Search Console's Web UI Does Not Scale**: Inspecting 50 URLs, isolating soft-404 indexation drops, or detecting cannibalization across multiple client properties requires hours of manual tab switching, filtering, and clicking.
|
|
38
|
+
4. **Google AI Overviews (AIO) Intercepting Search Clicks**: Zero-click searches continue to expand. If technical content is not structured for citation in Gemini and AI Overviews, organic visibility drops even when ranking on Page 1.
|
|
39
|
+
5. **AI Coding Agents Cannot Click Web Buttons**: Modern coding agents (Antigravity, Claude Code, Cursor, Cline) require deterministic, sub-50ms JSON over stdout to diagnose and fix search issues directly inside the local repository.
|
|
40
40
|
|
|
41
|
-
### The Origin
|
|
42
|
-
At **[ApollosWave](https://apolloswave.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**, we run multiple production software businesses—from Shopify revenue & speed intelligence (**[Superspeed](https://superspeedapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**) and e-commerce upsell apps (**[Supercart](https://supercartapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**) to physical moving inventory SaaS (**[PackingLog](https://packinglog.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**).
|
|
41
|
+
### 🛠️ Battle-Tested in Production (The Origin)
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
`gsc-cli` was not engineered in a vacuum or built as a synthetic demo.
|
|
45
44
|
|
|
46
|
-
|
|
45
|
+
At **[ApollosWave](https://apolloswave.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**, we operate multiple high-throughput production applications:
|
|
46
|
+
- **[Superspeed](https://superspeedapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**: Automated Core Web Vitals, INP, and speed intelligence for high-volume Shopify storefronts.
|
|
47
|
+
- **[Supercart](https://supercartapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**: High-converting slide cart and upsell infrastructure processing real-time e-commerce checkouts.
|
|
48
|
+
- **[PackingLog](https://packinglog.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**: Our newly launched physical moving inventory and QR-code tracking SaaS — where waiting weeks for Googlebot to discover new landing pages wasn't an option.
|
|
49
|
+
|
|
50
|
+
Managing Search Console indexing, sitemap trees, and SERP positions across these live codebases meant either pulling in 40+ bloated API gems, burning hours clicking in Google's web UI, or paying thousands every year for sampled proxy scrapers.
|
|
51
|
+
|
|
52
|
+
We built **`gsc-cli`** as our internal engine to automate Googlebot indexing and search diagnostics in **< 50 milliseconds** using pure standard-library Ruby.
|
|
53
|
+
|
|
54
|
+
We open-sourced it 100% free under the MIT License so every builder, engineering team, and operator can run first-party search automation with zero dependency bloat.
|
|
47
55
|
|
|
48
56
|
---
|
|
49
57
|
|
|
50
|
-
##
|
|
58
|
+
## 📐 Core Engineering Principles
|
|
51
59
|
|
|
52
|
-
1. **
|
|
53
|
-
2. **
|
|
54
|
-
3. **
|
|
55
|
-
4. **Zero-Trust Local Execution
|
|
56
|
-
5. **Actionable Remediation Over Passive Error Tables**: Traditional SEO auditing tools spit out 500 error rows but leave you stranded without actionable fixes. GSC-CLI diagnoses soft-404 traps and automatically synthesizes copy-paste redirect blocks for 14 server environments.
|
|
60
|
+
1. **First-Party Ground Truth Over Guesswork**: Third-party estimation suites rely on sampled clickstream models and external proxy scraping. Google Search Console stores the exact, 100% first-party click, impression, and position data directly from Google's search infrastructure—completely free.
|
|
61
|
+
2. **Zero-Dependency Purity (< 1ms Boot Time)**: Official Google API gems drag in 40+ dependency gems, slowing down boot times and creating dependency lock-in. GSC-CLI communicates directly with Google's bare-metal HTTP APIs using pure Ruby standard library (`Net::HTTP`, `OpenSSL`, `JSON`), executing in **< 1 millisecond**.
|
|
62
|
+
3. **Actionable Remediation Over Passive Error Dumps**: Most diagnostic tools dump hundreds of error rows into a table without solutions. `gsc-cli` pairs forensic diagnostics with automated remediation—such as generating copy-paste redirect blocks for 14 server environments (Nginx, Caddy, Cloudflare, Next.js, Vercel, etc.) for soft-404 traps.
|
|
63
|
+
4. **Zero-Trust Local Execution (No Telemetry, No External AI Calls)**: Developer tools should respect machine resources and codebase privacy. `gsc-cli` runs 100% locally, requires zero external LLM API keys, makes zero calls to third-party AI servers, collects zero telemetry, and never reads or transmits private repository files.
|
|
57
64
|
|
|
58
65
|
---
|
|
59
66
|
|
|
@@ -86,7 +93,7 @@ By implementing Google's JWT service account authentication in pure `OpenSSL` an
|
|
|
86
93
|
- 🩺 **Zero-Gem Cold-Start Doctor (`gsc doctor`)**: Verifies 100% standard library purity, measures sub-50ms execution speed, and validates credential security.
|
|
87
94
|
- 📈 **Real-Time Google Trends Engine (`gsc trends`)**: 5-year and 1-year search trajectory, velocity percentages, Unicode sparklines (` ▂▃▄▅▆▇█`), and regional demand breakdowns with zero authentication.
|
|
88
95
|
- 🎯 **Zero-Auth Keyword Planner (`gsc planner`)**: Instant seed expansion via Google Autocomplete with automated search intent classification (`Informational`, `Commercial`, `Transactional`).
|
|
89
|
-
- 💰 **Keywords Everywhere Ingestion (`gsc import clip` & `gsc ke`)**: Ingest free keyword tables directly from clipboard (zero credits required) or connect
|
|
96
|
+
- 💰 **Keywords Everywhere Ingestion (`gsc import clip` & `gsc ke`)**: Ingest free keyword tables directly from clipboard (zero credits required) or connect a [Keywords Everywhere API key](https://keywordseverywhere.com/?fpr=us25sg) *(referral link)* for automated terminal lookups.
|
|
90
97
|
- 🚀 **Instant Googlebot Re-Indexing (`gsc index`)**: Ping Google's Indexing API with `URL_UPDATED` or `URL_DELETED` for priority crawl queueing within seconds.
|
|
91
98
|
- ⚡ **Multi-Engine IndexNow Protocol (`gsc indexnow`)**: Instantly submit pages and sitemaps across Microsoft Bing, Yandex, Seznam, and Naver simultaneously.
|
|
92
99
|
- 🖥️ **Google SERP & Title Pixel Simulator (`gsc serp`)**: Simulate desktop (580px) and mobile (650px) Google SERP cards, calculate precise proportional pixel widths, and prevent truncation before publishing.
|
|
@@ -97,26 +104,24 @@ By implementing Google's JWT service account authentication in pure `OpenSSL` an
|
|
|
97
104
|
|
|
98
105
|
---
|
|
99
106
|
|
|
100
|
-
##
|
|
107
|
+
## ⚡ Architectural Comparison & Trade-Offs
|
|
101
108
|
|
|
102
|
-
|
|
|
109
|
+
| Traditional Stack (Official SDK / SaaS) | GSC-CLI Architecture |
|
|
103
110
|
| :--- | :--- |
|
|
104
|
-
| **Manual
|
|
111
|
+
| **Manual Web UI Bottleneck**: Clicking through 15 tabs in Google Search Console to inspect 50 URLs takes 45+ minutes. | **Instant 1-Command Batching**: `gsc inspect-sitemap sitemap.xml` inspects all URLs with automatic quota pacing in seconds. |
|
|
105
112
|
| **Sampled Third-Party Guesswork**: Paying $300–$1,000+/mo ($3,600–$12,000/yr) for external proxy scrapers that model keyword volumes. | **100% Google Ground Truth ($0)**: Raw impression, click, and position logs direct from Google Search Console. |
|
|
106
|
-
| **40-Gem Dependency
|
|
107
|
-
| **Multi-Client Credential Chaos**: Juggling loose JSON keys across
|
|
113
|
+
| **40-Gem Dependency Tax**: Bloating your `Gemfile` with Google SDK gems that add 3–5 seconds to cold boot. | **0 Gem Dependencies**: Pure Ruby standard library (`OpenSSL`, `Net::HTTP`, `JSON`) executing in **< 1 millisecond**. |
|
|
114
|
+
| **Multi-Client Credential Chaos**: Juggling loose JSON keys across folders and risking credential leaks. | **Agency Credential Vault (`gsc vault`)**: Local AES-256-GCM encrypted vault with instant domain switching (`gsc switch`). |
|
|
108
115
|
| **Passive Error Reporting**: Diagnostic tools tell you that you have 404s, but leave you to write the server rules. | **Active Automated Remediation**: `gsc soft-404 <url> --fix nginx` synthesizes instant, copy-paste server blocks for 14 stacks. |
|
|
109
116
|
| **Blind to AI Overviews**: Unaware that Google Gemini / AI Overviews are intercepting 40% of zero-click searches. | **Google AIO Hunter & Citation Simulator**: `gsc aio-hunter` identifies AI Overviews and extracts competitor citation recipes. |
|
|
110
117
|
| **Token-Guzzling JSON in AI Agents**: Feeding pretty-printed JSON into coding agents wastes 40% of your LLM context window. | **Ultra-Low Token Modes (`--compact`, `--ndjson`)**: Minified output saving **35–50% of tokens** for Claude Code, Cursor, and Antigravity. |
|
|
111
|
-
| **Untrusted Scripts
|
|
118
|
+
| **Untrusted Third-Party Scripts**: Running opaque scripts that scan your repository or send files to external servers. | **Zero-Trust Local Execution**: Completely isolated, deterministic UNIX tool. Never scans, reads, or transmits your private code. |
|
|
112
119
|
|
|
113
120
|
---
|
|
114
121
|
|
|
115
|
-
> ### ⭐
|
|
116
|
-
>
|
|
117
|
-
>
|
|
118
|
-
> Help fellow engineers and operators discover zero-dependency tooling:
|
|
119
|
-
> 👉 **[Drop a Star on GitHub](https://github.com/ApollosWave/gsc-cli)** — *even if you only use it for terminal sparklines, instant Googlebot indexing, or AI Overview detection.* It takes 2 seconds and directly fuels continuous open-source development!
|
|
122
|
+
> ### ⭐ Star the Repository
|
|
123
|
+
> If `gsc-cli` saved your team from 40 bloated gems or streamlined your search data pipeline:
|
|
124
|
+
> 👉 **[Star GSC CLI on GitHub](https://github.com/ApollosWave/gsc-cli)** to support zero-dependency open-source tooling.
|
|
120
125
|
|
|
121
126
|
---
|
|
122
127
|
|
|
@@ -186,86 +191,133 @@ gsc domains
|
|
|
186
191
|
|
|
187
192
|
## 🧠 Deep-Dive Feature Walkthroughs
|
|
188
193
|
|
|
189
|
-
### 1.
|
|
194
|
+
### 1. Core Search Performance: Top Queries, Pages & CTR (`gsc top-queries`, `gsc top-pages`, `gsc performance`)
|
|
190
195
|
|
|
191
196
|
#### The Problem
|
|
192
|
-
Google
|
|
197
|
+
Google Search Console's web UI is sluggish, hides low-volume long-tail queries behind pagination limits, and makes cross-referencing brand vs. non-brand queries painful. Exporting CSVs to spreadsheets burns 20+ minutes every time you want to check yesterday's organic clicks.
|
|
193
198
|
|
|
194
199
|
#### The Solution
|
|
195
|
-
`gsc
|
|
200
|
+
`gsc-cli` streams your exact Google Search Console ground-truth performance directly into your terminal in **under 50 milliseconds**. Filter by brand, segment devices, compare date ranges, and export clean JSON or CSV in one command:
|
|
196
201
|
|
|
197
202
|
```bash
|
|
198
|
-
#
|
|
199
|
-
gsc
|
|
203
|
+
# Top 20 search queries with impressions, clicks, CTR, and average SERP position
|
|
204
|
+
gsc top-queries --limit 20
|
|
205
|
+
|
|
206
|
+
# Filter brand vs. non-brand queries automatically
|
|
207
|
+
gsc top-queries --brand
|
|
208
|
+
gsc top-queries --non-brand
|
|
209
|
+
|
|
210
|
+
# Top indexed landing pages driving search traffic
|
|
211
|
+
gsc top-pages --limit 15
|
|
212
|
+
|
|
213
|
+
# Overall 30-day domain performance scorecard with device & country breakdown
|
|
214
|
+
gsc performance --days 30
|
|
200
215
|
|
|
201
|
-
#
|
|
202
|
-
gsc
|
|
216
|
+
# Retrieve 100% of all queries via automated API pagination (no 1,000-row web limit)
|
|
217
|
+
gsc top-queries --all --csv > all_search_queries.csv
|
|
203
218
|
```
|
|
204
219
|
|
|
205
220
|
---
|
|
206
221
|
|
|
207
|
-
### 2.
|
|
222
|
+
### 2. Tactical Striking Distance Playbook & Organic CTR Curve (`gsc strike` & `gsc ctr-curve`)
|
|
208
223
|
|
|
209
224
|
#### The Problem
|
|
210
|
-
|
|
225
|
+
Most SEO reports simply dump a list of keywords without telling you **what to write, where to link, or what the revenue payoff will be**. Page 2 keywords (Positions 4–20) generate 80% of your search impressions but only 5% of your clicks.
|
|
211
226
|
|
|
212
227
|
#### The Solution
|
|
213
|
-
|
|
214
|
-
-
|
|
215
|
-
- **Structural Heading Depth**: Clean H2/H3 question-and-answer hierarchy.
|
|
216
|
-
- **Entity Markup**: Schema.org JSON-LD definitions.
|
|
217
|
-
- **Citability Score (0–100)**: Clear breakdown with actionable optimization advice.
|
|
228
|
+
- **`gsc ctr-curve`**: Generates an empirical, non-linear CTR regression curve mapping your domain's real CTR by position against Google's global benchmarks, simulating the exact click gain of advancing to Top 3.
|
|
229
|
+
- **`gsc strike`**: Automatically synthesizes a tactical Page 2 attack plan with **3 SERP-safe hook titles (< 560px)**, heading recipes, and targeted internal link anchor suggestions:
|
|
218
230
|
|
|
219
231
|
```bash
|
|
220
|
-
|
|
232
|
+
# Simulate organic CTR curve and click upside for Page 2 rankings
|
|
233
|
+
gsc ctr-curve --days 30 --target-pos 3
|
|
234
|
+
|
|
235
|
+
# Generate tactical Page 2 striking distance playbook
|
|
236
|
+
gsc strike --limit 10
|
|
237
|
+
|
|
238
|
+
# Surface quick-win CTR underperformers (Top 10 ranking but low click-through)
|
|
239
|
+
gsc underperformers --min-imp 50
|
|
240
|
+
|
|
241
|
+
# Export playbook directly to CSV for copywriters & content teams
|
|
242
|
+
gsc strike --limit 20 --csv docs/seo/striking_playbook.csv
|
|
221
243
|
```
|
|
222
244
|
|
|
223
245
|
---
|
|
224
246
|
|
|
225
|
-
### 3.
|
|
247
|
+
### 3. Instant Googlebot Priority Indexing & Live URL Inspection (`gsc index`, `gsc inspect`, `gsc indexnow`)
|
|
226
248
|
|
|
227
249
|
#### The Problem
|
|
228
|
-
|
|
250
|
+
Waiting days or weeks for Googlebot to discover new landing pages or updated documentation kills organic momentum. Meanwhile, checking if Google has indexed a URL or flagged a canonical error requires tedious manual clicking inside Search Console's URL Inspection tool.
|
|
229
251
|
|
|
230
252
|
#### The Solution
|
|
231
|
-
`gsc
|
|
253
|
+
`gsc-cli` communicates directly with Google's Indexing API and live URL Inspection API to check status and force priority crawling in seconds:
|
|
232
254
|
|
|
233
255
|
```bash
|
|
234
|
-
#
|
|
235
|
-
gsc
|
|
256
|
+
# Query live Google indexing verdict, assigned canonical, and crawl timestamp
|
|
257
|
+
gsc inspect https://example.com/blog/core-web-vitals
|
|
236
258
|
|
|
237
|
-
#
|
|
238
|
-
gsc
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
gsc
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
gsc
|
|
245
|
-
gsc soft-404 https://example.com/broken-page --fix webflow
|
|
246
|
-
gsc soft-404 https://example.com/broken-page --fix shopify
|
|
247
|
-
gsc soft-404 https://example.com/broken-page --fix nextjs
|
|
248
|
-
gsc soft-404 https://example.com/broken-page --fix nginx
|
|
249
|
-
gsc soft-404 https://example.com/broken-page --fix all
|
|
259
|
+
# Ping Googlebot to prioritize crawling a newly published or updated URL
|
|
260
|
+
gsc index https://example.com/blog/core-web-vitals
|
|
261
|
+
|
|
262
|
+
# Batch inspect an entire XML sitemap with automatic quota pacing
|
|
263
|
+
gsc inspect-sitemap https://example.com/sitemap.xml
|
|
264
|
+
|
|
265
|
+
# Multi-Engine IndexNow: Instantly notify Bing, Yandex, Seznam, and Naver simultaneously
|
|
266
|
+
gsc indexnow https://example.com/blog/core-web-vitals
|
|
250
267
|
```
|
|
251
268
|
|
|
252
269
|
---
|
|
253
270
|
|
|
254
|
-
### 4.
|
|
271
|
+
### 4. Cannibalization, Traffic Decay & Zombie Page Detection (`gsc cannibalization`, `gsc decay`, `gsc zombies`)
|
|
255
272
|
|
|
256
273
|
#### The Problem
|
|
257
|
-
|
|
274
|
+
Internal URLs competing for the same search intent (keyword cannibalization) split page equity, causing Google to oscillate rankings between pages. Meanwhile, stealth traffic decay and dead zero-click URLs quietly drain your Google crawl budget.
|
|
258
275
|
|
|
259
276
|
#### The Solution
|
|
260
|
-
`gsc
|
|
277
|
+
`gsc-cli` diagnoses algorithmic cannibalization conflicts and period-over-period decay before traffic crashes:
|
|
261
278
|
|
|
262
279
|
```bash
|
|
263
|
-
|
|
280
|
+
# Detect internal URLs fighting for the exact same queries
|
|
281
|
+
gsc cannibalization
|
|
282
|
+
|
|
283
|
+
# Period-over-period decay detection (28-day comparison: decaying vs surging queries)
|
|
284
|
+
gsc decay --compare 28
|
|
285
|
+
|
|
286
|
+
# Scan XML sitemap for 90-day zero-impression zombie pages draining crawl budget
|
|
287
|
+
gsc zombies https://example.com/sitemap.xml --purge-map
|
|
264
288
|
```
|
|
265
289
|
|
|
266
290
|
---
|
|
267
291
|
|
|
268
|
-
### 5.
|
|
292
|
+
### 5. Zero-Cost Clipboard Keyword Ingestion & Demand Trends (`gsc import clip`, `gsc trends`, `gsc planner`)
|
|
293
|
+
|
|
294
|
+
#### The Problem
|
|
295
|
+
Keyword research tools either lock data behind expensive API subscriptions or leave valuable volume data trapped in disconnected browser extensions.
|
|
296
|
+
|
|
297
|
+
#### The Solution
|
|
298
|
+
`gsc-cli` provides zero-cost clipboard ingestion and real-time demand tracking with **zero API keys required**:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# 1. Copy any keyword table from Keywords Everywhere or Google Ads in your browser (Cmd+C)
|
|
302
|
+
# 2. Run one command to parse volumes, sparklines, and cross-reference live GSC rankings:
|
|
303
|
+
gsc import clip
|
|
304
|
+
|
|
305
|
+
# Real-time Google Trends 5y/1y search trajectory and velocity percentage (zero-auth)
|
|
306
|
+
gsc trends "technical seo audit" --geo US --time 12m
|
|
307
|
+
|
|
308
|
+
# Google Autocomplete intent expander (Informational, Commercial, Transactional)
|
|
309
|
+
gsc planner "nextjs seo"
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
### 6. Detailed Off-Page + On-Page SEO Merger & Site Audit (`gsc page` & `gsc site-audit`)
|
|
315
|
+
|
|
316
|
+
#### The Problem
|
|
317
|
+
On-page SEO checkers (titles, headings, meta tags) live in browser extensions, completely disconnected from your real Google Search Console performance data.
|
|
318
|
+
|
|
319
|
+
#### The Solution
|
|
320
|
+
`gsc page` unites on-page DOM inspection with 90-day GSC search queries, clicks, and rankings in a single terminal view:
|
|
269
321
|
|
|
270
322
|
```bash
|
|
271
323
|
# Audit any URL combining DOM inspection with GSC 90-day search performance
|
|
@@ -274,41 +326,58 @@ gsc page https://example.com/
|
|
|
274
326
|
# Deep internal link verification: tests HTTP status codes (200, 404, 500)
|
|
275
327
|
gsc page https://example.com/ --check-links
|
|
276
328
|
|
|
277
|
-
# Crawl entire XML sitemaps to
|
|
329
|
+
# Crawl entire XML sitemaps to audit dead links, missing alts, and heading hierarchy
|
|
278
330
|
gsc site-audit https://example.com/sitemap.xml --report docs/seo/site_audit_issues.md
|
|
279
331
|
```
|
|
280
332
|
|
|
281
333
|
---
|
|
282
334
|
|
|
283
|
-
###
|
|
335
|
+
### 7. Google AI Overview (AIO) Opportunity Hunter & Citation Simulator (`gsc aio-hunter` & `gsc cite-sim`)
|
|
284
336
|
|
|
285
|
-
|
|
337
|
+
#### The Problem
|
|
338
|
+
Google AI Overviews (Gemini in search results) intercept high-intent queries before users ever reach blue links. If an AI Overview appears for your core keywords, your organic CTR can crater unless your site is cited inside the AI answer box.
|
|
286
339
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
340
|
+
#### The Solution
|
|
341
|
+
`gsc aio-hunter` scans live SERPs for AI Overviews, extracts cited sources, and measures your citation readiness:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Hunt AI Overview presence and extract cited competitor sources
|
|
345
|
+
gsc aio-hunter "best technical seo audit tools"
|
|
346
|
+
|
|
347
|
+
# Test how likely LLMs (Gemini, ChatGPT, Perplexity) are to cite your URL
|
|
348
|
+
gsc cite-sim https://example.com/guides/core-web-vitals
|
|
349
|
+
|
|
350
|
+
# Synthesize 40–60 word high-density direct answers with FAQ schema embedding
|
|
351
|
+
gsc answer "what is soft 404 error"
|
|
352
|
+
```
|
|
298
353
|
|
|
299
354
|
---
|
|
300
355
|
|
|
301
|
-
###
|
|
356
|
+
### 8. Soft-404 Forensic Diagnostic Engine with 14-Stack Instant Fixes (`gsc soft-404`)
|
|
357
|
+
|
|
358
|
+
#### The Problem
|
|
359
|
+
Soft-404 errors silently destroy your Google crawl budget by returning `200 OK` on empty templates or missing content. Writing server redirect rules manually across different stacks is slow and error-prone.
|
|
360
|
+
|
|
361
|
+
#### The Solution
|
|
362
|
+
`gsc soft-404` detects empty templates, blank pages, and canonical loops, auto-detects your tech stack, and generates copy-paste redirect blocks for 14 server environments:
|
|
302
363
|
|
|
303
|
-
Queries Google Trends explore and widget APIs directly in real time with **zero authentication and zero API keys**:
|
|
304
364
|
```bash
|
|
305
|
-
|
|
306
|
-
gsc
|
|
365
|
+
# Diagnose any URL for soft-404 status (auto-detects tech stack & server)
|
|
366
|
+
gsc soft-404 https://example.com/broken-page
|
|
367
|
+
|
|
368
|
+
# Generate copy-paste rules for your specific tech stack:
|
|
369
|
+
gsc soft-404 https://example.com/broken-page --fix sveltekit
|
|
370
|
+
gsc soft-404 https://example.com/broken-page --fix caddy
|
|
371
|
+
gsc soft-404 https://example.com/broken-page --fix cloudflare
|
|
372
|
+
gsc soft-404 https://example.com/broken-page --fix nextjs
|
|
373
|
+
gsc soft-404 https://example.com/broken-page --fix nginx
|
|
374
|
+
gsc soft-404 https://example.com/broken-page --fix shopify
|
|
375
|
+
gsc soft-404 https://example.com/broken-page --fix all
|
|
307
376
|
```
|
|
308
377
|
|
|
309
378
|
---
|
|
310
379
|
|
|
311
|
-
###
|
|
380
|
+
### 9. Agency Credential Vault & Instant Domain Switching (`gsc vault` & `gsc switch`)
|
|
312
381
|
|
|
313
382
|
#### The Problem
|
|
314
383
|
Agencies and multi-brand operators juggle dozens of client Google service account JSON files. Leaving unencrypted keys scattered across client folders invites credential leakage, path-traversal vulnerabilities, and accidental cross-client query pollution.
|
|
@@ -334,28 +403,6 @@ gsc use 2
|
|
|
334
403
|
|
|
335
404
|
---
|
|
336
405
|
|
|
337
|
-
### 9. Striking Distance Playbook & Organic CTR Curve (`gsc strike` & `gsc ctr-curve`)
|
|
338
|
-
|
|
339
|
-
#### The Problem
|
|
340
|
-
Most SEO reports simply dump a list of keywords without telling you **what to write, where to link, or what the revenue payoff will be**. Page 2 keywords (Positions 4–20) generate 80% of your search impressions but only 5% of your clicks.
|
|
341
|
-
|
|
342
|
-
#### The Solution
|
|
343
|
-
- **`gsc ctr-curve`**: Generates an empirical, non-linear CTR regression curve mapping your domain's real CTR by position against Google's global benchmarks, simulating the exact click gain of advancing to Top 3.
|
|
344
|
-
- **`gsc strike`**: Automatically synthesizes a tactical Page 2 attack plan with **3 SERP-safe hook titles (< 560px)**, heading recipes, and targeted internal link anchor suggestions:
|
|
345
|
-
|
|
346
|
-
```bash
|
|
347
|
-
# Simulate organic CTR curve and click upside for Page 2 rankings
|
|
348
|
-
gsc ctr-curve --days 30 --target-pos 3
|
|
349
|
-
|
|
350
|
-
# Generate tactical Page 2 striking distance playbook
|
|
351
|
-
gsc strike --limit 10
|
|
352
|
-
|
|
353
|
-
# Export playbook directly to CSV for copywriters & content teams
|
|
354
|
-
gsc strike --limit 20 --csv docs/seo/striking_playbook.csv
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
---
|
|
358
|
-
|
|
359
406
|
## 🛠️ Complete CLI Command Reference (80 Commands)
|
|
360
407
|
|
|
361
408
|
> **💡 Token Economy Note for AI Agents & Pipelines:**
|
|
@@ -492,6 +539,8 @@ gsc strike --limit 20 --csv docs/seo/striking_playbook.csv
|
|
|
492
539
|
|
|
493
540
|
## 🤖 AI Agent Native Integration (Antigravity, Claude, Cursor)
|
|
494
541
|
|
|
542
|
+
> 💡 **Zero External LLM Calls**: `gsc-cli` does NOT require an OpenAI or Anthropic API key and sends zero data to third-party AI servers. Everything runs locally on your machine. "AI Agent Native" refers to our deterministic `--compact` (minified JSON) and `--ndjson` flags designed to save 35–45% context tokens when called by local coding agents (Claude Code, Cursor Composer, Antigravity).
|
|
543
|
+
|
|
495
544
|
`gsc-cli` was engineered from the ground up to serve as the high-speed sensory organ for autonomous AI coding agents (**Antigravity**, **Claude Code**, **Cursor Composer**, **Windsurf**, and **OpenCode**).
|
|
496
545
|
|
|
497
546
|
Traditional CLI tools output ANSI-colored terminal text designed exclusively for human eyes—forcing AI agents to burn thousands of tokens scraping strings, guessing table columns, and hallucinating missing fields. `gsc-cli` eliminates this waste completely with **sub-millisecond execution**, **zero gem overhead**, and **three ultra-efficient machine output formats**.
|
|
@@ -572,20 +621,21 @@ Once installed, your agent automatically understands all 80 commands, flag permu
|
|
|
572
621
|
|
|
573
622
|
## 🥊 How GSC CLI Compares (The Zero-Bloat Advantage)
|
|
574
623
|
|
|
575
|
-
| Capability |
|
|
576
|
-
| :--- | :--- | :--- | :--- | :--- |
|
|
577
|
-
| **
|
|
578
|
-
| **Dependencies** |
|
|
579
|
-
| **Execution Latency** | 3–5 seconds
|
|
580
|
-
| **
|
|
581
|
-
| **
|
|
582
|
-
| **
|
|
583
|
-
| **
|
|
584
|
-
| **
|
|
585
|
-
| **
|
|
586
|
-
| **
|
|
587
|
-
| **
|
|
588
|
-
| **
|
|
624
|
+
| Capability | Google Search Console Web UI | Official Google API SDK (40 Gems) | Enterprise SEO Suites ($300–$1,000+/mo) | **ApollosWave/gsc-cli (v2.2.2)** |
|
|
625
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
626
|
+
| **Pricing** | Free ($0) | Free ($0) | $300–$1,000+/mo ($3,600–$12,000/yr) | **100% Free & Open Source ($0)** |
|
|
627
|
+
| **Dependencies** | Web Browser only | 40+ transitive gems (`googleauth`, etc.) | SaaS Web Application | **0 Gems / Pure Standard Library** |
|
|
628
|
+
| **Boot / Execution Latency** | Slow (manual clicking) | 3–5 seconds cold boot | Web UI latency | **< 1 millisecond (Compiled Binary)** |
|
|
629
|
+
| **Data Accuracy** | 100% Google Ground Truth | 100% Google Ground Truth | Sampled external proxy estimates | **100% Google Ground Truth (Direct API)** |
|
|
630
|
+
| **CLI Command Surface** | ❌ None (Web only) | Raw Ruby code required | ❌ None (Web dashboard) | **80 Production Commands** |
|
|
631
|
+
| **Core GSC Workflows** | Manual tab clicking & export | Complex API code boilerplate | Partial GSC sync via OAuth | **`top-queries`, `top-pages`, `performance`** |
|
|
632
|
+
| **Instant Googlebot Indexing** | Manual 1-by-1 submit | Complex JWT boilerplate | ❌ None | **✅ 1-Click Priority Ping (`gsc index`)** |
|
|
633
|
+
| **Multi-Engine IndexNow** | ❌ None | ❌ None | ❌ None | **✅ Bing, Yandex, Seznam, Naver (`gsc indexnow`)** |
|
|
634
|
+
| **Striking Distance Playbook** | ❌ Manual spreadsheet work | ❌ None | Expensive add-on tiers | **✅ Automated Page 2 Playbook (`gsc strike`)** |
|
|
635
|
+
| **Google AI Overviews (AIO)** | ❌ None | ❌ None | Limited / expensive beta tiers | **✅ Built-in `aio-hunter` & `cite-sim`** |
|
|
636
|
+
| **Automated Fix Generation** | ❌ None (Error tables only) | ❌ None | ❌ None | **✅ 14-Stack Redirects (`gsc soft-404 --fix`)** |
|
|
637
|
+
| **Token Economics for AI** | ❌ None | Verbose unformatted JSON | ❌ None | **✅ Native `--compact`, `--ndjson`, `--csv` (35–75% savings)** |
|
|
638
|
+
| **Autonomous AI Agent Skills** | ❌ None | ❌ None | ❌ None | **✅ Native Skill for Claude, Cursor, Antigravity** |
|
|
589
639
|
|
|
590
640
|
---
|
|
591
641
|
|
|
@@ -596,12 +646,12 @@ Once installed, your agent automatically understands all 80 commands, flag permu
|
|
|
596
646
|
```text
|
|
597
647
|
gsc-cli/
|
|
598
648
|
├── bin/
|
|
599
|
-
│ ├── gsc #
|
|
649
|
+
│ ├── gsc # Compiled single-file binary (RubyGems entry point)
|
|
600
650
|
│ └── test_live # Visual showcase & internal test harness
|
|
601
651
|
├── lib/
|
|
602
652
|
│ ├── gsc.rb # Central stdlib loader
|
|
603
653
|
│ └── gsc/
|
|
604
|
-
│ ├── version.rb # Semantic versioning (2.2.
|
|
654
|
+
│ ├── version.rb # Semantic versioning (2.2.2)
|
|
605
655
|
│ ├── color.rb # Zero-dependency ANSI formatting
|
|
606
656
|
│ ├── config.rb # Configuration persistence
|
|
607
657
|
│ ├── auth.rb # Pure OpenSSL JWT generator
|
|
@@ -616,7 +666,7 @@ gsc-cli/
|
|
|
616
666
|
│ ├── cli/ # Modular subcommand domains (audit, keywords, growth...)
|
|
617
667
|
│ └── cli.rb # Primary command dispatcher & router
|
|
618
668
|
├── dist/
|
|
619
|
-
│ └── gsc # Standalone bundled binary (1
|
|
669
|
+
│ └── gsc # Standalone bundled binary (1-click curl & GitHub releases)
|
|
620
670
|
├── gsc.gemspec # Standard RubyGem specification
|
|
621
671
|
├── Rakefile # Build, test, and standalone install tasks
|
|
622
672
|
└── install.sh # Universal 1-click shell installer
|
|
@@ -664,7 +714,7 @@ If GSC CLI saves your team hours of manual audit work or hundreds in monthly Saa
|
|
|
664
714
|
GSC CLI is maintained by [ApollosWave LLC](https://apolloswave.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli). Check out our products:
|
|
665
715
|
- **[Superspeed](https://superspeedapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**: Autonomous Core Web Vitals & website speed optimization engine.
|
|
666
716
|
- **[Supercart](https://supercartapp.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**: High-converting slide cart drawer for Shopify merchants.
|
|
667
|
-
- **[PackingLog](https://packinglog.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**:
|
|
717
|
+
- **[PackingLog](https://packinglog.com/?utm_source=github&utm_medium=readme&utm_campaign=gsc-cli)**: Our newly launched physical moving inventory and QR-code tracking SaaS — where waiting weeks for Googlebot to discover new landing pages wasn't an option.
|
|
668
718
|
|
|
669
719
|
---
|
|
670
720
|
|
|
@@ -676,18 +726,12 @@ GSC CLI is maintained by [ApollosWave LLC](https://apolloswave.com/?utm_source=g
|
|
|
676
726
|
|
|
677
727
|
---
|
|
678
728
|
|
|
679
|
-
##
|
|
680
|
-
|
|
681
|
-
**P.S.** If you've made it this far, you already know that relying on manual web dashboards and bloated dependencies is quietly costing your team hours every single week. Installing `gsc-cli` takes **under 10 seconds** (`gem install gsc-cli` or via our 1-line curl installer). In less time than it takes to log into Google Search Console, you can have sub-50ms ground-truth rankings streaming directly in your terminal.
|
|
729
|
+
## ⚖️ Open Source Philosophy & License
|
|
682
730
|
|
|
683
|
-
|
|
731
|
+
`gsc-cli` is 100% free, open-source software licensed under the **[MIT License](LICENSE)**.
|
|
684
732
|
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
👉 **[Get Started Now with 1-Click Install](#-quick-installation)** | **[Drop a Star on GitHub ⭐](https://github.com/ApollosWave/gsc-cli)**
|
|
688
|
-
|
|
689
|
-
---
|
|
733
|
+
We built this because we believe command-line developer tools should be fast, transparent, and respect your machine's resources. The modern Ruby standard library is more than capable of handling enterprise-grade API integrations and cryptographic authentication without dragging in 40 third-party gems.
|
|
690
734
|
|
|
691
|
-
|
|
735
|
+
If `gsc-cli` saves your team time, eliminates an unnecessary SaaS subscription, or accelerates your search pipelines, stars, feedback, and pull requests are always welcome.
|
|
692
736
|
|
|
693
|
-
|
|
737
|
+
👉 **[Get Started with 1-Click Install](#-quick-installation)** | **[Star on GitHub ⭐](https://github.com/ApollosWave/gsc-cli)**
|
data/bin/gsc
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# ==============================================================================
|
|
5
5
|
# Google Search Console & Indexing API CLI Tool (Pure Ruby - Zero Gem Dependencies)
|
|
6
|
-
# Standalone Single-File Distribution (Built from lib/gsc v2.2.
|
|
6
|
+
# Standalone Single-File Distribution (Built from lib/gsc v2.2.2)
|
|
7
7
|
# ==============================================================================
|
|
8
8
|
|
|
9
9
|
require 'net/http'
|
|
@@ -20,7 +20,7 @@ require 'stringio'
|
|
|
20
20
|
|
|
21
21
|
# --- version.rb ---
|
|
22
22
|
module GSC
|
|
23
|
-
VERSION = '2.2.
|
|
23
|
+
VERSION = '2.2.2'
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# --- color.rb ---
|
|
@@ -21612,7 +21612,7 @@ module GSC
|
|
|
21612
21612
|
key = input unless input.nil? || input.empty?
|
|
21613
21613
|
key = existing if key.empty?
|
|
21614
21614
|
else
|
|
21615
|
-
puts "Get your Keywords Everywhere API key at: #{Color.c('https://keywordseverywhere.com
|
|
21615
|
+
puts "Get your Keywords Everywhere API key at: #{Color.c('https://keywordseverywhere.com/?fpr=us25sg', Color::UNDERLINE)}"
|
|
21616
21616
|
print "Paste your Keywords Everywhere API Key: "
|
|
21617
21617
|
key = $stdin.gets&.strip
|
|
21618
21618
|
end
|
|
@@ -21643,7 +21643,7 @@ module GSC
|
|
|
21643
21643
|
puts " 2. #{Color.c('100% Free Live Google Trends (Breakout & Related terms):', Color::BLUE, Color::BOLD)}"
|
|
21644
21644
|
puts " • Run: #{Color.c('gsc trends "seo audit"', Color::BLUE, Color::BOLD)}"
|
|
21645
21645
|
puts " 3. #{Color.c('Top Up Credits for Automated Background CLI Lookups:', Color::GRAY, Color::BOLD)}"
|
|
21646
|
-
puts " • Purchase credits at: https://keywordseverywhere.com/credit-packages.html"
|
|
21646
|
+
puts " • Purchase credits at: https://keywordseverywhere.com/credit-packages.html?fpr=us25sg"
|
|
21647
21647
|
puts " • Your key is already saved; it will work immediately upon top-up.\n"
|
|
21648
21648
|
else
|
|
21649
21649
|
puts "\nTry searching keywords:"
|
|
@@ -21668,7 +21668,7 @@ module GSC
|
|
|
21668
21668
|
puts "\n" + Color.c("ℹ️ You have 0 paid REST API credits remaining.", Color::YELLOW)
|
|
21669
21669
|
puts "• Free Web Alternative: Check volume on keywordseverywhere.com, click 'Copy', then run: #{Color.c('gsc import clip', Color::CYAN)}"
|
|
21670
21670
|
puts "• Free Live Trends: #{Color.c('gsc trends "seo audit"', Color::BLUE)}"
|
|
21671
|
-
puts "• Top up credits at: https://keywordseverywhere.com/credit-packages.html"
|
|
21671
|
+
puts "• Top up credits at: https://keywordseverywhere.com/credit-packages.html?fpr=us25sg"
|
|
21672
21672
|
end
|
|
21673
21673
|
else
|
|
21674
21674
|
if acct[:error].to_s =~ /401|Unauthorized/i
|
|
@@ -21705,7 +21705,7 @@ module GSC
|
|
|
21705
21705
|
else
|
|
21706
21706
|
puts Color.c("\n❌ Keywords Everywhere API key not configured!\n", Color::RED, Color::BOLD)
|
|
21707
21707
|
puts "#{Color::BOLD}RECOMMENDATIONS:#{Color::RESET}"
|
|
21708
|
-
puts " 1. Connect a key: #{Color.c('gsc connect ke', Color::CYAN, Color::BOLD)} (Get key at https://keywordseverywhere.com
|
|
21708
|
+
puts " 1. Connect a key: #{Color.c('gsc connect ke', Color::CYAN, Color::BOLD)} (Get key at https://keywordseverywhere.com/?fpr=us25sg)"
|
|
21709
21709
|
puts " 2. Use 100% free Google Trends (No key needed!): #{Color.c("gsc trends \"#{target}\"", Color::BLUE, Color::BOLD)}"
|
|
21710
21710
|
puts " 3. Use 500 free daily web lookups: Copy web table -> #{Color.c('gsc import clip', Color::GREEN, Color::BOLD)}\n"
|
|
21711
21711
|
end
|
|
@@ -21752,7 +21752,7 @@ module GSC
|
|
|
21752
21752
|
{ action: 'import_clipboard', cmd: 'gsc import clip', desc: 'Use 500 free daily web lookups on keywordseverywhere.com and import via clipboard' },
|
|
21753
21753
|
{ action: 'google_trends', cmd: "gsc trends \"#{target}\"", desc: '100% Free real-time search interest & rising breakout queries' },
|
|
21754
21754
|
{ action: 'gsc_analytics', cmd: 'gsc top-queries', desc: 'Real impressions & clicks from your active Google Search Console domain' },
|
|
21755
|
-
{ action: 'topup', url: 'https://keywordseverywhere.com/credit-packages.html', desc: 'Purchase API credits to enable automated background CLI lookups' }
|
|
21755
|
+
{ action: 'topup', url: 'https://keywordseverywhere.com/credit-packages.html?fpr=us25sg', desc: 'Purchase API credits to enable automated background CLI lookups' }
|
|
21756
21756
|
]
|
|
21757
21757
|
})
|
|
21758
21758
|
return
|
|
@@ -21775,13 +21775,13 @@ module GSC
|
|
|
21775
21775
|
puts " • High-impression queries and Page 2 striking-distance keywords:"
|
|
21776
21776
|
puts " #{Color.c('gsc top-queries', Color::MAGENTA, Color::BOLD)} or #{Color.c('gsc opportunities', Color::MAGENTA, Color::BOLD)}\n"
|
|
21777
21777
|
puts " 4. #{Color.c('Top Up API Credits for Automated Background CLI Lookups', Color::GRAY, Color::BOLD)}"
|
|
21778
|
-
puts " • Purchase credits at: #{Color.c('https://keywordseverywhere.com/credit-packages.html', Color::UNDERLINE)}"
|
|
21778
|
+
puts " • Purchase credits at: #{Color.c('https://keywordseverywhere.com/credit-packages.html?fpr=us25sg', Color::UNDERLINE)}"
|
|
21779
21779
|
puts " • Your key is already saved; it will work immediately once credited.\n"
|
|
21780
21780
|
elsif err_str =~ /401|Unauthorized/i
|
|
21781
21781
|
puts Color.c("\n🔑 Invalid or Expired Keywords Everywhere API Key", Color::RED, Color::BOLD)
|
|
21782
21782
|
puts "Your API key was rejected by api.keywordseverywhere.com (HTTP 401).\n\n"
|
|
21783
21783
|
puts "#{Color::BOLD}RECOMMENDATIONS:#{Color::RESET}"
|
|
21784
|
-
puts " • Check or generate your API key at: #{Color.c('https://keywordseverywhere.com/first-install-addon.html', Color::UNDERLINE)}"
|
|
21784
|
+
puts " • Check or generate your API key at: #{Color.c('https://keywordseverywhere.com/first-install-addon.html?fpr=us25sg', Color::UNDERLINE)}"
|
|
21785
21785
|
puts " • Reconnect key: #{Color.c('gsc connect ke <KEY>', Color::CYAN, Color::BOLD)}"
|
|
21786
21786
|
puts " • Or use free Google Trends without any key: #{Color.c("gsc trends \"#{target}\"", Color::BLUE)}"
|
|
21787
21787
|
elsif err_str =~ /429|Rate Limit/i
|
data/dist/gsc
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# ==============================================================================
|
|
5
5
|
# Google Search Console & Indexing API CLI Tool (Pure Ruby - Zero Gem Dependencies)
|
|
6
|
-
# Standalone Single-File Distribution (Built from lib/gsc v2.2.
|
|
6
|
+
# Standalone Single-File Distribution (Built from lib/gsc v2.2.2)
|
|
7
7
|
# ==============================================================================
|
|
8
8
|
|
|
9
9
|
require 'net/http'
|
|
@@ -20,7 +20,7 @@ require 'stringio'
|
|
|
20
20
|
|
|
21
21
|
# --- version.rb ---
|
|
22
22
|
module GSC
|
|
23
|
-
VERSION = '2.2.
|
|
23
|
+
VERSION = '2.2.2'
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# --- color.rb ---
|
|
@@ -21612,7 +21612,7 @@ module GSC
|
|
|
21612
21612
|
key = input unless input.nil? || input.empty?
|
|
21613
21613
|
key = existing if key.empty?
|
|
21614
21614
|
else
|
|
21615
|
-
puts "Get your Keywords Everywhere API key at: #{Color.c('https://keywordseverywhere.com
|
|
21615
|
+
puts "Get your Keywords Everywhere API key at: #{Color.c('https://keywordseverywhere.com/?fpr=us25sg', Color::UNDERLINE)}"
|
|
21616
21616
|
print "Paste your Keywords Everywhere API Key: "
|
|
21617
21617
|
key = $stdin.gets&.strip
|
|
21618
21618
|
end
|
|
@@ -21643,7 +21643,7 @@ module GSC
|
|
|
21643
21643
|
puts " 2. #{Color.c('100% Free Live Google Trends (Breakout & Related terms):', Color::BLUE, Color::BOLD)}"
|
|
21644
21644
|
puts " • Run: #{Color.c('gsc trends "seo audit"', Color::BLUE, Color::BOLD)}"
|
|
21645
21645
|
puts " 3. #{Color.c('Top Up Credits for Automated Background CLI Lookups:', Color::GRAY, Color::BOLD)}"
|
|
21646
|
-
puts " • Purchase credits at: https://keywordseverywhere.com/credit-packages.html"
|
|
21646
|
+
puts " • Purchase credits at: https://keywordseverywhere.com/credit-packages.html?fpr=us25sg"
|
|
21647
21647
|
puts " • Your key is already saved; it will work immediately upon top-up.\n"
|
|
21648
21648
|
else
|
|
21649
21649
|
puts "\nTry searching keywords:"
|
|
@@ -21668,7 +21668,7 @@ module GSC
|
|
|
21668
21668
|
puts "\n" + Color.c("ℹ️ You have 0 paid REST API credits remaining.", Color::YELLOW)
|
|
21669
21669
|
puts "• Free Web Alternative: Check volume on keywordseverywhere.com, click 'Copy', then run: #{Color.c('gsc import clip', Color::CYAN)}"
|
|
21670
21670
|
puts "• Free Live Trends: #{Color.c('gsc trends "seo audit"', Color::BLUE)}"
|
|
21671
|
-
puts "• Top up credits at: https://keywordseverywhere.com/credit-packages.html"
|
|
21671
|
+
puts "• Top up credits at: https://keywordseverywhere.com/credit-packages.html?fpr=us25sg"
|
|
21672
21672
|
end
|
|
21673
21673
|
else
|
|
21674
21674
|
if acct[:error].to_s =~ /401|Unauthorized/i
|
|
@@ -21705,7 +21705,7 @@ module GSC
|
|
|
21705
21705
|
else
|
|
21706
21706
|
puts Color.c("\n❌ Keywords Everywhere API key not configured!\n", Color::RED, Color::BOLD)
|
|
21707
21707
|
puts "#{Color::BOLD}RECOMMENDATIONS:#{Color::RESET}"
|
|
21708
|
-
puts " 1. Connect a key: #{Color.c('gsc connect ke', Color::CYAN, Color::BOLD)} (Get key at https://keywordseverywhere.com
|
|
21708
|
+
puts " 1. Connect a key: #{Color.c('gsc connect ke', Color::CYAN, Color::BOLD)} (Get key at https://keywordseverywhere.com/?fpr=us25sg)"
|
|
21709
21709
|
puts " 2. Use 100% free Google Trends (No key needed!): #{Color.c("gsc trends \"#{target}\"", Color::BLUE, Color::BOLD)}"
|
|
21710
21710
|
puts " 3. Use 500 free daily web lookups: Copy web table -> #{Color.c('gsc import clip', Color::GREEN, Color::BOLD)}\n"
|
|
21711
21711
|
end
|
|
@@ -21752,7 +21752,7 @@ module GSC
|
|
|
21752
21752
|
{ action: 'import_clipboard', cmd: 'gsc import clip', desc: 'Use 500 free daily web lookups on keywordseverywhere.com and import via clipboard' },
|
|
21753
21753
|
{ action: 'google_trends', cmd: "gsc trends \"#{target}\"", desc: '100% Free real-time search interest & rising breakout queries' },
|
|
21754
21754
|
{ action: 'gsc_analytics', cmd: 'gsc top-queries', desc: 'Real impressions & clicks from your active Google Search Console domain' },
|
|
21755
|
-
{ action: 'topup', url: 'https://keywordseverywhere.com/credit-packages.html', desc: 'Purchase API credits to enable automated background CLI lookups' }
|
|
21755
|
+
{ action: 'topup', url: 'https://keywordseverywhere.com/credit-packages.html?fpr=us25sg', desc: 'Purchase API credits to enable automated background CLI lookups' }
|
|
21756
21756
|
]
|
|
21757
21757
|
})
|
|
21758
21758
|
return
|
|
@@ -21775,13 +21775,13 @@ module GSC
|
|
|
21775
21775
|
puts " • High-impression queries and Page 2 striking-distance keywords:"
|
|
21776
21776
|
puts " #{Color.c('gsc top-queries', Color::MAGENTA, Color::BOLD)} or #{Color.c('gsc opportunities', Color::MAGENTA, Color::BOLD)}\n"
|
|
21777
21777
|
puts " 4. #{Color.c('Top Up API Credits for Automated Background CLI Lookups', Color::GRAY, Color::BOLD)}"
|
|
21778
|
-
puts " • Purchase credits at: #{Color.c('https://keywordseverywhere.com/credit-packages.html', Color::UNDERLINE)}"
|
|
21778
|
+
puts " • Purchase credits at: #{Color.c('https://keywordseverywhere.com/credit-packages.html?fpr=us25sg', Color::UNDERLINE)}"
|
|
21779
21779
|
puts " • Your key is already saved; it will work immediately once credited.\n"
|
|
21780
21780
|
elsif err_str =~ /401|Unauthorized/i
|
|
21781
21781
|
puts Color.c("\n🔑 Invalid or Expired Keywords Everywhere API Key", Color::RED, Color::BOLD)
|
|
21782
21782
|
puts "Your API key was rejected by api.keywordseverywhere.com (HTTP 401).\n\n"
|
|
21783
21783
|
puts "#{Color::BOLD}RECOMMENDATIONS:#{Color::RESET}"
|
|
21784
|
-
puts " • Check or generate your API key at: #{Color.c('https://keywordseverywhere.com/first-install-addon.html', Color::UNDERLINE)}"
|
|
21784
|
+
puts " • Check or generate your API key at: #{Color.c('https://keywordseverywhere.com/first-install-addon.html?fpr=us25sg', Color::UNDERLINE)}"
|
|
21785
21785
|
puts " • Reconnect key: #{Color.c('gsc connect ke <KEY>', Color::CYAN, Color::BOLD)}"
|
|
21786
21786
|
puts " • Or use free Google Trends without any key: #{Color.c("gsc trends \"#{target}\"", Color::BLUE)}"
|
|
21787
21787
|
elsif err_str =~ /429|Rate Limit/i
|
data/lib/gsc/cli/keywords.rb
CHANGED
|
@@ -384,7 +384,7 @@ module GSC
|
|
|
384
384
|
key = input unless input.nil? || input.empty?
|
|
385
385
|
key = existing if key.empty?
|
|
386
386
|
else
|
|
387
|
-
puts "Get your Keywords Everywhere API key at: #{Color.c('https://keywordseverywhere.com
|
|
387
|
+
puts "Get your Keywords Everywhere API key at: #{Color.c('https://keywordseverywhere.com/?fpr=us25sg', Color::UNDERLINE)}"
|
|
388
388
|
print "Paste your Keywords Everywhere API Key: "
|
|
389
389
|
key = $stdin.gets&.strip
|
|
390
390
|
end
|
|
@@ -415,7 +415,7 @@ module GSC
|
|
|
415
415
|
puts " 2. #{Color.c('100% Free Live Google Trends (Breakout & Related terms):', Color::BLUE, Color::BOLD)}"
|
|
416
416
|
puts " • Run: #{Color.c('gsc trends "seo audit"', Color::BLUE, Color::BOLD)}"
|
|
417
417
|
puts " 3. #{Color.c('Top Up Credits for Automated Background CLI Lookups:', Color::GRAY, Color::BOLD)}"
|
|
418
|
-
puts " • Purchase credits at: https://keywordseverywhere.com/credit-packages.html"
|
|
418
|
+
puts " • Purchase credits at: https://keywordseverywhere.com/credit-packages.html?fpr=us25sg"
|
|
419
419
|
puts " • Your key is already saved; it will work immediately upon top-up.\n"
|
|
420
420
|
else
|
|
421
421
|
puts "\nTry searching keywords:"
|
|
@@ -440,7 +440,7 @@ module GSC
|
|
|
440
440
|
puts "\n" + Color.c("ℹ️ You have 0 paid REST API credits remaining.", Color::YELLOW)
|
|
441
441
|
puts "• Free Web Alternative: Check volume on keywordseverywhere.com, click 'Copy', then run: #{Color.c('gsc import clip', Color::CYAN)}"
|
|
442
442
|
puts "• Free Live Trends: #{Color.c('gsc trends "seo audit"', Color::BLUE)}"
|
|
443
|
-
puts "• Top up credits at: https://keywordseverywhere.com/credit-packages.html"
|
|
443
|
+
puts "• Top up credits at: https://keywordseverywhere.com/credit-packages.html?fpr=us25sg"
|
|
444
444
|
end
|
|
445
445
|
else
|
|
446
446
|
if acct[:error].to_s =~ /401|Unauthorized/i
|
|
@@ -477,7 +477,7 @@ module GSC
|
|
|
477
477
|
else
|
|
478
478
|
puts Color.c("\n❌ Keywords Everywhere API key not configured!\n", Color::RED, Color::BOLD)
|
|
479
479
|
puts "#{Color::BOLD}RECOMMENDATIONS:#{Color::RESET}"
|
|
480
|
-
puts " 1. Connect a key: #{Color.c('gsc connect ke', Color::CYAN, Color::BOLD)} (Get key at https://keywordseverywhere.com
|
|
480
|
+
puts " 1. Connect a key: #{Color.c('gsc connect ke', Color::CYAN, Color::BOLD)} (Get key at https://keywordseverywhere.com/?fpr=us25sg)"
|
|
481
481
|
puts " 2. Use 100% free Google Trends (No key needed!): #{Color.c("gsc trends \"#{target}\"", Color::BLUE, Color::BOLD)}"
|
|
482
482
|
puts " 3. Use 500 free daily web lookups: Copy web table -> #{Color.c('gsc import clip', Color::GREEN, Color::BOLD)}\n"
|
|
483
483
|
end
|
|
@@ -524,7 +524,7 @@ module GSC
|
|
|
524
524
|
{ action: 'import_clipboard', cmd: 'gsc import clip', desc: 'Use 500 free daily web lookups on keywordseverywhere.com and import via clipboard' },
|
|
525
525
|
{ action: 'google_trends', cmd: "gsc trends \"#{target}\"", desc: '100% Free real-time search interest & rising breakout queries' },
|
|
526
526
|
{ action: 'gsc_analytics', cmd: 'gsc top-queries', desc: 'Real impressions & clicks from your active Google Search Console domain' },
|
|
527
|
-
{ action: 'topup', url: 'https://keywordseverywhere.com/credit-packages.html', desc: 'Purchase API credits to enable automated background CLI lookups' }
|
|
527
|
+
{ action: 'topup', url: 'https://keywordseverywhere.com/credit-packages.html?fpr=us25sg', desc: 'Purchase API credits to enable automated background CLI lookups' }
|
|
528
528
|
]
|
|
529
529
|
})
|
|
530
530
|
return
|
|
@@ -547,13 +547,13 @@ module GSC
|
|
|
547
547
|
puts " • High-impression queries and Page 2 striking-distance keywords:"
|
|
548
548
|
puts " #{Color.c('gsc top-queries', Color::MAGENTA, Color::BOLD)} or #{Color.c('gsc opportunities', Color::MAGENTA, Color::BOLD)}\n"
|
|
549
549
|
puts " 4. #{Color.c('Top Up API Credits for Automated Background CLI Lookups', Color::GRAY, Color::BOLD)}"
|
|
550
|
-
puts " • Purchase credits at: #{Color.c('https://keywordseverywhere.com/credit-packages.html', Color::UNDERLINE)}"
|
|
550
|
+
puts " • Purchase credits at: #{Color.c('https://keywordseverywhere.com/credit-packages.html?fpr=us25sg', Color::UNDERLINE)}"
|
|
551
551
|
puts " • Your key is already saved; it will work immediately once credited.\n"
|
|
552
552
|
elsif err_str =~ /401|Unauthorized/i
|
|
553
553
|
puts Color.c("\n🔑 Invalid or Expired Keywords Everywhere API Key", Color::RED, Color::BOLD)
|
|
554
554
|
puts "Your API key was rejected by api.keywordseverywhere.com (HTTP 401).\n\n"
|
|
555
555
|
puts "#{Color::BOLD}RECOMMENDATIONS:#{Color::RESET}"
|
|
556
|
-
puts " • Check or generate your API key at: #{Color.c('https://keywordseverywhere.com/first-install-addon.html', Color::UNDERLINE)}"
|
|
556
|
+
puts " • Check or generate your API key at: #{Color.c('https://keywordseverywhere.com/first-install-addon.html?fpr=us25sg', Color::UNDERLINE)}"
|
|
557
557
|
puts " • Reconnect key: #{Color.c('gsc connect ke <KEY>', Color::CYAN, Color::BOLD)}"
|
|
558
558
|
puts " • Or use free Google Trends without any key: #{Color.c("gsc trends \"#{target}\"", Color::BLUE)}"
|
|
559
559
|
elsif err_str =~ /429|Rate Limit/i
|
data/lib/gsc/version.rb
CHANGED