The Overfront Benchmark

What actually moves a site’s visibility in AI answers, measured across every site that uses Overfront, and how long each engine takes to notice a change. Published as a versioned, citable dataset. Current version : 2026.10-5.

What a row says

Each row is one improvement action, measured on one AI engine, across every site that marked that action done and had enough data before and after.

Field Meaning
nDomains Sites in the estimate. Under 5, the row is not published. Under 30, the verdict is a trend, not a claim.
nImproved Sites whose own change beat their controls.
deltaPp The pooled shift, expressed in percentage points of cited answers at the typical starting rate.
ci 95% interval of the pooled shift (log-odds).
verdict lifts, hurts, no_effect_detected, trend, or insufficient.
qValue False-discovery-rate adjusted p (Benjamini–Hochberg) across the published rows.

Rows with a market are the same estimate within one market (sites that are asked the same questions). Rows without one pool every market.

The latency table gives, per engine, the median days from a page change to the engine’s crawler fetching it again, and to the engine’s answers changing, with the share of changes reflected within 28 days.

How it is measured

When the change landed (t0). We keep a hash of the visible text of each participating site’s public pages every time we read them, so a change is dated by the page, not by the button. If the site has connected Cloudflare, t0 is the first time the engine’s crawler fetched the changed page after the change. Otherwise t0 is the day the text changed. If no change is found within 14 days of the mark, t0 is the day the action was marked done, and the row says so (t0Source).

The outcome. Not a score : the raw daily counts of answers that cited or mentioned the site, per engine, from the same pooled answers the panel score is built on. Twenty-one days before t0 against twenty-one days after. A domain needs at least 30 answers on each side.

The comparison. The site’s change in log-odds of being cited, minus the same change in sites of the same market that did not do the action (difference in differences). Fewer than three such peers and a fixed control group of sites that never change stands in. This removes what the engine did to everyone that month.

Pooling. Per-site results are combined with DerSimonian–Laird random effects, so sites that differ from each other widen the interval rather than vanish into an average. The variance of the shared control group is added once, not divided away. Published rows get Benjamini–Hochberg q-values.

Latency. From the dated page change : the first crawler visit (Cloudflare-connected sites only) and the first day the cumulative post-change interval no longer overlaps the pre-change interval. Sites whose event has not happened yet are censored at the horizon, and the medians are Kaplan–Meier.

Exclusions. A site that marked two different actions within a week is set aside for both (bundled). Cells with fewer than five sites are counted in suppressed and not published.

Versions

The method’s constants (windows, thresholds, estimators) live in code under the version string. Changing any of them changes the version, the public dataset is kept per version, and this page is updated in the same change. Scores shown in the extension and the console are a different, internal method and are not affected by benchmark versions.

What is not published

Limits