Skip to content

Build the legacy URL, link, fragment, asset, and SEO manifest crawler #34

Description

@alexeygrigorev

Parent epic: #3

Normative spec: 02 — URL/link/SEO compatibility

Scope

Create a deterministic, versioned inventory tool that combines committed generated sites and a production crawl for main/docs/FAQ/Podwiki/current course platform. Record source path, public/status/redirect/canonical, metadata, headings, language/robots, structured data, fragments, links/forms/assets, main-content fingerprint, and sitemap/lastmod state. Classify each row preserve/redirect/retire with reviewable exceptions.

Non-goals

Do not implement Django replacement pages, modify production, follow unsafe arbitrary networks, or auto-approve differences.

Acceptance criteria

  • Inventory covers all generated/public paths and machine contracts in the spec, including query/filter/fragment samples and course HTML/API routes.
  • Crawl is bounded, repeatable, respectful, records provenance/timestamp/tool version, and redacts credentials/PII.
  • Source-vs-production differences are surfaced rather than overwritten.
  • Classification rejects homepage catch-alls and requires owner/reason/test for redirect or 410.
  • Manifest format is stable, diffable, schema-validated, and consumable by later tests/Lambda generation.

Test scenarios

  1. Fixture site covers redirect chain/loop, soft 404, Unicode/percent case, trailing slash, relative links, fragments, JSON, forms, assets, canonicals, JSON-LD, robots/sitemap, and external query strings.
  2. Interrupted/repeated crawl is deterministic and cannot escape allowlisted hosts.
  3. Removing a known route/fragment/asset or changing a canonical produces an actionable diff.

No product Playwright UI is added; use browser/network crawl tooling only where server-rendered output requires it.

Dependencies

Depends on #1. #16 is not a prerequisite for baseline capture; it supplies consumer owner/auth/volume/migration inputs required before approving legacy-course-host redirects or Lambda activation. Blocks all parity adapter exit gates.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Must-have or release-blockingseoArea: seotestingArea: testing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions