seo 0.7.1 → 0.8.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.
- package/README.md +111 -345
- package/dist/cli.js +84 -84
- package/dist/cli.js.map +1 -1
- package/dist/{dist-S2OSIAML.js → dist-BN_s3D0r.js} +86 -84
- package/dist/dist-BN_s3D0r.js.map +1 -0
- package/dist/{dist-aHJsXHVF.js → dist-sB8HDnCm.js} +1 -1
- package/dist/index.d.ts +941 -220
- package/dist/index.js +610 -295
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +857 -269
- package/dist/mcp.js.map +1 -1
- package/dist/{package-BaQwwfSG.js → package-D6HG7niq.js} +2 -2
- package/dist/{package-BaQwwfSG.js.map → package-D6HG7niq.js.map} +1 -1
- package/evals/crawl.json +2 -3
- package/evals/internal-links.json +2 -3
- package/evals/low-ctr.json +1 -2
- package/evals/page.json +2 -3
- package/evals/quick-wins.json +2 -3
- package/evals/seo.json +2 -2
- package/package.json +1 -1
- package/skills/README.md +4 -4
- package/skills/seo/SKILL.md +22 -95
- package/dist/dist-S2OSIAML.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,408 +1,174 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<picture>
|
|
3
3
|
<source media="(prefers-color-scheme: dark)" srcset="assets/brand/s-dark.svg">
|
|
4
|
-
<img src="assets/brand/s.svg" alt="SEO Skill" width="
|
|
4
|
+
<img src="assets/brand/s.svg" alt="SEO Skill" width="120">
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
# SEO For Agent-Native Teams
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
The SEO command for AI agents. A free Google Search Console MCP server and CLI: your agent reads your real Search Console, Google Analytics and Bing data, with Google update dates beside it, plus keyword research from your own DataForSEO or Ahrefs key.
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
<p align="center">
|
|
15
|
-
<a href="#install-and-run-setup">Get started</a>
|
|
16
|
-
·
|
|
17
|
-
<a href="https://seoskill.dev/docs/mcp">Hosted MCP</a>
|
|
18
|
-
·
|
|
19
|
-
<a href="https://seoskill.dev/docs">Documentation</a>
|
|
20
|
-
·
|
|
21
|
-
<a href="https://www.npmjs.com/package/seo">npm</a>
|
|
22
|
-
·
|
|
23
|
-
<a href="https://github.com/iannuttall/seo/issues">Questions</a>
|
|
24
|
-
·
|
|
25
|
-
<a href="https://seoskill.dev/privacy">Privacy</a>
|
|
26
|
-
·
|
|
27
|
-
<a href="SECURITY.md">Security</a>
|
|
28
|
-
·
|
|
29
|
-
<a href="LICENSE">License</a>
|
|
30
|
-
·
|
|
31
|
-
<a href="CHANGELOG.md">Changelog</a>
|
|
32
|
-
</p>
|
|
33
|
-
|
|
34
|
-
<p align="center">
|
|
35
|
-
<a href="https://github.com/iannuttall/seo/actions/workflows/ci.yml"><img alt="Checks" src="https://img.shields.io/github/actions/workflow/status/iannuttall/seo/ci.yml?branch=main&label=checks&style=flat-square"></a>
|
|
36
|
-
<a href="https://www.npmjs.com/package/seo"><img alt="npm version" src="https://img.shields.io/npm/v/seo?style=flat-square"></a>
|
|
37
|
-
<a href="https://www.npmjs.com/package/seo"><img alt="npm downloads" src="https://img.shields.io/npm/dm/seo?style=flat-square"></a>
|
|
38
|
-
<img alt="Node 22 or newer" src="https://img.shields.io/badge/Node-22%2B-339933?style=flat-square">
|
|
39
|
-
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-ready-3178c6?style=flat-square">
|
|
40
|
-
<a href="LICENSE"><img alt="Apache 2.0 license" src="https://img.shields.io/badge/license-Apache--2.0-lightgrey?style=flat-square"></a>
|
|
41
|
-
</p>
|
|
42
|
-
|
|
43
|
-
Ask your agent what is happening in search and get an answer built from your
|
|
44
|
-
own Search Console, Bing Webmaster Tools, Google Analytics and Clicky data,
|
|
45
|
-
with Google update dates laid over it. Add your own DataForSEO or Ahrefs key when you need keyword,
|
|
46
|
-
SERP, competitor or backlink data.
|
|
47
|
-
|
|
48
|
-
The results are facts with their dates and limits. There is no advice baked
|
|
49
|
-
in. Your agent reads the facts, shows you what matters and asks before it
|
|
50
|
-
changes a page.
|
|
10
|
+
[](https://www.npmjs.com/package/seo)
|
|
51
11
|
|
|
52
|
-
|
|
12
|
+
The SEO data I give my agents every day, so they work from my real numbers
|
|
13
|
+
instead of guessing.
|
|
53
14
|
|
|
54
|
-
|
|
15
|
+
Most AI SEO tools do one of two things. They hand your agent a checklist of
|
|
16
|
+
generic advice, or they feed it estimates from a keyword tool that has never
|
|
17
|
+
seen your site. Either way you end up with the same pages everyone else is
|
|
18
|
+
publishing. Pages written from a keyword list aren't SEO. They're slop.
|
|
55
19
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
20
|
+
This works the other way round. It's a Google Search Console MCP server and
|
|
21
|
+
CLI, and it doesn't tell your agent what to do. It gives it the facts: your
|
|
22
|
+
clicks, impressions and positions from Search Console, your visits from
|
|
23
|
+
Google Analytics or Clicky, your Bing data, the dates of Google updates, and
|
|
24
|
+
a crawl of your site. Your agent works out what matters, and you decide what
|
|
25
|
+
changes.
|
|
60
26
|
|
|
61
|
-
|
|
62
|
-
the agents it finds (the free hosted server is the first choice, or you can
|
|
63
|
-
run one locally) and to install the skill. That is all it asks. Nothing about
|
|
64
|
-
your site is saved: each command names the site it works on.
|
|
27
|
+
It's free and open source. Hack around with it. Make it your own.
|
|
65
28
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
```sh
|
|
69
|
-
seo sites
|
|
70
|
-
seo report --site example.com
|
|
71
|
-
```
|
|
29
|
+
## Installation (30-second setup)
|
|
72
30
|
|
|
73
|
-
|
|
31
|
+
### 1. Connect it to your agent
|
|
74
32
|
|
|
75
|
-
|
|
76
|
-
|
|
33
|
+
<details>
|
|
34
|
+
<summary><strong>Claude Code</strong></summary>
|
|
77
35
|
|
|
78
|
-
```
|
|
36
|
+
```bash
|
|
79
37
|
claude mcp add --transport http seoskill https://seoskill.dev/mcp
|
|
80
|
-
codex mcp add seoskill --url https://seoskill.dev/mcp
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Sign in with Google when the client asks. That first Google account is your
|
|
84
|
-
account, so there is no password or separate signup. The server keeps only
|
|
85
|
-
your linked Google accounts and any API keys you save, encrypted. It keeps no
|
|
86
|
-
report data, no Search Console or analytics rows and no request logs.
|
|
87
|
-
|
|
88
|
-
Your [account page](https://seoskill.dev/account) lets you add more Google
|
|
89
|
-
accounts, save DataForSEO or Ahrefs keys, or delete everything.
|
|
90
|
-
Each request uses the linked Google account that can read the site. The
|
|
91
|
-
[hosted MCP guide](https://seoskill.dev/docs/mcp) covers other clients, and the
|
|
92
|
-
[API keys guide](https://seoskill.dev/docs/keys) shows how to add a key
|
|
93
|
-
without pasting it into a chat.
|
|
94
|
-
|
|
95
|
-
A crawl fetches many pages, so `seo crawl` and `seo internal-links` run only
|
|
96
|
-
on your machine, through the CLI or the local MCP server. Bing data also runs
|
|
97
|
-
only there for now; when you ask the hosted server for Bing, it tells your
|
|
98
|
-
agent which CLI command to run.
|
|
99
|
-
|
|
100
|
-
## The eight commands
|
|
101
|
-
|
|
102
|
-
| Command | MCP tool | What it returns |
|
|
103
|
-
| --- | --- | --- |
|
|
104
|
-
| `seo report` | `seo_report` | The main report: an overview against the previous period, then every section's count and top rows |
|
|
105
|
-
| `seo page --url <url>` | `seo_page` | One URL: live page facts, Google index status and its queries |
|
|
106
|
-
| `seo compare --date <date>` | `seo_compare` | Equal periods before and after a date, with the Google updates in the window |
|
|
107
|
-
| `seo index` | `seo_index` | Pages that lost most of their clicks, checked live and with URL Inspection |
|
|
108
|
-
| `seo research <action>` | `seo_research` | Keyword metrics, ranked keywords, SERPs, competitors and backlinks from your key |
|
|
109
|
-
| `seo data` | `seo_data` | Raw Search Console rows, or Bing rows in the CLI and local server; the hosted tool also reads analytics landing pages |
|
|
110
|
-
| `seo crawl <url>` | `seo_crawl` | A site crawl with technical issues and the URLs they affect (local only) |
|
|
111
|
-
| `seo internal-links --url <url>` | `seo_internal_links` | Pages that could link to a target page (local only) |
|
|
112
|
-
|
|
113
|
-
Each command takes its target (a site, URL or property) and an optional date
|
|
114
|
-
window. `--site` takes a domain, a URL or a Search Console property, and
|
|
115
|
-
`seo sites` lists the ones you can read. Commands that return rows also take `--detail summary|rows|full` and
|
|
116
|
-
`--offset`. Brand terms, minimum impressions and the comparison period are set
|
|
117
|
-
for you and shown in the output, so there is nothing else to tune.
|
|
118
|
-
|
|
119
|
-
Run `seo help` for the short list, or `seo <command> --help` for one command.
|
|
120
|
-
The [command docs](https://seoskill.dev/docs) explain each one.
|
|
121
|
-
|
|
122
|
-
## Start with one report
|
|
123
|
-
|
|
124
|
-
Run the report without a section first:
|
|
125
|
-
|
|
126
|
-
```sh
|
|
127
|
-
seo report --site example.com
|
|
128
38
|
```
|
|
129
39
|
|
|
130
|
-
|
|
131
|
-
moved, and a short count with top rows for each section. Then ask for the one
|
|
132
|
-
section that matters:
|
|
133
|
-
|
|
134
|
-
```sh
|
|
135
|
-
seo report --site example.com --section quick-wins
|
|
136
|
-
```
|
|
40
|
+
</details>
|
|
137
41
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Page sections check their top 20 URLs live and merge same-site redirects.
|
|
42
|
+
<details>
|
|
43
|
+
<summary><strong>Codex</strong></summary>
|
|
141
44
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
moved:
|
|
145
|
-
|
|
146
|
-
```sh
|
|
147
|
-
seo compare --site example.com --date 2026-09-15
|
|
148
|
-
seo page --url https://example.com/pricing
|
|
45
|
+
```bash
|
|
46
|
+
codex mcp add seoskill --url https://seoskill.dev/mcp
|
|
149
47
|
```
|
|
150
48
|
|
|
151
|
-
|
|
152
|
-
of rows, or `--detail full` for every field, only when you need them.
|
|
49
|
+
</details>
|
|
153
50
|
|
|
154
|
-
|
|
51
|
+
<details>
|
|
52
|
+
<summary><strong>Any other agent</strong></summary>
|
|
155
53
|
|
|
156
|
-
|
|
157
|
-
|
|
54
|
+
Add `https://seoskill.dev/mcp` as a remote MCP server. Cursor, Claude
|
|
55
|
+
Desktop, VS Code and most other agents support it.
|
|
158
56
|
|
|
159
|
-
|
|
160
|
-
seo providers dataforseo connect
|
|
161
|
-
seo providers ahrefs connect
|
|
162
|
-
```
|
|
57
|
+
</details>
|
|
163
58
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
for one action:
|
|
59
|
+
<details>
|
|
60
|
+
<summary><strong>The CLI</strong> (for crawls and Bing, which run on your machine)</summary>
|
|
167
61
|
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
seo
|
|
171
|
-
seo research ranked_keywords --target example.com
|
|
172
|
-
seo research competitors --target example.com
|
|
173
|
-
seo research backlinks --target example.com
|
|
62
|
+
```bash
|
|
63
|
+
npm i -g seo
|
|
64
|
+
seo start
|
|
174
65
|
```
|
|
175
66
|
|
|
176
|
-
|
|
177
|
-
Ahrefs". The hosted server adds it for everyone; the CLI adds it when you have
|
|
178
|
-
saved an Ahrefs key. Provider numbers are estimates. Search Console stays the
|
|
179
|
-
record of what your own site actually got.
|
|
67
|
+
`seo start` signs you in, connects your agents and installs the skill.
|
|
180
68
|
|
|
181
|
-
|
|
69
|
+
</details>
|
|
182
70
|
|
|
183
|
-
|
|
184
|
-
Webmaster API key (Bing Webmaster Tools, then Settings, then API access):
|
|
71
|
+
### 2. Sign in with Google
|
|
185
72
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
Agents and CI can set `SEO_BING_API_KEY` instead. `seo providers bing status`
|
|
191
|
-
shows the connection and `seo providers bing disconnect` removes it. The
|
|
192
|
-
hosted server has no Bing for now. When you ask it for Bing, it tells your
|
|
193
|
-
agent to run the CLI instead, the same way it does for a crawl.
|
|
194
|
-
|
|
195
|
-
`seo report` then shows Google and Bing clicks and impressions for the same
|
|
196
|
-
dates, and each engine's share of those clicks. The `bing` section puts Bing's
|
|
197
|
-
top queries and pages beside Google's numbers for the same rows, and
|
|
198
|
-
`seo data --source bing` returns the raw Bing rows. Bing and Google numbers sit
|
|
199
|
-
side by side and are never added together. Bing lists only its top queries
|
|
200
|
-
and pages by week, so a row missing from Bing's list is unknown, not zero.
|
|
73
|
+
Your agent opens a Google sign-in. Pick the account that can see your Search
|
|
74
|
+
Console. That's your account. There's no password and no signup form.
|
|
201
75
|
|
|
202
|
-
|
|
76
|
+
### 3. Ask it something real
|
|
203
77
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
```sh
|
|
208
|
-
seo analytics google properties
|
|
209
|
-
seo ai-referrals --property 123456789
|
|
78
|
+
```text
|
|
79
|
+
Why did clicks drop on example.com last month?
|
|
210
80
|
```
|
|
211
81
|
|
|
212
|
-
|
|
213
|
-
sitekey on your [account page](https://seoskill.dev/account#clicky). The
|
|
214
|
-
hosted server and a CLI linked with `seo login` both read them:
|
|
82
|
+
That's it. You're ready to go.
|
|
215
83
|
|
|
216
|
-
|
|
217
|
-
seo data --source clicky --site example.com
|
|
218
|
-
```
|
|
84
|
+
## What you can ask it
|
|
219
85
|
|
|
220
|
-
|
|
221
|
-
|
|
86
|
+
- "Why did clicks drop last month? Was it the core update?"
|
|
87
|
+
- "Which pages are close to page one, and what do they rank for?"
|
|
88
|
+
- "Is this page indexed? If not, why not?"
|
|
89
|
+
- "Which searches does this page show up for that it never mentions?"
|
|
90
|
+
- "Can ChatGPT, Claude and Perplexity read my site?"
|
|
91
|
+
- "Who am I up against in search, and is there demand for a 'vs' or alternatives page?"
|
|
222
92
|
|
|
223
|
-
|
|
224
|
-
tool, build your own provider package from the
|
|
225
|
-
[provider template](https://github.com/iannuttall/seo-provider-template). Each source keeps its own metric names, so a
|
|
226
|
-
Clicky visit is never relabelled as a Google Analytics user.
|
|
93
|
+
Your agent picks the commands, reads the results and shows you what it found.
|
|
227
94
|
|
|
228
|
-
##
|
|
95
|
+
## Why it exists
|
|
229
96
|
|
|
230
|
-
|
|
231
|
-
evidence rules. If you skipped it during `seo start`, add it now:
|
|
97
|
+
I built this because agents kept failing at SEO in the same few ways.
|
|
232
98
|
|
|
233
|
-
|
|
234
|
-
seo skill install
|
|
235
|
-
```
|
|
99
|
+
### #1: The agent makes things up
|
|
236
100
|
|
|
237
|
-
|
|
238
|
-
|
|
101
|
+
**The problem.** Ask an agent why your traffic dropped and you get a tidy
|
|
102
|
+
list of possible causes. Algorithm update, technical issues, content
|
|
103
|
+
quality. None of it comes from your site, so none of it helps.
|
|
239
104
|
|
|
240
|
-
|
|
241
|
-
seo mcp install
|
|
242
|
-
```
|
|
105
|
+
**The fix** is to give it your numbers:
|
|
243
106
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
server.
|
|
247
|
-
|
|
248
|
-
The local server and the hosted server serve the same tools: `seo_sites`,
|
|
249
|
-
`seo_report`, `seo_page`, `seo_compare`, `seo_index`, `seo_research` and
|
|
250
|
-
`seo_data`. The local server adds `seo_crawl` and `seo_internal_links`, plus
|
|
251
|
-
`seo_list_providers`, `seo_describe_provider` and `seo_run_provider` for
|
|
252
|
-
installed provider packages.
|
|
253
|
-
|
|
254
|
-
## What the results can show
|
|
255
|
-
|
|
256
|
-
- Missing, partial, capped and filtered data is named. It never becomes a zero
|
|
257
|
-
or an all-clear.
|
|
258
|
-
- Search Console, Bing, analytics, live page checks and provider estimates stay
|
|
259
|
-
apart. Query rows do not add up to site totals.
|
|
260
|
-
- Flags such as likely automated queries and CTR gaps against the site's own
|
|
261
|
-
curve are heuristics. They point at rows worth a look.
|
|
262
|
-
- A Google update in the same window is timing, not cause.
|
|
263
|
-
- An intentional `noindex`, canonical or redirect is an observation until you
|
|
264
|
-
say it is wrong.
|
|
265
|
-
|
|
266
|
-
Nothing here promises clicks, rankings or indexing. Check a change by running
|
|
267
|
-
the same command again over a later, complete window.
|
|
268
|
-
|
|
269
|
-
## Upgrading from 0.3
|
|
270
|
-
|
|
271
|
-
Saved project profiles are gone. Every command takes `--site` (or `--url`), and
|
|
272
|
-
`--project` or `--client` now stops with a note that says so. `seo projects`,
|
|
273
|
-
`seo client` and the commands that saved history between runs (`change-log`,
|
|
274
|
-
`tests`, `content-groups`, `monitoring`, `schedule`, `index-watch`,
|
|
275
|
-
`technical-watch`, `crawl-reports`, `crawl-diff` and `diagnose`) were removed.
|
|
276
|
-
Your agent keeps its own notes now. Each removed command names what to use
|
|
277
|
-
instead. To stay on the old version, run `npm i -g seo@0.2.41`.
|
|
278
|
-
|
|
279
|
-
## Upgrading from 0.2
|
|
280
|
-
|
|
281
|
-
Version 0.3.0 moved most reports into the eight commands. Old names such as
|
|
282
|
-
`seo quick-wins` still run in 0.3 and print the new command to use. They stop
|
|
283
|
-
working in 0.4.0. Some reports and commands were removed, including rank
|
|
284
|
-
tracking, programmatic SEO, AI search readiness, llms.txt, Bing links,
|
|
285
|
-
IndexNow, Semrush, local search, server logs and the monthly and narrative
|
|
286
|
-
reports. Bing Webmaster search data came back in 0.3.0-beta.3. The old
|
|
287
|
-
research reports became `seo research`. The [changelog](CHANGELOG.md) lists
|
|
288
|
-
every old name and where it went.
|
|
289
|
-
|
|
290
|
-
## Use it in CI and scripts
|
|
291
|
-
|
|
292
|
-
Add `--json` to any command. JSON mode never prompts. Pass `--site` every
|
|
293
|
-
time.
|
|
294
|
-
|
|
295
|
-
```sh
|
|
296
|
-
seo report --site sc-domain:example.com --json
|
|
297
|
-
seo report --site sc-domain:example.com --section content-decay --json
|
|
298
|
-
```
|
|
107
|
+
- [`seo report`](https://seoskill.dev/docs/report) shows your totals against the last period, the pages and queries that moved, and the places worth a look: quick wins, low click-through rates, pages stuck on page two, decay and cannibalization.
|
|
108
|
+
- [`seo compare`](https://seoskill.dev/docs/compare) lines up the weeks before and after a date, with the Google updates in between.
|
|
299
109
|
|
|
300
|
-
|
|
301
|
-
JSON key through your secret store and grant it access to the exact
|
|
302
|
-
properties:
|
|
303
|
-
|
|
304
|
-
```yaml
|
|
305
|
-
- name: Run the SEO report
|
|
306
|
-
run: |
|
|
307
|
-
npm i -g seo
|
|
308
|
-
seo report --site sc-domain:example.com --json > seo-report.json
|
|
309
|
-
env:
|
|
310
|
-
SEO_GOOGLE_SERVICE_ACCOUNT_JSON: ${{ secrets.SEO_GOOGLE_SERVICE_ACCOUNT_JSON }}
|
|
311
|
-
```
|
|
110
|
+
### #2: Keyword tools are guessing too
|
|
312
111
|
|
|
313
|
-
|
|
112
|
+
**The problem.** Ahrefs and Semrush estimate your traffic from a sample.
|
|
113
|
+
They miss most of the long tail, and they rarely agree with each other.
|
|
314
114
|
|
|
315
|
-
|
|
115
|
+
**The fix** is to start from your own data. Search Console is the source of
|
|
116
|
+
truth for Google. When you do need keyword volumes or competitor data,
|
|
117
|
+
[`seo research`](https://seoskill.dev/docs/research) uses your own
|
|
118
|
+
DataForSEO or Ahrefs key, and it keeps those estimates apart from your real
|
|
119
|
+
numbers.
|
|
316
120
|
|
|
317
|
-
|
|
318
|
-
npm install seo
|
|
319
|
-
```
|
|
121
|
+
### #3: The agent says it's fixed when it isn't
|
|
320
122
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
import { crawlSite } from 'seo'
|
|
123
|
+
**The problem.** Agents trust their own edits. Then you find the page is
|
|
124
|
+
still noindexed, still redirecting, or still not in Google.
|
|
324
125
|
|
|
325
|
-
|
|
326
|
-
site: 'sc-domain:example.com',
|
|
327
|
-
})
|
|
126
|
+
**The fix** is to check the live site:
|
|
328
127
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
})
|
|
128
|
+
- [`seo page`](https://seoskill.dev/docs/page) loads one URL and asks Google whether it's indexed.
|
|
129
|
+
- [`seo index`](https://seoskill.dev/docs/indexing) checks every page that lost its clicks.
|
|
130
|
+
- [`seo crawl`](https://seoskill.dev/docs/crawl) checks the whole site, including what AI agents can read.
|
|
333
131
|
|
|
334
|
-
|
|
335
|
-
console.log(crawl.summary, crawl.issueGroups)
|
|
336
|
-
```
|
|
132
|
+
### #4: Too many reports
|
|
337
133
|
|
|
338
|
-
|
|
339
|
-
|
|
134
|
+
**The problem.** SEO tools love reports. The first version of this had about
|
|
135
|
+
70 of them, and almost nobody used most of them.
|
|
340
136
|
|
|
341
|
-
|
|
137
|
+
**The fix** was to cut it down to a handful of commands. Each one takes a
|
|
138
|
+
site or a URL, and dates if you want them. There are no settings to tune. Every result
|
|
139
|
+
ends with the command to run next, so your agent always knows where to go.
|
|
342
140
|
|
|
343
|
-
|
|
344
|
-
headless machines. Settings, provider keys and a short cache of Google
|
|
345
|
-
responses stay in your local config directory. Reports and crawls are not
|
|
346
|
-
saved: each run returns its results and your agent decides what to keep. A command still reaches the network when it needs Google,
|
|
347
|
-
your site or a provider you connected.
|
|
141
|
+
## Reference
|
|
348
142
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
seo
|
|
352
|
-
seo
|
|
353
|
-
seo
|
|
354
|
-
|
|
143
|
+
| Command | What it returns |
|
|
144
|
+
| --- | --- |
|
|
145
|
+
| [`seo report`](https://seoskill.dev/docs/report) | Your Search Console overview, then the top rows of each section |
|
|
146
|
+
| [`seo page`](https://seoskill.dev/docs/page) | One URL: the live page, its Google index status and its queries |
|
|
147
|
+
| [`seo compare`](https://seoskill.dev/docs/compare) | Before and after a date, with Google updates |
|
|
148
|
+
| [`seo index`](https://seoskill.dev/docs/indexing) | Pages that lost their clicks, checked live and with Google |
|
|
149
|
+
| [`seo research`](https://seoskill.dev/docs/research) | Keywords, search results, competitors and backlinks from your own key |
|
|
150
|
+
| [`seo data`](https://seoskill.dev/docs/data) | Raw Search Console or Bing rows |
|
|
151
|
+
| [`seo analytics`](https://seoskill.dev/docs/analytics) | Landing pages from Google Analytics or Clicky |
|
|
152
|
+
| [`seo crawl`](https://seoskill.dev/docs/crawl) | Technical issues and AI agent access across a site (CLI only) |
|
|
153
|
+
| [`seo internal-links`](https://seoskill.dev/docs/internal-links) | Pages that could link to a page (CLI only) |
|
|
355
154
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
[privacy policy](https://seoskill.dev/privacy) for every network boundary and
|
|
359
|
-
the [telemetry page](https://seoskill.dev/telemetry) for the anonymous usage
|
|
360
|
-
counts and how to turn them off.
|
|
361
|
-
|
|
362
|
-
## Documentation
|
|
363
|
-
|
|
364
|
-
Questions, bug reports and feature requests go through
|
|
365
|
-
[GitHub Issues](https://github.com/iannuttall/seo/issues). Report suspected
|
|
366
|
-
vulnerabilities privately through the process in [SECURITY.md](SECURITY.md).
|
|
367
|
-
|
|
368
|
-
- [Getting started](https://seoskill.dev/docs/getting-started)
|
|
369
|
-
- [Hosted MCP](https://seoskill.dev/docs/mcp)
|
|
370
|
-
- [API keys](https://seoskill.dev/docs/keys)
|
|
371
|
-
- [Your hosted account](https://seoskill.dev/account)
|
|
372
|
-
- [CLI](https://seoskill.dev/docs/cli)
|
|
373
|
-
- [Commands](https://seoskill.dev/docs)
|
|
374
|
-
- [What is stored](https://seoskill.dev/docs/privacy)
|
|
375
|
-
- [Privacy policy](https://seoskill.dev/privacy)
|
|
376
|
-
- [Public usage stats](https://seoskill.dev/stats)
|
|
377
|
-
- [Terms of use](https://seoskill.dev/terms)
|
|
378
|
-
- [Contributing](CONTRIBUTING.md)
|
|
379
|
-
- [Trademark and brand policy](TRADEMARKS.md)
|
|
380
|
-
|
|
381
|
-
## Develop locally
|
|
382
|
-
|
|
383
|
-
Most users do not need the source checkout. If you want to contribute:
|
|
384
|
-
|
|
385
|
-
```sh
|
|
386
|
-
git clone https://github.com/iannuttall/seo.git
|
|
387
|
-
cd seo
|
|
388
|
-
pnpm install
|
|
389
|
-
pnpm build
|
|
390
|
-
node dist/cli.js start --dry-run
|
|
391
|
-
```
|
|
155
|
+
Every command is also an MCP tool, such as `seo_report`. Add `--json` to any
|
|
156
|
+
command when you're scripting it.
|
|
392
157
|
|
|
393
|
-
|
|
158
|
+
## What it keeps
|
|
394
159
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
pnpm lint
|
|
400
|
-
pnpm pack --dry-run
|
|
401
|
-
```
|
|
160
|
+
As little as possible. The hosted server keeps your linked Google accounts
|
|
161
|
+
and any keys you save, encrypted. It doesn't keep your Search Console data,
|
|
162
|
+
your reports or request logs. The CLI keeps your sign-in in your system
|
|
163
|
+
keychain. The [privacy policy](https://seoskill.dev/privacy) has the details.
|
|
402
164
|
|
|
403
|
-
|
|
165
|
+
## Links
|
|
404
166
|
|
|
405
|
-
|
|
167
|
+
- [Documentation](https://seoskill.dev/docs)
|
|
168
|
+
- [Cloud agents and CI](https://seoskill.dev/docs/cloud-agents)
|
|
169
|
+
- [Add your own analytics source](https://github.com/iannuttall/seo-provider-template)
|
|
170
|
+
- [Changelog](CHANGELOG.md) and [contributing](CONTRIBUTING.md)
|
|
171
|
+
- [Questions and bugs](https://github.com/iannuttall/seo/issues)
|
|
406
172
|
|
|
407
|
-
|
|
408
|
-
|
|
173
|
+
Apache-2.0. The name and artwork are covered by the
|
|
174
|
+
[brand policy](TRADEMARKS.md).
|