seo 0.2.10 → 0.2.13

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 CHANGED
@@ -77,7 +77,7 @@ technical report before connecting Google.
77
77
  Running `seo help` shows the shape of the tool:
78
78
 
79
79
  ```txt
80
- seo v0.2.10
80
+ seo v0.2.13
81
81
 
82
82
  Run SEO audits, find what needs fixing, and ship the changes with your agent.
83
83
 
@@ -181,6 +181,106 @@ seo analytics google properties
181
181
  seo analytics google report --property 123456789 --dimensions landingPage --metrics sessions,totalUsers
182
182
  ```
183
183
 
184
+ Bing Webmaster is optional. Connect it when you want Bing traffic trends,
185
+ crawl changes, and query and page opportunities beside your Google evidence:
186
+
187
+ ```sh
188
+ seo providers bing connect
189
+ seo providers bing report --project example
190
+ ```
191
+
192
+ The guided connection asks for the API key from Bing Webmaster Tools Settings,
193
+ then API Access. It validates the key, lists verified sites, matches one to the
194
+ selected project when the hostname is unambiguous, and stores the key in the
195
+ system keychain with a private local file fallback. Agents and CI can set
196
+ `SEO_BING_API_KEY` and run the report without saving the key.
197
+
198
+ The report compares recent traffic periods, highlights material crawl changes,
199
+ and returns bounded query and page review lists. Provider responses stay
200
+ uncached and byte limited. Invalid, partial, capped, unavailable, and sampled
201
+ evidence remain distinct. Bing's `inIndex` crawl statistic is provider
202
+ evidence, not URL-level proof that a page is indexed. A query or page missing
203
+ from a weekly top list is unknown, not zero.
204
+
205
+ Use the same connection to review a bounded set of referring links, or import
206
+ an export from another source:
207
+
208
+ ```sh
209
+ seo links --project example --json
210
+ seo links --file ./links.csv --row-limit 10000 --json
211
+ ```
212
+
213
+ CSV and JSONL imports stream from disk. Regular JSON arrays have a smaller
214
+ file limit to avoid a memory spike. Every result includes the number of rows
215
+ read, rejected, deduplicated, omitted, or stopped by a limit. It is evidence
216
+ from the selected source, not a complete backlink index or an authority score.
217
+
218
+ ## Create an HTML report for a client
219
+
220
+ The built-in renderer creates a standalone report when you need a predictable
221
+ file without asking an agent to design it:
222
+
223
+ ```sh
224
+ seo report --project example --format html
225
+ seo monthly-report --project example --format html
226
+ seo report-narrative --project example --format html --view analyst
227
+ ```
228
+
229
+ Client view keeps the presentation concise. Analyst view adds evidence coverage
230
+ and unavailable sections. Use `--output ./report.html` to choose the file path.
231
+ The file contains its own CSS, works offline, prints cleanly, and is marked
232
+ `noindex,nofollow`.
233
+
234
+ An agent can instead design its own report from the structured result:
235
+
236
+ ```sh
237
+ seo report --project example --full --json > seo-report.json
238
+ ```
239
+
240
+ Ask the agent to turn that evidence into one responsive, print-friendly HTML
241
+ file for the intended audience. It can choose the layout and visual style, but
242
+ it must keep provider labels, reporting dates, data status, limitations, and
243
+ verification steps visible. Missing or partial data must not become zero, and
244
+ the presentation must not invent forecasts, causes, scores, or conclusions.
245
+ The installed skill teaches agents this contract automatically.
246
+
247
+ ## Analyze crawler traffic in server logs
248
+
249
+ Stream a local NGINX or Apache-style combined access log without importing or
250
+ retaining every raw request:
251
+
252
+ ```sh
253
+ seo server-logs analyze --file ./access.log --json
254
+ seo server-logs analyze --file ./access.jsonl --format jsonl --json
255
+ ```
256
+
257
+ The report groups observed search and AI crawler user agents by response class
258
+ and path. Input bytes, rows, line size, unique paths, and returned detail are
259
+ bounded, and any capped or malformed evidence stays visible. User-agent names
260
+ can be spoofed, so the result describes observed request strings rather than
261
+ verified crawler identity.
262
+
263
+ ## Notify IndexNow after a change
264
+
265
+ Generate a key file in the public asset directory for your site, then deploy
266
+ it before sending notifications:
267
+
268
+ ```sh
269
+ seo indexnow setup --site https://example.com --output ./public
270
+ seo indexnow verify --site https://example.com
271
+ seo indexnow submit --site https://example.com --url https://example.com/changed-page
272
+ ```
273
+
274
+ Use `--dry-run --json` to validate a submission without notifying IndexNow.
275
+ The command accepts one URL, a comma-separated list, or a newline-delimited
276
+ file. A run is limited to 1,000 unique URLs, every URL must use the configured
277
+ host, and the public key file is checked before a live request. The local key
278
+ mapping stays in the system keychain with a private file fallback. Agents and
279
+ CI can set `SEO_INDEXNOW_KEY` for the current process instead.
280
+
281
+ An accepted IndexNow request confirms receipt only. It does not prove that a
282
+ URL was crawled, indexed, ranked, or shown in search results.
283
+
184
284
  ## Crawl a site
185
285
 
186
286
  For a large or unfamiliar site, start with the sitemap health pass: