Repository navigation
[P1][SEO] Reconcile sitemap URLs, aliases, and Search Console indexing #59
Copy link
Copy link
Open
Description
Current next action - 2026-10-22
- Status: Canonical slug repair shipped in PR fix(data): pin canonical port identity so CBP renames cannot move a URL #73. PR fix: retain verified Progreso and Santa Teresa pedestrian routes #145 is now published and functionally verified at source
98db07bb127e8afe20057b4864d7da32650fa2c9: the two existing Progreso 230901 and Santa Teresa 240801 routes survive disappearing pedestrian reports. Capacity does not assert present hours, open lanes or waits. Broader capability curation and GSC remain open. - Next action: Curate the remaining report-dependent ports only from official port-specific/directional capability sources; reconcile GSC indexing through an existing authorized data path separately. Do not infer lack of pedestrian service from a missing report or close this broad issue on the two-port fix.
- Effort: Initial reproduction and bounded two-port correction are complete. Estimate the remaining capability/GSC block after confirming the source set and access.
- Acceptance: Two recorded input identities and real sitemap/prerender differences are saved; the affected pair is stable at 28/28 after the fix. Native served EN/ES desktop/mobile checks cover missing/deleted reports, true zero, closure/recovery, keyboard links and canonicals. Broader indexing definition of done below remains unverified.
- Dependencies: Both reviewed-head CI, final integration (133 unit tests/402 navigations) and existing production run 39852627462 passed. Production entry is 61.88 KiB under unchanged 62 KiB; keep its narrow headroom. Served manifest/assets and both generated pages/sitemap entries were checked at 21:00 UTC. Missing waits stay unavailable; rollback was prepared/checked without applying. Other-port sources and GSC access are still required.
- Evidence: Canonical-slug repair receipt; current roadmap; release-record inventory differences; pre-fix capability predicate; PR #145; production run; served source manifest; released predicate.
Baseline (authenticated Search Console, 2026-08-06)
- 118 indexed URLs.
- 186 not indexed: 117 redirects, 17 legacy 404s, 43 discovered/not indexed, 5 crawled/not indexed, 2 noindex, 2 robots-blocked.
- Sitemap status: Success; last read 2026-08-05; 158 pages discovered.
- Current local build emits 178 sitemap URLs.
- 71 HTTPS URLs, zero HTTPS issues.
- 70 valid breadcrumb items and 71 valid Dataset items, zero invalid.
- 71 mobile URLs are Good in Core Web Vitals; zero poor or needs-improvement URLs.
Several 404 examples now return 200 or canonical 301s, so Search Console needs evidence-based reconciliation rather than blanket URL creation.
Scope
- Crawl every URL in the generated sitemap and every alias/redirect inventory entry.
- Verify status, final URL, self-canonical, language/hreflang, indexability, and exactly one intended canonical.
- Classify each Search Console 404 as fixed alias, intentional removal, or real defect.
- Fix only real defects; do not revive spam/obsolete paths.
- Submit/validate the corrected groups in Search Console and record the baseline date.
- Investigate why the 43 newly discovered URLs have not been crawled, starting with the broken
/best-time/hub and internal-link reachability.
Definition of done
- Automated crawl report has zero accidental canonical 404s, loops, or conflicting canonicals.
- Sitemap count matches the canonical route inventory.
- Fixed 404 groups are submitted for validation.
- Discovered/crawled-not-indexed URLs have a documented keep/improve/remove decision.
- Recheck is scheduled after Google has had time to recrawl.
Parent roadmap: #56
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
sbc1-code commentedon Aug 20, 2026
Root cause removed, shipped 2026-08-20 in #73. This issue can now be scoped down to the GSC reconciliation pass.
The reason sitemap URLs and indexed URLs kept diverging was not a sitemap generation bug. CBP intermittently substitutes a different row for the same physical crossing (different
port_numberANDport_name), and slugs were derived from names, so a crossing's URL moved on its own. Verified across 200 committed snapshots: the pairs are mutually exclusive, 0 co-occurrence.Measured before the fix: 9 distinct slug maps across 200 snapshots, 12 unstable ports,
/crossing/paso-del-norte/serving a hard 404 while the sitemap advertisedel-paso-paso-del-norte-pdn, and ~22% of deploys failing.After: 1 distinct slug map across all 200 snapshots. Slugs are pinned per port in
BASE_OVERRIDES, sobaseSlug(name)is now only a fallback for genuinely new ports. Three previously-unpatched aliases were added and all resolve 200 in production.Remaining work for this issue: a GSC pass to retire the stale indexed URLs and confirm the 42 canonical crossing pages are the ones indexed.