Products/SEO engine

SEO engine

Programmatic SEO automation that shows you its working.

Programmatic SEO automation in FounderReply crawls a site, computes on-page metrics with no model in the scoring path, reconciles a per-page issue register, samples keyword positions, ingests Search Console where a property is connected, drafts competitor conquest pages, and submits new URLs to IndexNow.

Crawl and audit · Rank sampling · Search Console · PageSpeed · IndexNow · Runs on the five-minute cron

Scoring is deterministic, not a model’s opinion
Real-user field data from PageSpeed
Google’s own numbers when Search Console is connected
IndexNow ping the moment a page publishes

What it runs

Six loops, one measurable surface.

Most SEO products are a dashboard on top of a third-party index. This one owns its own crawl, its own metric set and its own writer, which is why an issue that appears here has a threshold you can read and a file you can open rather than a vendor score you have to take on faith.

Crawl and inventory

A site is inventoried from its own URL structure, then swept page by page. Each page is fetched twice — once rendered, once with JavaScript off — so the engine can see what a crawler without a renderer would get.

Twenty-five pages per site per sweep by default, never-crawled first and then stalest, re-crawled weekly. A budget is what keeps a cron tick cheap enough to run every five minutes.

Deterministic on-page metrics

Roughly thirty discrete values per page — title and description lengths, heading counts, word count, canonical, indexability, structured-data types, alt coverage, internal and external link counts.

No model sits in the scoring path. Every number is computed from the HTML, so it charts over time, reproduces exactly, and can gate CI. The qualitative layer is separate and optional.

Performance from PageSpeed

Field data from real Chrome users — p75 largest contentful paint, interaction to next paint and cumulative layout shift — alongside the Lighthouse lab run and its performance, SEO and accessibility scores.

Failing Lighthouse SEO audits are reconciled against our own computed metrics; a disagreement becomes its own issue rather than being quietly dropped.

Keywords and rank tracking

The tracked-keyword portfolio is seeded from the target keywords the blog engine already researched, then positions are sampled over time so movement is visible without anyone typing a keyword list.

Seeding costs no model call — it reads keywords that already exist. Sampling rotates least-recently-checked first, so a growing portfolio never starves its own newest entries.

Search Console ingestion

Connect a verified property and Google’s own record replaces the estimate: real clicks, impressions, click-through rate and average position per query, stored as ranking snapshots alongside everything else.

Scraped SERP positions are an estimate of where you rank. Search Console is a record of where you ranked. Where both exist the engine keeps them as separate engines rather than averaging them.

Conquest page generation

A competitor’s public URL structure is mined and bucketed by what part of a content strategy each path serves, then comparison, alternatives and migration articles are drafted with their own pages as citable sources.

Drafted with guardrails: sourced and dated claims, genuine credit where a competitor is better, never a self-declared number one. Published unlisted — out of the blog index, in the sitemap and the compare hub.

The check list

Every issue it can raise, and exactly what fires it.

Two dozen fixed codes across three severities, plus one dynamic family for Lighthouse’s own SEO audits. The thresholds below are the literal numbers in the analyzer, not a description of them — a title warns at 30 and 60 characters because those are the constants in the file.

Issue taxonomylib/seo-metrics.ts
Every issue code the FounderReply page analyzer emits, its severity, and the condition that raises it.
Issue codeSeverityRaised when
http_errorerrorThe page responded 400 or above.
title_missingerrorNo <title>, and no og:title to fall back on.
title_too_shortwarnTitle under 30 characters.
title_too_longwarnTitle over 60 characters.
meta_description_missingerrorNo meta description at all.
meta_description_shortwarnDescription under 120 characters.
meta_description_longwarnDescription over 160 characters.
h1_missingerrorThe page has no h1.
h1_multiplewarnMore than one h1 on the page.
heading_hierarchy_skipinfoA heading level was skipped, e.g. h2 straight to h4.
thin_contentwarnUnder 300 words of body text.
content_render_dependentwarnOver 40% of the body text exists only after JavaScript runs.
canonical_missingwarnNo rel=canonical link.
canonical_mismatchwarnThe declared canonical is not the URL this path should claim.
jsonld_missinginfoNo JSON-LD block on the page.
jsonld_invalidwarnJSON-LD is present but does not parse.
og_incompleteinfoog:title, og:description or og:image is missing.
image_alt_coverage_lowwarnUnder 90% of images carry a non-empty alt.
keyword_absent_titlewarnThe page’s tracked target keyword is not in its title.
keyword_absent_h1infoThe page’s tracked target keyword is not in its h1.
performance_poorwarnLighthouse performance score below 50.
cwv_lcp_poorwarnField largest contentful paint over 2500 ms.
cwv_inp_poorwarnField interaction to next paint over 200 ms.
cwv_cls_poorwarnField cumulative layout shift over 0.1.
lh_seo_*warnOne code per failing Lighthouse SEO audit, minted from its audit id — the cross-check against our own computed metrics.

How the 0–100 score is weighted

Crawl & indexability25Title & meta20Content15Structured data15Performance15Links & media10

Weights sum to 100 and each verdict counts as pass, half a pass, or nothing. The weight vector is version-stamped into every stored audit, so revising the weights does not silently rewrite last quarter’s history. When PageSpeed has not run, performance scores as a neutral pass rather than dragging the page down for data that does not exist yet.

How a sweep runs

One tick, five bounded steps.

The whole engine is a cron job with budgets. Every stage is capped so a sweep stays cheap, and every substrate that is missing a key is a normal skip rather than a failure — an engine that halts because PageSpeed is unconfigured is an engine that stops running.

  1. 1

    Step 1

    Inventory

    Our own site is enumerated from the stores that render its programmatic pages, so the inventory cannot drift from what actually ships. A customer site is discovered from its live URL structure instead.

  2. 2

    Step 2

    Crawl and measure

    Up to twenty-five due pages are fetched rendered and again with JavaScript off, then run through the deterministic metric set and, where the quota allows, PageSpeed.

  3. 3

    Step 3

    Score and reconcile

    Each page gets a 0–100 composite and an issue list. The register is reconciled rather than appended, so a fixed issue disappears instead of accumulating into a number nobody trusts.

  4. 4

    Step 4

    Sample and ingest

    The twenty least-recently-checked keywords get a fresh position sample, and Search Console query performance is ingested where a property is connected — recorded as a separate engine, not blended.

  5. 5

    Step 5

    Write and submit

    Gap-driven articles and competitor conquest pages are drafted, and anything that publishes is pushed to IndexNow so the Bing chain sees it without waiting for a crawl.

The same sweep, as MCP tools

run_seo_auditget_seo_overviewlist_seo_issuestrack_keywordget_keyword_rankingssync_search_consoleadd_seo_sitegenerate_blog_from_seo_gapsgenerate_conquest_postsrefresh_stale_blog_posts

Ten of the tools on the MCP server, so a sweep can be driven from an assistant or from your own code instead of the dashboard. Source: lib/mcp.ts.

The MCP server and API

Pointed at us

The first site it audits is this one.

FounderReply’s own domain is a first-class site in the engine. Its inventory is enumerated from the same stores that render the pages — 18 programmatic pages across the industry, platform and audience axes, plus the guides, the subreddit cluster, the rival pages and the blog — so the crawl list cannot drift from what actually ships. The blog you are one click from is written, refreshed and submitted by the loops described above.

FAQ

What people ask before pointing it at a site.

Whether a model decides your score, what changes when Search Console is connected, what IndexNow actually buys you, and the question every SEO page dodges — whether any of this is a traffic promise.

What does programmatic SEO automation actually do here?

It crawls your pages on a schedule, computes about thirty discrete on-page metrics, emits a fixed set of issue codes with severities, scores each page out of 100, samples keyword positions, ingests Search Console where connected, drafts competitor comparison pages, and submits new URLs to IndexNow.

Does an AI model decide my SEO score?

No. The score and every issue are computed from your HTML by pure functions with fixed thresholds, so two runs of the same page produce the same number. The weight vector is stamped into each audit, which keeps historical scores comparable when the weights are revised.

Do I need Google Search Console connected?

No, but it changes what you get. Without it, positions come from sampling a live results page — an estimate. With a verified property connected, the engine ingests Google’s own clicks, impressions, click-through rate and average position per query, and stores those as a distinct source.

Does IndexNow get my pages into Google faster?

No, and anyone claiming otherwise is guessing. Google ignores IndexNow; it discovers pages through the sitemap and its honest last-modified dates. IndexNow feeds the Bing chain, which is what grounds Copilot, ChatGPT Search and part of Perplexity — increasingly worth having on its own terms.

What are conquest pages, and are they doorway pages?

They are comparison, alternatives and migration articles about named competitors, sourced from that competitor’s own public pages. They publish unlisted — kept out of the blog index but present in the sitemap and linked from the compare hub, because fully orphaned indexed pages are what the doorway policy targets.

Will this get me more traffic?

Nobody can promise you that, and this page will not. What the engine guarantees is measurement and execution: the same checks run on a schedule, issues appear and disappear as they are fixed, positions are sampled over time, and new pages get submitted. Ranking is Google’s decision, not ours.

Can I run the engine from my own tooling?

Yes. The audit, overview, issue list, keyword tracking, rankings, Search Console sync, site registration and conquest generation are all exposed as tools on the MCP server, so you can drive a sweep from Claude, Cursor or your own code rather than the dashboard.

Get started

Point it at your site and read the first audit.

Add a domain and the first sweep returns a scored page list with the exact issue codes above. No traffic promise, no vendor score — the thresholds are printed on this page and the numbers are yours to check.

Free to start · No credit card required · Deterministic scoring