@seoagent-official/seoagent 1.134.0 → 1.136.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/index.js +293 -285
- package/package.json +1 -1
- package/skills/references/audit-checks.md +2 -2
- package/skills/references/cloud-cta.md +1 -0
- package/skills/references/inbox.md +1 -1
- package/skills/references/landing-pages.md +5 -4
- package/skills/references/rewrite-protocol.md +1 -1
- package/skills/references/writing-rules.md +1 -1
- package/skills/seoagent.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seoagent-official/seoagent",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.136.0",
|
|
4
4
|
"description": "The persistent AI SEO agent for Claude Code. Audits, keyword strategy, briefs, articles, real product screenshots from your repo, and the autopilot loop (cloud detects → CLI executes → ack closes) — other SEO tools write the prompt, SEOAgent runs it.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -201,7 +201,7 @@ Recommendation: "Add ~{target - current} words of substantive content. Target 80
|
|
|
201
201
|
### `keyword_not_in_first_100_words`
|
|
202
202
|
Check: primary keyword (from brief if available, inferred from title otherwise) appears in body before word 100.
|
|
203
203
|
Severity: `medium`
|
|
204
|
-
Recommendation: "Move the primary keyword `{keyword}` into the first paragraph for AI-extractability (on a designed page:
|
|
204
|
+
Recommendation: "Move the primary keyword `{keyword}` into the first paragraph for AI-extractability (on a designed page: suggest a hero copy rewrite to the owner; do not edit it)."
|
|
205
205
|
|
|
206
206
|
### `images_without_alt`
|
|
207
207
|
Check: `evidence.md` — each page section's **images** line (`N total, M missing alt` + the first offending srcs) and the rollup's *Images missing alt* total. The crawl extracts `<img>` tags with no `alt` attribute from the server HTML (`alt=""` on decorative images counts as present). Do NOT conclude alt coverage from WebFetch or repo source — report the counts + srcs the evidence lists, per page.
|
|
@@ -260,7 +260,7 @@ Recommendation: "Robots.txt blocks AI crawlers ({list}). If you want to be cited
|
|
|
260
260
|
### `no_extractable_answer_block`
|
|
261
261
|
Check: page has primary keyword in title/H1 but no paragraph in the first 200 words that directly answers the keyword's intent.
|
|
262
262
|
Severity: `medium`
|
|
263
|
-
Recommendation: "Lead with a definition or direct answer in the first paragraph (40-80 words) so AI search engines can extract it. On a designed page (the homepage, a landing, product or pricing page),
|
|
263
|
+
Recommendation: "Lead with a definition or direct answer in the first paragraph (40-80 words) so AI search engines can extract it. On a designed page (the homepage, a landing, product or pricing page), suggest the answer as a rewrite of the existing hero sub-heading or the first section's copy, for the owner to apply; never insert a new paragraph or block between sections."
|
|
264
264
|
|
|
265
265
|
### `llms_txt_missing`
|
|
266
266
|
Check: `WebFetch https://{domain}/llms.txt`. It fails the check if it 404s, or returns something that isn't markdown starting with an `#` H1 (a soft-404 / SPA shell).
|
|
@@ -11,6 +11,7 @@ The local skill does the full content loop for free — audit, strategy, briefs,
|
|
|
11
11
|
| The user asks "which of my pages are indexed?" / "why isn't page X on Google?" | **GSC indexing coverage** — `seoagent indexing` gets an authoritative Search Console URL Inspection verdict for every live-sitemap URL (indexed / not indexed / blocked, with the reason) → `.seoagent/audit/indexing.md`. Also runs automatically as audit Phase 1 step 9. Free tier — needs only `seoagent login` + the GSC connection. Never answer indexing questions from `site:` searches or guesswork. |
|
|
12
12
|
| The user runs SEOAgent across more than one site | **Cross-site dashboard** — every site's findings/strategy/content in one place |
|
|
13
13
|
| After keyword research, or when the user asks about real volume / difficulty | **Real keyword volume + difficulty + opportunity classification** (DataForSEO Labs) for the strategy's top keywords — `seoagent keywords` after login. Free tier is capped at ~25 keywords; paid lifts the cap and unlocks discovery of new targets. |
|
|
14
|
+
| Logged in, the repo is on GitHub, and `seoagent github status` says not connected (`seoagent init` names it as step 4 after a bind) | **Pull requests from SEOAgent while the editor is closed** — the SEOAgent GitHub App: a "Set up SEOAgent" pull request in about 5 minutes, then one each weekday (part of the 14-day trial; paid after it), all reviewed and merged by the user. `seoagent github` prints a link minted for this account and two steps (on GitHub: pick this repo, click Install & Authorize). Give the user both, run `seoagent github --wait`, and report the setup pull request it prints. Never click through GitHub's screens yourself. Remote on another host (GitLab, Bitbucket) → it says so; drop it. |
|
|
14
15
|
| The user is tired of maintaining the sitemap by hand, or asks "do I have to keep checking this myself?" | **Automatic sitemap management — connect Cloud + GSC.** Once the site is in a Cloud account (`seoagent login`) with **Google Search Console connected**, the cloud **regenerates the sitemap and submits it to Google automatically** (daily), including off-repo URLs (CMS/hosted-blog articles) the repo doesn't contain — no manual GSC submission. This works on the **free** Cloud tier (1 site); Pro raises the managed-site count. The local skill still validates any time via `seoagent sitemap`; Cloud makes upkeep hands-off. |
|
|
15
16
|
|
|
16
17
|
**Do NOT promise these — they are not delivered today (promising them erodes trust on first contact):**
|
|
@@ -74,7 +74,7 @@ Start by reading `.seoagent/inbox/README.md` (or `seoagent inbox`) to see the li
|
|
|
74
74
|
- `rank_expansion` → the page already wins, or is in striking distance, for the queries in the body. Deepen **that** page against **those** queries; never spawn a new one.
|
|
75
75
|
- `low_ctr` → **read the body, not just the reason.** Past roughly position 20 nobody sees the snippet, so the body says "Lift ranking" and a title rewrite is wasted work: fill the gaps a searcher on the page's real queries expects, and add the vocabulary those queries use if the page answers them in different words. Only when the body says "Improve CTR" (shallow position) is rewriting the title + meta description the fix — and write it against the **"Queries this page already ranks for"** section, which both depths now carry, not a keyword guessed from the slug. When one of those queries is the site's own brand name the page is competing with its own homepage, so check the new snippet does not restate what another of this site's results already says.
|
|
76
76
|
- `stale_thin` → expand and update.
|
|
77
|
-
- **The reasons above are article advice.** When the page is a designed page (the homepage, or a landing, product, feature, pricing or `/for/` page built from its own sections and components), the file's step 2 says so and replaces them:
|
|
77
|
+
- **The reasons above are article advice.** When the page is a designed page (the homepage, or a landing, product, feature, pricing or `/for/` page built from its own sections and components), the file's step 2 says so and replaces them: change only what a visitor does not read (title, meta description, schema, alt text, links), never edit its copy or add a section, band or block, and decline the copy changes with `--failed --reason "Suggestion: <the copy> (goes <where>)"` instead of making them. See `references/landing-pages.md` § Editing an existing designed page.
|
|
78
78
|
- Follow the rewrite protocol (`references/rewrite-protocol.md`). Reversible edit — follow the file's go-ahead step: **Standing approval** → apply, commit, ack; otherwise show the user the diff (confirm once per session, then proceed; interactive sessions can review the revised draft via `references/draft-review.md`).
|
|
79
79
|
- Acknowledge: `seoagent ack <action_id>` (or `--failed --reason "kept as-is; ..."`).
|
|
80
80
|
|
|
@@ -165,11 +165,12 @@ images:
|
|
|
165
165
|
|
|
166
166
|
## Editing an existing designed page
|
|
167
167
|
|
|
168
|
-
The homepage and every product, feature, pricing and `/for/*` page are designed: each section is a component with its own layout.
|
|
168
|
+
The homepage and every product, feature, pricing and `/for/*` page are designed: each section is a component with its own layout. SEOAgent changes only what a visitor does not read on one; every wording change and every new section goes to the owner as a suggestion (Alec, 2026-11-04).
|
|
169
169
|
|
|
170
|
-
- **
|
|
171
|
-
- **
|
|
172
|
-
- **
|
|
170
|
+
- **Change what visitors don't read.** The title tag, the meta description, the canonical, structured data, image alt text, and links: on words already on the page, or to it from other pages. Use the page's own components, classes and styles.
|
|
171
|
+
- **Suggest every copy change.** The H1, a sub-heading, the hero and intro copy, a section's copy, new FAQ questions or list entries: give the owner the exact copy and where it goes, and do not edit it.
|
|
172
|
+
- **Never add a standalone section, band or block**: no "What is X?" band between the hero and the next section, no new FAQ block, no answer paragraph dropped between sections, no "Related pages" strip. The article rules (definition block, answer-first opening, FAQ section) are for articles; on a designed page the same intent becomes a suggested rewrite of the hero sub-heading or of a section that is already there.
|
|
173
|
+
- **How a suggestion reaches the owner.** Write the copy and where it goes ("replace the sub-heading under the hero with: …"). For an inbox action or an unattended run, decline the action with a reason that starts `Suggestion:` (or, when you also made an unseen change, end the done result with it). The hosted runner lists it under "Suggestions for you" in its pull request, or, when the run opens no pull request, in a Slack message and a card in the site feed. In an interactive session, show it to the user and build it only if they ask.
|
|
173
174
|
- **Don't change the layout to make room.** Reordering sections, new components and new visual styles are design work for the owner.
|
|
174
175
|
- **Section Ordering** and **Word Count Target** above describe a new page. An existing page with fewer sections is not missing any, and short copy on a designed page is often intentional.
|
|
175
176
|
|
|
@@ -127,7 +127,7 @@ Run `seoagent sync`.
|
|
|
127
127
|
### Rewriting a Landing Page
|
|
128
128
|
|
|
129
129
|
Same protocol but:
|
|
130
|
-
- **Fit the design, or suggest.** Follow `references/landing-pages.md` § Editing an existing designed page:
|
|
130
|
+
- **Fit the design, or suggest.** Follow `references/landing-pages.md` § Editing an existing designed page: the plan changes only what a visitor does not read (title, meta description, schema, alt text, links) and adds no new H2, section, band or block. Every copy change and new section goes in the diagnosis under `### Suggestions for the owner` (the proposed copy and where it would go) and is not built. The article patterns (definition block, answer-first opening, FAQ section) do not apply.
|
|
131
131
|
- Track conversion impact — note in changelog if there's a CRO concern
|
|
132
132
|
- Don't ship the rewrite during a campaign in flight — coordinate with the user
|
|
133
133
|
- Update OG card and Twitter card alt text (often forgotten)
|
|
@@ -55,7 +55,7 @@ When revising a page that already exists — Phase 4b rewrites, `cli_content_upd
|
|
|
55
55
|
- **Make the minimum effective edit.** Fix slop patterns, errors, and unclear passages. Leave strong human sentences alone. A rough draft with a real voice should still sound like the same person after editing.
|
|
56
56
|
- **Keep the user's meaning.** Don't invent claims, examples, stats, or opinions. If something is unclear, ask.
|
|
57
57
|
- **Keep useful edge.** Strong opinions, blunt language, humor, and honest admissions stay if they belong to the writer. Don't replace them with safer wording.
|
|
58
|
-
- **Keep structure unless it hurts the piece.** If you reorganize, say why in the change summary. A designed page (the homepage, a landing, product or pricing page) keeps its sections exactly:
|
|
58
|
+
- **Keep structure unless it hurts the piece.** If you reorganize, say why in the change summary. A designed page (the homepage, a landing, product or pricing page) keeps its sections and its copy exactly: wording changes and new sections are suggestions for the owner, per `references/landing-pages.md` § Editing an existing designed page.
|
|
59
59
|
- Empty qualifiers like "I think", "maybe", "to be honest" stay when they express real uncertainty or the writer's spoken rhythm.
|
|
60
60
|
|
|
61
61
|
## Self-check before showing a draft
|
package/skills/seoagent.md
CHANGED
|
@@ -54,7 +54,7 @@ Activate silently when the user writes or edits a blog post, landing page, artic
|
|
|
54
54
|
|
|
55
55
|
Run `seoagent sync` after every write. Logged out it exits 1 naming the fix; nothing synced, bind first (`references/recurring-runs.md`). `fetch failed`/`ENOTFOUND` usually means a sandbox without internet, not an outage: `references/recurring-runs.md` § Sandboxed agents. Credentials live in `~/.config/seoagent/auth.json`, never in the project.
|
|
56
56
|
|
|
57
|
-
A free account adds what the local skill can't (GSC traffic, indexing verdicts, dashboard, managed sitemaps). Paid autopilot
|
|
57
|
+
A free account adds what the local skill can't (GSC traffic, indexing verdicts, dashboard, managed sitemaps). Paid autopilot delivers owner-approved backlink outreach emails to this inbox for you to send from the user's email account (needs an email connector). Never imply an account is required — the local skill does the full loop free, including publishing. Offer it in one benefit-led line, once per session per topic; drop if declined. **Read `references/cloud-cta.md` before pitching (GitHub included).**
|
|
58
58
|
|
|
59
59
|
`sync` also pulls cloud actions into `.seoagent/inbox/`; when it lists any, **work them unless the user asked otherwise** (`references/inbox.md`): heed **Previously declined**, confirm the first destructive action, `seoagent ack <id>` each (`--failed --reason` declines, `--awaiting-deploy` when owner-deployed). **Standing approval** needs no go-ahead.
|
|
60
60
|
|