Skip to content
WebmasterID

Reference

Comparison methodology reference

Rules for /compare entries: two-sided verified, one-sided verified, pending; the type-level declaresWinner: false invariant; comparison-table rules and source-trail requirements.

Last updated: 2026-05-21

No winner declared

Every ComparisonEntity record carries the literal field declaresWinner: false as a type-level invariant. The build refuses to compile a comparison with true; an integrity guard greps the data layer and the page copy for "winner" / "best model" outside the explicit disclaimer; the rendered page carries an aside that states "No winner declared" in plain text. The discipline is structural, not editorial.

A comparison's job is to set verified attributes side-by-side. Readers compare against their own workload; the platform does not assert that one model is overall "better" than another along any axis we are not willing to source directly.

Two-sided / one-sided / pending

/compare groups every ComparisonEntity into one of three buckets:

Comparison buckets
BucketDefinitionRule / note
two-sided-verifiedBoth models verifiedBoth compared models carry verificationStatus: 'verified'.Indexable. Surfaced first on /compare. JSON-LD includes the full pricing/context/modality fields.
one-sided-verifiedOne model verifiedExactly one of the compared models is verified end-to-end; the other is partial or unverified.Indexable. Surfaced second. The asymmetry is documented on the page; unverified fields render as the canonical label.
pendingNeither side verifiedBoth sides are partial or unverified. Kept structural until verification lands.Noindex. Filtered URL set is also noindex per the global hub rules.

Comparison table rules

The comparison table renders each attribute through a VerifiedField — never a raw value. If a model lacks a verified value for an attribute, the cell renders the canonical unverified-data label rather than "N/A" or a guess. Pricing cells render per-row, with each unit shown separately (no "total cost" column). Capability flags (extended thinking, vision input, tool use) render only when verified.

Limitations are recorded as a per-comparison limitations array and rendered as a Caveats section. The comparison's "use cases" field is a neutral list of workload classes each side is commonly chosen for; it is not a recommendation.

Source trail

Every comparison renders the union of both sides' citations at the bottom of the page (using mergeCitations(modelA.citations, modelB.citations)). The list deduplicates by URL so a citation that backs both sides appears once. Readers can audit every metric on the page directly against the underlying primary source.

Indexing rules

A comparison page is indexable only when at least one side is verified — enforced by shouldIndexComparison() in lib/should-index.ts. Pending comparisons remain reachable (so the catalogue stays honest about gaps) but emit noindex, follow metadata. Filtered URLs (e.g. /compare?provider=anthropic) are also noindex; the unfiltered base URL is the canonical.

See /compare for the live hub and the filter form.

Continue

Related pages