## ADDED Requirements ### Requirement: Indexable pages The site MUST provide indexable HTML pages for: - home (`/`) - videos (`/videos`) - podcast (`/podcast`) - about (`/about`) These pages MUST be server-rendered or statically generated HTML suitable for search engine crawling (not client-rendered only). The deployed static server MUST serve these pages successfully for both trailing-slash and non-trailing-slash requests when a directory-based `index.html` exists (for example, `/videos` and `/videos/` MUST both resolve to the videos page). #### Scenario: Crawling the home page - **WHEN** a crawler requests `/` - **THEN** the server returns an HTML document containing the homepage content modules and metadata #### Scenario: Direct request without trailing slash - **WHEN** a user requests `/videos` (no trailing slash) - **THEN** the server returns the videos page HTML and does not respond with 404 #### Scenario: Direct request with trailing slash - **WHEN** a user requests `/videos/` (with trailing slash) - **THEN** the server returns the videos page HTML and does not respond with 404 ### Requirement: Metadata and canonical URLs Each indexable page MUST define: - a document title - a meta description - a canonical URL #### Scenario: Page metadata is present - **WHEN** a crawler requests `/videos` - **THEN** the HTML contains a ``, a meta description, and a canonical URL for `/videos` ### Requirement: Social sharing cards The site MUST provide Open Graph and Twitter card metadata for indexable pages so shared links render a preview. #### Scenario: Sharing the home page - **WHEN** a social crawler requests `/` - **THEN** the response includes Open Graph and Twitter card tags with a title, description, and image when available ### Requirement: Sitemap and robots The site MUST provide: - `sitemap-index.xml` enumerating indexable pages (and/or referencing sitemap shards) - `robots.txt` that allows indexing of indexable pages The sitemap MUST include the blog surface routes: - `/blog` - blog post detail routes - blog page detail routes - blog category listing routes `robots.txt` MUST reference the sitemap using an absolute URL for the production domain. #### Scenario: Sitemap index is available - **WHEN** a crawler requests `/sitemap-index.xml` - **THEN** the server returns an XML sitemap index (or sitemap) listing `/`, `/videos`, `/podcast`, `/about`, and `/blog` #### Scenario: Blog URLs appear in sitemap - **WHEN** WordPress content is available in the cache at build time - **THEN** the generated sitemap includes the blog detail URLs for those items #### Scenario: Robots references sitemap with absolute URL - **WHEN** a crawler requests `/robots.txt` - **THEN** the response contains a `Sitemap:` line with an absolute URL to `/sitemap-index.xml` ### Requirement: Structured data The site MUST support structured data (JSON-LD) for Video and Podcast content when detail pages exist, and MUST ensure the JSON-LD is valid JSON. #### Scenario: Video structured data present - **WHEN** a video detail page exists and is requested - **THEN** the HTML includes JSON-LD describing the video using a recognized schema type ### Requirement: Organization and website structured data The home page SHOULD include JSON-LD structured data for the site and its owner/organization. If present, the JSON-LD MUST be valid JSON and MUST use a recognized schema type. #### Scenario: Home page includes valid JSON-LD - **WHEN** a crawler requests `/` - **THEN** the HTML contains a JSON-LD script tag that parses as valid JSON