seoskills.sh
Catalog/Programmatic SEO/Faceted Navigation Index Planner

Faceted Navigation Index Planner

Enumerates ecommerce facet and filter URL combinations from a crawl export, joins each to search demand, Googlebot craw…

Updated

New

Use this skill

$ npx skills add seoskills.sh/faceted-nav-index-planner
Repository
seoskills.sh
GitHub stars
License
MIT

About this skill

Faceted Navigation Index Planner is a Programmatic SEO skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves large-scale page generation and ecommerce SEO built for consistent quality. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.

SKILL.md

Faceted Navigation Index Planner

AGENT ROLE: Autonomous faceted-navigation policy agent. Parse the facet URL space from a crawl, measure demand + crawl frequency + index status per facet, quantify crawl-budget waste, decide index/canonicalize/noindex/disallow per facet and per combination, and emit the JSON in references/output.schema.json.

OBJECTIVE

For every facet parameter (single-select) and every multi-facet combination present on the site, output the correct indexation directive and the exact implementation (robots line, canonical target, or meta robots), backed by measured demand and Googlebot behavior — so valuable filters get indexed and combinatorial junk stops draining crawl budget.

INPUTS

  • crawl (REQUIRED via --crawl): a crawler CSV export (Screaming Frog shape: Address, Status Code, Indexability, Canonical). Columns are detected by header name.
  • facet_params (REQUIRED via --facet-params): comma list of query params that are facets (e.g. color,size,brand,sort,page).
  • logs (OPTIONAL via --logs): server access log (Combined Log Format) used to count Googlebot hits per URL.
  • demand (OPTIONAL via --demand): JSON map of param=value (or bare value, or p1&p2 for a combo) to monthly volume.
  • site (OPTIONAL via --site): GSC property; joins clicks per faceted URL.
  • min_demand (OPTIONAL, default 50): demand at/above which a facet earns index.
  • combo_explosion_cap (OPTIONAL, default 3): a combination of this many simultaneous facet params is treated as a crawl trap and disallowed.
  • noise_params (OPTIONAL): extra params to force to robots-disallow (a sensible sort/session/tracking set is built in).

AUTHENTICATION (crawl/logs keyless + GSC)

  1. The crawl and log inputs are local files and need no credentials.
  2. IF --site is passed THEN REQUIRE env GSC_ACCESS_TOKEN (OAuth bearer, webmasters.readonly). IF unset THEN STOP error.code="AUTH_MISSING_GSC". IF the token is rejected THEN STOP error.code="AUTH_GSC_FORBIDDEN".

EXPECTED TOOL CALLS

  • Run scripts/faceted_index_planner.py --crawl crawl.csv --facet-params color,size,brand,sort,page [--logs access.log] [--demand demand.json] [--site sc-domain:example.com].
  • No paid API calls in the keyless path; at most one GSC Search Analytics query.

PROCEDURE (deterministic)

STEP 1 — PARSE the crawl; for each URL split the query string and record which facet params (and which noise params) are present, plus index status and canonical. STEP 2 — LOGS: IF --logs THEN count Googlebot requests (UA contains "googlebot") per request-target and aggregate hits to each facet param and each combination signature. STEP 3 — JOIN demand per facet value and clicks per URL (IF --site). STEP 4 — WASTE MODEL: a Googlebot hit on a faceted URL that has no demand-bearing facet value AND no GSC clicks is counted as wasted crawl budget; report wasted_bot_hits and wasted_share. STEP 5 — SINGLE-FACET DIRECTIVE: IF the param is a noise/tracking/sort param THEN robots-disallow; ELIF pagination THEN canonicalize (series); ELIF max value demand >= min_demand THEN index (self-canonical); ELIF demand data exists but is low THEN canonicalize to parent; ELSE noindex,follow. STEP 6 — COMBINATION DIRECTIVE (2+ params): IF param count >= combo_explosion_cap THEN robots-disallow (crawl trap); ELIF the exact combination has measured demand >= min_demand THEN index (curate a static URL); ELSE canonicalize to the highest-demand parent. STEP 7 — EMIT each directive with its implementation rule and a projected crawl saving = Googlebot hits on everything disallowed.

RATE LIMITS & ERROR HANDLING

  • GSC 429/5xx -> backoff 2^attempt (max 5) then proceed WITHOUT clicks (non-fatal); 401/403 STOP AUTH_GSC_FORBIDDEN.
  • Crawl parsing caps at --max-urls (default 200000) and log parsing at --max-log-lines (default 3,000,000) as cost/memory guards; both are streamed line by line.
  • Concurrency: single-pass file reads plus one GSC call; effective concurrency 1.
  • An empty crawl export STOPs error.code="BAD_CRAWL".

MISSING / INSUFFICIENT DATA

  • WITHOUT --logs there is no crawl-frequency signal: crawl_data=false, all googlebot_hits/waste fields are null, and directives fall back to demand + index status only — crawl waste is never fabricated.
  • WITHOUT --demand a facet has unknown demand: it is NEVER indexed on a guess; it defaults to noindex,follow (reason no_demand_data), the safe policy.
  • WITHOUT --site clicks are null and do not enter the waste model.
  • Multi-facet combinations without an explicit combination-demand entry default to canonicalize, never index.

OUTPUT

One JSON object per references/output.schema.json.

FILES

  • scripts/faceted_index_planner.py — facet URL enumeration, log-based crawl frequency, demand + clicks join, crawl-budget waste model, per-facet and per-combination directive engine.
  • references/output.schema.json — output contract.

Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.

Embed a badge

seoskills.sh install badge

More in Programmatic SEO

Programmatic SEOcoreyhaines31/marketingskills

programmatic-seo

When the user wants to create SEO-driven pages at scale using templates and data. Also use when the user mentions "programmatic SEO," "template pages," "pages at scale," "directory pages," "location pages," "[keyword] + [city] pages," "comparison pages," "integration pages," "building many pages for SEO," "pSEO," "generate 100 pages," "data-driven pages," or "templated landing pages." Use this whenever someone wants to create many similar pages targeting different keywords or locations. For auditing existing SEO issues, see seo-audit. For content strategy planning, see content-strategy.

131.7K installs
Programmatic SEOagricidaniel/claude-seo

seo-programmatic

Programmatic SEO planning and analysis for pages generated at scale from data sources. Covers template engines, URL patterns, internal linking automation, thin content safeguards, and index bloat prevention. Use when user says "programmatic SEO", "pages at scale", "dynamic pages", "template pages", "generated pages", or "data-driven SEO".

5.3K installs
Programmatic SEOagricidaniel/claude-seo

seo-ecommerce

E-commerce SEO analysis: Google Shopping visibility, Amazon marketplace intelligence, product schema validation, competitor pricing analysis, and marketplace keyword gaps. Combines on-page product SEO with marketplace data from DataForSEO Merchant API. Use when user says "ecommerce SEO", "product SEO", "Google Shopping", "marketplace SEO", "product schema", "Amazon SEO", "product listings", "shopping ads", or "merchant SEO".

4.7K installs
Programmatic SEOnexscope-ai/ecommerce-skills

product-page-seo

Optimize e-commerce product pages for search engine visibility. On-page SEO, structured data, page speed, mobile optimization, and content strategy for Google, Bing, and platform-specific search.

975 installs
Programmatic SEOaffilino/ecommerce-seo-audit-skill

ecommerce-seo-audit

Comprehensive ecommerce SEO audit for product pages, collection pages, technical SEO, log file analysis, and competitor research. Use when the user asks for SEO audit, ecommerce SEO review, collection page optimization, product page SEO, crawl analysis, or wants to improve organic rankings.

824 installs
Programmatic SEOseoskills.sh

Product Feed SEO Optimizer

Audits a Google Merchant product feed for title quality, attribute completeness, and GTIN/identifier validity using the…

New