Indexing gate report

This is the control that governs the whole site, evaluated against the fare API in the background (this evaluation: 13 Nov 2026, 08:44 UTC, 336 s). It is not an SEO optimisation: a page is published only when it clears every gate, and sitemap.xml is generated from this exact evaluation. A candidate below gate is still reachable by deep link, carries noindex, and never appears in a sitemap.

32,337candidate pages the current data could support
1,726clearing every gate right now
30,611reachable by deep link, noindex, out of the sitemap
1,718URLs the sitemap actually advertises

The verdict gate is the binding constraint

Rule: >= 8 observations spanning >= 30 days. Series that clear it: 763,944 of 1,793,069. verdict-bearing page types are gated per page by their own best series.

This is the correct behaviour in month one, not a defect. Indexing a verdict-bearing page now would publish a confident-looking number backed by a handful of observations. The countdown started when collection started — 13 Nov 2026, 08:03 UTC — and cannot be back-filled.

Gate rules as implemented

The rules in lib/gate.ts, which every page and the sitemap share
GateRuleApplies to
Non-empty faceta facet with zero matching sailings is never generated — it is a 404every generated page
Inventory≥ 5 distinct sailings matching the page's facetevery generated page
Price data≥ 1 observed fare with a real amount, a stated occupancy basis and a stated tax basisevery generated page
History≥ 8 observations spanning ≥ 30 dayspages asserting a verdict: sailing, cabin, drops, when_to_book
Uniquenessfacet overlap with a sibling page < 90%. Month- and ship-keyed facets are structurally disjoint and say so; category facets are measured by containment against the line's largest sibling, on a fixed sample. An overlap we cannot demonstrate is a failure, not a pass.every generated page
Freshnessthe newest observation behind the page is within 48 hevery generated page

Per page type

Evaluated 2026-11-13T08:44:12.586Z. “Candidates” counts facets that exist and clear the inventory bar; facets below it are not candidates at all.
Page typeIndexing kindCandidatesIndexableExcludedExcluded becauseExample excluded
cabin categorycabinverdict-bearing440226214Price data: 146; Inventory: 103; Uniqueness: 73/cabin/royal-caribbean/CB
destination x monthdestination_monthinventory53247953Freshness: 33; Price data: 23/cruises-to/mc/2027-05
price-drop feeddropsverdict-bearing110——
departure port x monthport_monthinventory1,088892196Price data: 147; Freshness: 66/cruises-from/savona/2027-05
sailing detailsailingverdict-bearing29,970029,970Inventory: 29,970; History (verdict gate): 29,970; Freshness: 8,225/cruise/royal-caribbean/ovation-of-the-seas/2026-11-13?sailing=215887
shipshipinventory289127162Price data: 162; Freshness: 5/cruise/costa-cruises/costa-fascinosa
solo / single occupancysolooccupancy-led110——
when to bookwhen_to_bookverdict-bearing16016Uniqueness: 16; Price data: 9; History (verdict gate): 2/when-to-book/royal-caribbean

What the sitemap is admitting, by section

Each section is its own sitemap file, capped at 50,000 URLs. The index at /sitemap.xml only advertises non-empty sections.
SectionSitemapURLsPage typesWithheld
inventory/sitemap-inventory.xml1,488departure port x month (892), destination x month (479), ship (127)—
sailing/sitemap-sailing.xml0sailing detail (0)verdict-bearing pages are gated individually by their own best series
occupancy/sitemap-occupancy.xml1solo / single occupancy (1)—
verdict/sitemap-verdict.xml227cabin category (226), price-drop feed (1), when to book (0)verdict-bearing pages are gated individually by their own best series
editorial/sitemap-editorial.xml2hub pages only—

How to read a page that is not here

Every generated page carries its own gate table at the bottom, showing each check, its rule and its result. If a page you expected is missing, its facet was empty and it 404s; if it exists but is not in the sitemap, it renders with noindex and tells you which gate it failed.