{
  "id": "APP-02",
  "title": "\"Page Not Found\" / \"404: NOT_FOUND\" when you refresh or open a deep link in your deployed React app",
  "error_string": "Page Not Found",
  "also_appears_as": [
    "404: NOT_FOUND",
    "404 on refresh (React Router single-page app)"
  ],
  "platforms": [
    "Netlify",
    "Vercel",
    "Lovable",
    "Bolt",
    "Cursor"
  ],
  "primary_platform": "netlify",
  "versions": {
    "os": "Debian 13 (container)",
    "node": "20.19.2",
    "vite": "8.3.5",
    "react": "19.3.1",
    "react-router-dom": "7.18.4",
    "netlify-cli": "27.14.2 (offline emulator)"
  },
  "last_verified": "2026-10-26",
  "status": "partially-verified",
  "status_label": "Partially verified",
  "ci_status": "pending-ci",
  "ci_results_url": null,
  "retest_due": "2026-11-25",
  "published": "2026-10-30",
  "repro_url": "https://stucktoshipped.com/repros/APP-02/",
  "repro_files_url": "https://stucktoshipped.com/repros/APP-02/index.json",
  "fix_summary": "Your single-page app needs a fallback rule on the host. The full fix gives the exact file and line for Netlify and Cloudflare Pages, the Vercel equivalent, and when NOT to use it.",
  "fix_summary_is_teaser": true,
  "full_fix": {
    "access": "paid",
    "product_id": "full-fix",
    "also_in": [
      "repro-bundle",
      "fix-pass",
      "agent-api"
    ],
    "price_usd": 4,
    "currency": "USD",
    "prices_are_placeholders": true,
    "purchase_status": "not_yet_available",
    "buy_url": "https://stucktoshipped.com/pricing/#full-fix",
    "stripe_payment_link": "TODO",
    "sha256": "03c45d60dc667da8068fed1428fd49735b6c178e16f5724c5a6fa0e4ca56135b",
    "words": 432,
    "code_blocks": 1,
    "sections": [
      "Fix",
      "How to check it worked",
      "What we actually tested (Oct 26, 2026)"
    ]
  },
  "repro_bundle": {
    "access": "paid",
    "product_id": "repro-bundle",
    "price_usd": 9,
    "files": 19,
    "manifest_url": "https://stucktoshipped.com/repros/APP-02/index.json"
  },
  "url": "https://stucktoshipped.com/fixes/netlify/page-not-found-on-refresh/",
  "markdown_url": "https://stucktoshipped.com/fixes/netlify/page-not-found-on-refresh/index.md",
  "json_url": "https://stucktoshipped.com/fixes/netlify/page-not-found-on-refresh/index.json",
  "sources": [
    {
      "title": "Stack Overflow: Netlify renders 404 on page refresh",
      "url": "https://stackoverflow.com/questions/58065603/netlify-renders-404-on-page-refresh-using-react-and-react-router"
    },
    {
      "title": "Stack Overflow: Page Not Found ... deployed on Netlify",
      "url": "https://stackoverflow.com/questions/50752350/page-not-found-when-trying-to-access-a-site-deployed-on-netlify"
    },
    {
      "title": "Stack Overflow: Vercel project 404 on refresh",
      "url": "https://stackoverflow.com/questions/75963788/why-is-my-vercel-project-giving-me-an-error-404-on-refresh"
    },
    {
      "title": "r/lovable: Lovable website shows Page Not Found on Netlify",
      "url": "https://www.reddit.com/r/lovable/comments/1k10ug7/fix_lovable_website_shows_page_not_found_on/"
    },
    {
      "title": "Netlify docs: redirects (file goes in the publish directory)",
      "url": "https://docs.netlify.com/manage/routing/redirects/overview/"
    },
    {
      "title": "Netlify support guide: I've deployed my site but I still see Page not found",
      "url": "https://answers.netlify.com/t/support-guide-i-ve-deployed-my-site-but-i-still-see-page-not-found/125"
    }
  ],
  "indexable": true,
  "reviewed_by_human": null,
  "content_sha256": "95ffeeacc2f8b1d6667b8ff682faee2908bbd81d8cb091ad2dd3c294b91165f0"
}
