seobuild-onpage v2.5.0
One command. Competitive data in. Ranking pages out.
claude plugin marketplace add gbessoni/seobuild-onpage && claude plugin install seobuild-onpage@seobuild
Not on Claude Code? See Install + Setup for Codex, OpenClaw, and manual clone.
Most SEO tools tell you what's wrong with your site. This one writes the pages.
/seoagi "airport parking JFK" pulls the current SERP, analyzes what's ranking, finds the gaps in their content, and writes you a complete page -- with the heading structure, depth, FAQ section, and schema markup that actually competes. Not thin content. Not keyword-stuffed filler. Pages backed by live data from the tools the pros use.
New in v2.5.0 -- Specificity Scoring & Format Bans:
- Named Source Attribution -- every major claim must name its source in the visible copy, not only inside a
{{VERIFY}} tag. An unattributed number reads as assertion rather than evidence. Name the source in prose, then link to it.
- Ban on fabricated testing claims -- "We tested 12 of these", "We reviewed 24 options", "After 40 hours of testing" are banned unless the testing genuinely happened and the methodology is documented. A fabricated test count is a fabricated statistic, so this extends the existing ban on invented studies.
- Ban on skyscraper pages -- no exhaustive encyclopedia-style omnibus pages. Comprehensiveness is not the retrieval signal; crucial non-obvious specificity is. Word count continues to come from the competitive median, never from out-lengthing competitors.
- Conversion elements as SVG assets -- award badges, certification seals, trust marks, and decorative CTA panels render as SVG rather than parsed body text, keeping promotional language out of the text layer on informational pages. Accessible text alternatives are mandatory, and claims inside these assets remain subject to
{{VERIFY}}.
- Quantifiable brand differentiators in both vertical sections -- at least two per local page, expressed as hard numbers or specific attributes rather than adjectives, because Ask Maps and Service Viewer pull structured specifics and discard marketing language.
- 70-point quality checklist -- adds Named Source Attribution, Fabricated Testing, Skyscraper, and Quantifiable Differentiators. Passing threshold raised to 60/70.
New in v2.4.0 -- Discovery Routes & Off-Page Embeds:
- The Anti-Hallucination Meta-Directive -- a new MASTER RULE at the top of SKILL.md. LLMs are trained on fifteen years of largely obsolete SEO writing, so the agent is now explicitly forbidden from applying pre-trained SEO instincts (LSI keywords, keyword density, blog hubs, "write 2,000 words") and must execute only the rules in the document. Includes a table of the specific instincts to suppress and why each is wrong.
- GSC Discovery Route Fill -- find URLs Google already expects to exist and fill them.
gsc_pull.py --ghost-paths finds pages earning impressions that return 404, which is the highest-confidence signal available through the API. --crawl-stats-csv ingests a manual Crawl Stats export for the literal Discovery list, because that report is UI-only and not in the Search Console API.
- Unlinked Brand Citations -- Tier 1 off-page drafts now carry plain-text brand and URL mentions alongside HTML links. RAG pipelines read plain text, so this adds retrieval coverage anchor-only linking misses.
- Off-Page Embeds -- Tier 1 drafts embed a live artifact pointing at the money entity where the platform allows it, defaulting to the officially supported Google Maps embed. Conditional by design, since most Tier 1 platforms block arbitrary iframes.
- Strict SSR/SSG Requirement -- client-side-rendered SPAs are banned as an output target. Every internal link must exist in the raw HTML DOM of the initial server response, because JS-injected link graphs are routinely missed or crawled late.
- 66-point quality checklist -- adds Off-Page Embed, Unlinked Citation, and SSR/SSG Validation. Passing threshold raised to 57/66.
New in v2.3.0 -- AI SEO Correlation Protocols:
- Outbound Citation Requirement -- pages targeting AI Overviews must link out to at least 5 external authoritative sources with descriptive anchor text. Zero outbound links carries a severe citation penalty: an engine checking whether the page synthesizes real sources finds nothing to verify against.
- Strict Phrase Placement (Title + H1 only) -- the exact-match keyword appears in exactly two places and nowhere else. H2/H3/H4 exact-match is now unconditionally forbidden. This retires the old competitor-ratio Forensic EMQ Check, which made H1 placement conditional.
- Entity-Fact Pairing -- naming an entity is not a signal; binding it to a hard fact is. Every entity in a chunk must carry a time, place, cost, capacity, frequency, distance, or date. Crucial non-obvious information is the highest-weighted retrieval signal.
- Informational vs. Local Divergence -- informational pages strip sales CTAs, free-estimate offers, and award mentions (they demote citation rate). Local Ask Maps pages feature local project counts, awards, and differentiators heavily. Same elements, opposite treatment, selected by detected intent.
- Anti-Boilerplate Internal Linking -- site-wide repetitive in-content link blocks are banned; internal links must be contextual and unique to their chunk. The Recommended Spoke Pages block stays, because it is derived per-page from competitor anchor data rather than templated.
- 63-point quality checklist -- adds Outbound Citation, Strict Phrase Placement, Entity-Fact Pairing, Intent Divergence, and Anti-Boilerplate checks. Passing threshold raised to 54/63.
New in v2.2.0 -- Compliant Affiliate Monetization & Local Isolation:
- Strict Local Service Isolation -- local pages must target a single service+place ("Water Heater Repair Anaheim"), never a multi-service catch-all. AI parsers truncate stacked pages because they can't form a clean service-to-place association. N services in a city = N pages.
- GBP Canonical Link Directive -- local pages now emit a directive telling the user to point their Google Business Profile website field at the specific inner page, not the homepage. Strongest local-relevance signal, usually wasted on the homepage.
- Compliant Affiliate Monetization --
research.py --affiliate-link emits a compliant affiliate directive: disclosed rel="sponsored nofollow" CTAs + FTC disclosure, crawler and human read the same page. (An earlier draft of this feature proposed a JS redirect that served informational HTML to LLMs while bouncing humans to an affiliate page -- that is cloaking / a sneaky redirect, a Google spam-policy violation and de-indexation trigger, so it was replaced with the compliant pattern.)
- 58-point quality checklist -- adds Local Isolation (#57) and GBP Inner-Link Directive (#58) checks (N/A pass on non-local pages). Passing threshold raised to 49/58.
New in v2.1.0 -- The Anti-NLP Protocol & Two-Gate AEO:
- The NLP SEO Lie -- practitioner testing shows that artificially stuffing traditional NLP entities (Surfer SEO, Google's Natural Language API, Clearscope term lists) into body copy to hit a coverage score results in ~25% de-indexation. The agent is strictly forbidden from NLP entity stuffing. Entities earn weight through structural placement, never repetition targets.
- Structural Entity Placement (Section 4 rewrite) -- entities belong in headings, table cells, definition terms, and schema fields, not stuffed into paragraph text. Placement once beats prose repetition ten times.
- Two-Gate AEO, Anti-Paragraph Snippet, DOM Flattening, and Goldilocks Entity Synergy (all shipped in v2.0.0) remain in full force.
- 56-point quality checklist -- adds the Anti-NLP Stuffing check (#56). Passing threshold raised to 47/56.
New in v2.0.0 -- The Two-Gate AEO & DOM Flattening Protocols:
- The Two-Gate Paradigm Shift -- traditional metrics like meta descriptions and title tags no longer dictate AI Overview success. The agent now optimizes primarily for Gate 1 (Retrieval Pool Entry) and Gate 2 (Selected Citation Extraction). Entering the candidate pool and getting your passage selected for citation are two different jobs; v2.0.0 optimizes both explicitly.
- Anti-Paragraph Snippet Answer Rule -- strict ban on bare
<p> tags for the primary 2-3 sentence answer beneath an H2. Bare paragraphs are routinely skipped for first-position citations. Primary answers must use block-level structural containers (div.answer, blockquote, dl/dd, leading table row, or RDFa/Microdata span block).
- DOM Nesting Depth Flattening -- shallow-DOM enforcement. Deeply nested visual-builder output (Elementor, Divi, etc.) is penalized at runtime for node-processing cost and Main Content dilution. Generated layout targets a max ~3 nesting levels; competitor pages exceeding it are flagged as
DOM_FLATTENING_OPPORTUNITY.
- Goldilocks Entity Synergy -- subheadings maintain a precise entity density, strategically repeating core associated entities across H2/H3s to build extraction synergy for citation algorithms. Not too sparse, not stuffed.
- 55-point quality checklist -- adds Anti-Paragraph Snippet, DOM Flattening Depth, Goldilocks Entity Synergy, and Two-Gate Extraction Pass checks. Passing threshold raised to 46/55.
New in v1.9.1 -- Decision Fit Mapping + Brand Voice + Missing Spoke Detection:
- Brand differentiator injection via
--differentiators on research.py (e.g. --differentiators="women-owned, 24/7 service, no hidden fees"). Passes through to the brief output so the writing agent has strict brand constraints. Differentiators must be woven verbatim into the 500-token chunks and surfaced in the AI Summary Nugget -- paraphrased fluff fails the new Brand Identity check.
- Missing Spoke Detection -- the research pipeline now extracts internal-link anchor text from the top 3 competitors, filters out navigational generics (Home, Contact Us, Privacy, FAQ, etc.) and image-link leakage, and outputs a ranked
missing_spokes list. SKILL.md Section 12 now requires every generated page to append a ## Recommended Spoke Pages section built from this data.
- Decision Fit Mapping -- new checklist enforcement: heading structure must map to the user's psychological buying stage (Research / Compare / Buy) instead of copy-pasting competitor H2s.
- Execution Protocol now prompts for differentiators if the user didn't supply them up front -- the agent stops and asks before writing rather than producing generic AI homogenization.
- 51-point quality checklist -- adds Decision Fit (#49), Brand Identity (#50), Topical Silo (#51) checks. Passing threshold raised to 42/51.
New in v1.9.0 -- Massive Web Render as primary content parser:
- Massive Web Render (render.joinmassive.com) is now the primary competitor content parser when
MASSIVE_API_TOKEN is configured. Returns clean rendered markdown including JS-loaded content that DataForSEO's content_parsing/live endpoint misses.
- Graceful per-URL fallback to DataForSEO -- if Massive errors or returns empty for any single URL, that URL falls back to DataForSEO. A partial Massive outage cannot break a research run.
- SERP organic results and keyword data continue to come from DataForSEO -- Massive's
/search endpoint only returns "also-searched" query suggestions, not organic results, so the SERP path is unchanged.
content_parsers field added to research output so you can see exactly which parser handled each URL (e.g. {"massive": 4, "dataforseo-fallback": 1}).
- Setup: add
MASSIVE_API_TOKEN=... to ~/.config/seo-agi/.env. No token = skill runs in pure DataForSEO mode exactly as before.
New in v1.8.0 -- Gemini 3.5 Flash RAG Optimization + Off-Page Trust Expansion: