feat(frontend): add per-page SEO, 404 page, OG tags, and sitemap updates #4

Merged
starkSV merged 1 commit from feat/seo-improvements into main 2026-05-12 20:40:24 +05:30
starkSV commented 2026-05-12 20:39:34 +05:30 (Migrated from github.com)

Summary

  • Replace react-helmet-async (incompatible with React 19) with React 19's native document metadata hoisting — <title>, <meta>, <link> rendered directly in JSX are auto-hoisted to <head>, no library needed
  • Add per-page <title>, <meta name="description">, <link rel="canonical">, and Open Graph tags to all 6 pages
  • Add JSON-LD SoftwareApplication schema on HomePage and BreadcrumbList on ProductDetailPage
  • Add 404 NotFoundPage with noindex meta
  • Extend index.html with og:site_name, og:image, og:type, and Twitter card tags as static pre-JS fallbacks; remove duplicate static canonical (each page sets its own)
  • Update sitemap.xml with product IDs 3321 and 3324 and <lastmod> dates
  • Add product screenshots to README

Test plan

  • Navigate between all routes — browser tab title updates correctly on each page
  • Check DevTools → Elements → <head> on /products and /product/3113 — correct <title>, <meta name="description">, and <link rel="canonical"> per page
  • Visit a non-existent product ID — 404 page shown, noindex in head
  • Share a product URL — OG preview uses page-specific title/description

Summary by CodeRabbit

  • Documentation

    • Added screenshots section to README with four thumbnail images showcasing homepage, releases, product details, and download links.
  • New Features

    • Implemented dedicated 404 error page with navigation back to home.
  • Chores

    • Enhanced social media metadata with Open Graph and Twitter card tags.
    • Added JSON-LD structured data across pages.
    • Updated sitemap with modification dates and new product URLs.

Review Change Stack

## Summary - Replace `react-helmet-async` (incompatible with React 19) with React 19's native document metadata hoisting — `<title>`, `<meta>`, `<link>` rendered directly in JSX are auto-hoisted to `<head>`, no library needed - Add per-page `<title>`, `<meta name="description">`, `<link rel="canonical">`, and Open Graph tags to all 6 pages - Add JSON-LD `SoftwareApplication` schema on HomePage and `BreadcrumbList` on ProductDetailPage - Add 404 `NotFoundPage` with `noindex` meta - Extend `index.html` with `og:site_name`, `og:image`, `og:type`, and Twitter card tags as static pre-JS fallbacks; remove duplicate static canonical (each page sets its own) - Update `sitemap.xml` with product IDs 3321 and 3324 and `<lastmod>` dates - Add product screenshots to README ## Test plan - [x] Navigate between all routes — browser tab title updates correctly on each page - [x] Check DevTools → Elements → `<head>` on `/products` and `/product/3113` — correct `<title>`, `<meta name="description">`, and `<link rel="canonical">` per page - [x] Visit a non-existent product ID — 404 page shown, `noindex` in head - [x] Share a product URL — OG preview uses page-specific title/description <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added screenshots section to README with four thumbnail images showcasing homepage, releases, product details, and download links. * **New Features** * Implemented dedicated 404 error page with navigation back to home. * **Chores** * Enhanced social media metadata with Open Graph and Twitter card tags. * Added JSON-LD structured data across pages. * Updated sitemap with modification dates and new product URLs. [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/starkSV/windows-iso-downloader/pull/4) <!-- end of auto-generated comment: release notes by coderabbit.ai -->
coderabbitai[bot] commented 2026-05-12 20:40:29 +05:30 (Migrated from github.com)

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2b331dbe-911e-4856-845a-76a0c472fc44

📥 Commits

Reviewing files that changed from the base of the PR and between d0a70496da and 86da27cb8c.

Files ignored due to path filters (5)
  • frontend/public/og-image.png is excluded by !**/*.png
  • frontend/public/screenshots/msdl-1.jpg is excluded by !**/*.jpg
  • frontend/public/screenshots/msdl-2.jpg is excluded by !**/*.jpg
  • frontend/public/screenshots/msdl-3.jpg is excluded by !**/*.jpg
  • frontend/public/screenshots/msdl-4.jpg is excluded by !**/*.jpg
📒 Files selected for processing (11)
  • README.md
  • frontend/index.html
  • frontend/public/sitemap.xml
  • frontend/src/App.tsx
  • frontend/src/pages/AboutPage.tsx
  • frontend/src/pages/DisclaimerPage.tsx
  • frontend/src/pages/HomePage.tsx
  • frontend/src/pages/NotFoundPage.tsx
  • frontend/src/pages/PrivacyPolicyPage.tsx
  • frontend/src/pages/ProductDetailPage.tsx
  • frontend/src/pages/ProductsPage.tsx

📝 Walkthrough

Walkthrough

The PR migrates document metadata management from imperative useEffect-based DOM updates to declarative JSX-rendered head elements across all page components. Static SEO assets are updated, 404 handling is extracted into a dedicated component, and all page components adopt a consistent pattern for rendering title, description, canonical, and OpenGraph metadata inline.

Changes

SEO Metadata and Head Tag Architecture

Layer / File(s) Summary
Static SEO assets and metadata
README.md, frontend/index.html, frontend/public/sitemap.xml
README adds dedicated Screenshots section with four thumbnail images; sitemap.xml gains lastmod timestamps for static pages and product URLs, with two new product entries; index.html <head> expands with Open Graph (og:site_name, og:url, og:image) and Twitter card tags.
404 routing and NotFoundPage
frontend/src/App.tsx, frontend/src/pages/NotFoundPage.tsx
App.tsx routing delegates catch-all paths to a new NotFoundPage component instead of inline 404 JSX; NotFoundPage renders 404 UI with document metadata and home navigation link, scrolling to top on mount.
HomePage head tag refactor with JSON-LD
frontend/src/pages/HomePage.tsx
HomePage introduces SITE_URL constant and SoftwareApplication JSON-LD schema; useEffect removes title/meta DOM updates while retaining data fetch; component now renders inline <title>, description meta, canonical link, OpenGraph tags, and JSON-LD <script> before existing hero and content sections.
Simple page head tags (About, Disclaimer, Privacy)
frontend/src/pages/AboutPage.tsx, frontend/src/pages/DisclaimerPage.tsx, frontend/src/pages/PrivacyPolicyPage.tsx
All three pages follow the same pattern: replace useEffect title/meta updates with SITE_URL constant and render inline head elements (title, description, canonical, OpenGraph) in a fragment alongside existing animated content.
Product page head tags (Products and ProductDetail)
frontend/src/pages/ProductsPage.tsx, frontend/src/pages/ProductDetailPage.tsx
ProductsPage adds SITE_URL and inline head rendering, removes useEffect title/meta side effects, and updates header text. ProductDetailPage derives dynamic SEO values (pageTitle, pageDescription, canonicalUrl, breadcrumbJsonLd) from component state, removes direct DOM updates from fetch effect, renders conditional breadcrumb JSON-LD and noindex robots meta for not-found states, and adds aria-hidden="true" to WinLogo.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 A page's breath now flows through JSX,
No useEffect shadows flickering in flux,
Metadata declared where markup lives,
Four pages dance, one pattern gives!
And 404 finds its own cozy nest. 🏠

Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/seo-improvements

Comment @coderabbitai help to get the list of available commands and usage tips.

<!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- This is an auto-generated comment: failure by coderabbit.ai --> > [!CAUTION] > ## Review failed > > The pull request is closed. <!-- end of auto-generated comment: failure by coderabbit.ai --> <details> <summary>ℹ️ Recent review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro Plus **Run ID**: `2b331dbe-911e-4856-845a-76a0c472fc44` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between d0a70496da63e230e4b7fb1faa638a1b8baf42e8 and 86da27cb8ceed8f19ce59745238e812b43feeb45. </details> <details> <summary>⛔ Files ignored due to path filters (5)</summary> * `frontend/public/og-image.png` is excluded by `!**/*.png` * `frontend/public/screenshots/msdl-1.jpg` is excluded by `!**/*.jpg` * `frontend/public/screenshots/msdl-2.jpg` is excluded by `!**/*.jpg` * `frontend/public/screenshots/msdl-3.jpg` is excluded by `!**/*.jpg` * `frontend/public/screenshots/msdl-4.jpg` is excluded by `!**/*.jpg` </details> <details> <summary>📒 Files selected for processing (11)</summary> * `README.md` * `frontend/index.html` * `frontend/public/sitemap.xml` * `frontend/src/App.tsx` * `frontend/src/pages/AboutPage.tsx` * `frontend/src/pages/DisclaimerPage.tsx` * `frontend/src/pages/HomePage.tsx` * `frontend/src/pages/NotFoundPage.tsx` * `frontend/src/pages/PrivacyPolicyPage.tsx` * `frontend/src/pages/ProductDetailPage.tsx` * `frontend/src/pages/ProductsPage.tsx` </details> </details> --- <!-- walkthrough_start --> <details> <summary>📝 Walkthrough</summary> ## Walkthrough The PR migrates document metadata management from imperative `useEffect`-based DOM updates to declarative JSX-rendered head elements across all page components. Static SEO assets are updated, 404 handling is extracted into a dedicated component, and all page components adopt a consistent pattern for rendering title, description, canonical, and OpenGraph metadata inline. ## Changes **SEO Metadata and Head Tag Architecture** | Layer / File(s) | Summary | |---|---| | **Static SEO assets and metadata** <br> `README.md`, `frontend/index.html`, `frontend/public/sitemap.xml` | README adds dedicated Screenshots section with four thumbnail images; sitemap.xml gains `lastmod` timestamps for static pages and product URLs, with two new product entries; index.html `<head>` expands with Open Graph (`og:site_name`, `og:url`, `og:image`) and Twitter card tags. | | **404 routing and NotFoundPage** <br> `frontend/src/App.tsx`, `frontend/src/pages/NotFoundPage.tsx` | App.tsx routing delegates catch-all paths to a new `NotFoundPage` component instead of inline 404 JSX; NotFoundPage renders 404 UI with document metadata and home navigation link, scrolling to top on mount. | | **HomePage head tag refactor with JSON-LD** <br> `frontend/src/pages/HomePage.tsx` | HomePage introduces `SITE_URL` constant and SoftwareApplication JSON-LD schema; useEffect removes title/meta DOM updates while retaining data fetch; component now renders inline `<title>`, description meta, canonical link, OpenGraph tags, and JSON-LD `<script>` before existing hero and content sections. | | **Simple page head tags (About, Disclaimer, Privacy)** <br> `frontend/src/pages/AboutPage.tsx`, `frontend/src/pages/DisclaimerPage.tsx`, `frontend/src/pages/PrivacyPolicyPage.tsx` | All three pages follow the same pattern: replace `useEffect` title/meta updates with `SITE_URL` constant and render inline head elements (title, description, canonical, OpenGraph) in a fragment alongside existing animated content. | | **Product page head tags (Products and ProductDetail)** <br> `frontend/src/pages/ProductsPage.tsx`, `frontend/src/pages/ProductDetailPage.tsx` | ProductsPage adds `SITE_URL` and inline head rendering, removes useEffect title/meta side effects, and updates header text. ProductDetailPage derives dynamic SEO values (`pageTitle`, `pageDescription`, `canonicalUrl`, `breadcrumbJsonLd`) from component state, removes direct DOM updates from fetch effect, renders conditional breadcrumb JSON-LD and noindex robots meta for not-found states, and adds `aria-hidden="true"` to WinLogo. | ## Estimated code review effort 🎯 3 (Moderate) | ⏱️ ~25 minutes ## Poem > 🐰 *A page's breath now flows through JSX,* > *No useEffect shadows flickering in flux,* > *Metadata declared where markup lives,* > *Four pages dance, one pattern gives!* > *And 404 finds its own cozy nest.* 🏠 </details> <!-- walkthrough_end --> <!-- finishing_touch_checkbox_start --> <details> <summary>✨ Finishing Touches</summary> <details> <summary>📝 Generate docstrings</summary> - [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> Create stacked PR - [ ] <!-- {"checkboxId": "3e1879ae-f29b-4d0d-8e06-d12b7ba33d98"} --> Commit on current branch </details> <details> <summary>🧪 Generate unit tests (beta)</summary> - [ ] <!-- {"checkboxId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Create PR with unit tests - [ ] <!-- {"checkboxId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Commit unit tests in branch `feat/seo-improvements` </details> </details> <!-- finishing_touch_checkbox_end --> <!-- tips_start --> --- <sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub> <!-- tips_end --> <!-- internal state start --> <!-- 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 --> <!-- internal state end -->
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: shekhar/windows-iso-downloader#4
No description provided.