Skip to main content

Seo

@c9n/seov2026.09.29.1· 1mo agoBEHAVIORSREPORTS
01README

Programmatic SEO auditing toolkit — on-page audits with sitemap discovery, site-level technical checks, prospect triage across many domains, PageSpeed/Core Web Vitals measurement and root-cause performance diagnosis, headless-browser capture, and a prospect-ready pitch report.

02Behaviors5
@c9n/seo/page-auditv2026.08.25.2seo/page_audit.ts

Global Arguments

ArgumentTypeDescription
siteUrlstringRoot URL of the site to audit, e.g. https://example.com. Used to locate robots.txt and sitemap.xml during discovery, and to resolve relative sitemap entries.
urlsarrayExplicit list of page URLs to audit. Takes precedence over discovered sitemap URLs.
sitemapUrlstringExplicit sitemap URL. When empty, discovery falls back to robots.txt then <siteUrl>/sitemap.xml.
userAgentstringUser-Agent header sent with every request.
timeoutMsnumberPer-request timeout in milliseconds.
concurrencynumberHow many pages to fetch in parallel.
maxPagesnumberMaximum number of pages to audit in a single run.
crawlFallbackbooleanWhen no sitemap can be found, discover URLs by following internal links from the site root instead. Many sites worth auditing have no sitemap at all.
respectRobotsbooleanHonour the target's robots.txt disallow rules. Leave enabled when auditing sites you do not own.
minIntervalMsnumberMinimum gap between requests to the same host. Raised automatically when robots.txt declares a longer Crawl-delay.
maxRetriesnumberRetries for transient failures (429, 503, network errors).
titleMinLengthnumberTitles shorter than this are reported as too short.
titleMaxLengthnumberTitles longer than this are reported as too long.
descriptionMinLengthnumberMeta descriptions shorter than this are reported as too short.
descriptionMaxLengthnumberMeta descriptions longer than this are reported as too long.
thinContentWordsnumberPages with fewer body words than this are reported as thin.
fn discover(sitemapUrl: string, maxUrls: number)
Discover page URLs from the site's sitemap.xml, following sitemap indexes and robots.txt Sitemap directives.
ArgumentTypeDescription
sitemapUrlstringSitemap to read instead of the one configured on the model.
maxUrlsnumberCap on discovered URLs. 0 uses the model's maxPages setting.
fn audit(targetUrls: array, useDiscovered: boolean)
Fetch each page and record its on-page SEO signals, writing one resource per page plus a site-level summary.
ArgumentTypeDescription
targetUrlsarrayAudit exactly these URLs, ignoring global arguments and discovery.
useDiscoveredbooleanForce use of the URLs stored by the last `discover` run.

Resources

page(30d)— SEO audit result for a single page.
summary(infinite)— Site-level roll-up of the most recent audit run.
discovery(30d)— URLs discovered from the site's sitemaps.
@c9n/seo/prospectorv2026.08.25.1seo/prospector.ts

Global Arguments

ArgumentTypeDescription
domainsarrayDomains or URLs to triage, e.g. example.com or https://example.com.
userAgentstringUser-Agent header sent with every request.
timeoutMsnumberPer-request timeout in milliseconds.
concurrencynumberHow many domains to probe in parallel.
minIntervalMsnumberMinimum gap between requests to the same host. Triage hits each host only a few times, so 0 is usually fine.
maxRetriesnumberRetries for transient failures.
maxDomainsnumberMaximum domains to triage in a single run.
fn triage(targetDomains: array)
Probe every configured domain's homepage, robots.txt and sitemap in one run, scoring each by how much SEO work it visibly needs.
ArgumentTypeDescription
targetDomainsarrayTriage exactly these domains, ignoring the model's `domains` global argument.

Resources

prospect(90d)— Triage result for one prospect domain.
ranking(infinite)— Prospect leaderboard for the most recent triage run.
@c9n/seo/site-healthv2026.08.25.1seo/site_health.ts

Global Arguments

ArgumentTypeDescription
siteUrlstringRoot URL of the site to check, e.g. https://example.com.
importantPathsarrayPaths that must remain crawlable, e.g. /products. Reported as blocking issues when robots.txt disallows them.
userAgentstringUser-Agent header sent with every request.
timeoutMsnumberPer-request timeout in milliseconds.
concurrencynumberHow many link checks to run in parallel.
minIntervalMsnumberMinimum gap between requests to the same host.
maxRetriesnumberRetries for transient failures.
maxLinkChecksnumberMaximum internal links to status-check in one run.
fn check(links: array, skipLinkCheck: boolean)
Run the site-level checks: origin canonicalisation, robots.txt analysis, and an internal link status sweep.
ArgumentTypeDescription
linksarrayInternal links to status-check. Typically fed from a page-audit run's internalLinks.
skipLinkCheckbooleanRun only the canonicalisation and robots.txt checks.

Resources

canonical(30d)— How the origin's URL variants consolidate.
robots(30d)— robots.txt analysis for the site.
links(30d)— Status of the internal links that were checked.
@c9n/seo/pagespeedv2026.08.28.1seo/pagespeed.ts

Global Arguments

ArgumentTypeDescription
urlsarrayURLs to measure. Keep this short — each measurement is a full Lighthouse run.
apiKeystringGoogle API key for the PageSpeed Insights API. Strongly recommended: the anonymous quota is shared and usually exhausted. Reference a vault entry rather than inlining a key.
strategiesarrayWhich form factors to measure. Mobile is what Google ranks on.
categoriesarrayLighthouse categories to request.
timeoutMsnumberPer-request timeout. Lighthouse runs are slow; 120s is a sensible floor.
concurrencynumberParallel measurements. The API rate-limits aggressively, so 1 is safest.
minIntervalMsnumberMinimum gap between API requests.
maxRetriesnumberRetries for 429 and transient failures.
maxUrlsnumberMaximum URLs to measure in one run.
fn measure(targetUrls: array)
Run PageSpeed Insights against each configured URL and form factor, capturing Lighthouse scores and Core Web Vitals field data.
ArgumentTypeDescription
targetUrlsarrayMeasure exactly these URLs, ignoring the model's `urls` global argument.
fn diagnose(targetUrls: array, strategy: enum, minImpactMs: number, maxFindings: number)
Diagnose why a page is slow: rank the root causes behind its Core Web Vitals, name the offending resources, and give the concrete fix for each. Use this when you need to act on a poor PageSpeed score rather than just record it.
ArgumentTypeDescription
targetUrlsarrayDiagnose exactly these URLs, ignoring the model's `urls` global argument.
strategyenumForm factor to diagnose. Mobile is what Google ranks on and where problems show up first.
minImpactMsnumberDrop findings whose estimated saving is below this, to cut long-tail noise.
maxFindingsnumberMaximum findings to keep per URL, highest weighted first.

Resources

measurement(90d)— PageSpeed result for one URL on one form factor.
summary(infinite)— Roll-up across every measurement in the run.
diagnosis(90d)— Ranked root causes of slowness for one URL, with the fix for each.
@c9n/seo/browserv2026.08.25.1seo/browser.ts

Global Arguments

ArgumentTypeDescription
urlsarrayURLs to render and capture.
browserPathstringPath to a Chrome or Chromium binary. Empty means probe the well-known install locations.
viewportWidthnumberViewport width in CSS pixels.
viewportHeightnumberViewport height in CSS pixels.
mobilebooleanEmulate a mobile device.
fullPagebooleanCapture the full scrollable page rather than just the viewport.
screenshotsbooleanCapture a PNG screenshot per URL. Disable for a metadata-only render pass.
settleMsnumberHow long to wait after load for late-rendering content to settle.
navigationTimeoutMsnumberPer-page navigation timeout.
launchTimeoutMsnumberHow long to wait for Chrome to expose its DevTools endpoint.
maxUrlsnumberMaximum URLs to capture in one run.
fn capture(targetUrls: array)
Render each URL in headless Chrome, storing a PNG screenshot and the metadata visible only after JavaScript has run.
ArgumentTypeDescription
targetUrlsarrayCapture exactly these URLs, ignoring the model's `urls` global argument.

Resources

capture(30d)— Rendered-page capture for one URL.
summary(infinite)— Roll-up across the capture run.

Files

screenshot(image/png)— PNG screenshot of a rendered page.
03Reports1
@c9n/seo/pitchmethod
seo_pitch.ts

Turns a page-audit run into a prioritised, plain-language SEO brief you can send to a site owner.

seopitchsales
04Stats
B
80 / 100
Downloads
37
Archive size
148.4 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License1/2partial

    no SPDX license declared

  • Verified public repository0/2missing
05Platforms