{"record":{"id":"3e474af194ad9cb3","repo":"remix-run/react-router","slug":"paths-with-dynamic-splat-params-cannot-be-prere","errorCode":null,"errorMessage":"⚠️ Paths with dynamic/splat params cannot be prerendered when using `prerender: true`. You may want to use the `prerender()` API to prerender the following paths:","messagePattern":"⚠️ Paths with dynamic/splat params cannot be prerendered when using `prerender: true`\\. You may want to use the `prerender\\(\\)` API to prerender the following paths:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/react-router-dev/vite/plugin.ts","lineNumber":3016,"sourceCode":"\n  let pathsConfig: PrerenderPaths;\n\n  if (typeof prerender === \"object\" && \"paths\" in prerender) {\n    pathsConfig = prerender.paths;\n  } else {\n    pathsConfig = prerender;\n  }\n\n  if (pathsConfig === false) {\n    return [];\n  }\n\n  let prerenderRoutes = createPrerenderRoutes(routes);\n\n  if (pathsConfig === true) {\n    let { paths, paramRoutes } = getStaticPrerenderPaths(prerenderRoutes);\n    if (logWarning && !ssr && paramRoutes.length > 0) {\n      console.warn(\n        colors.yellow(\n          [\n            \"⚠️ Paths with dynamic/splat params cannot be prerendered when \" +\n              \"using `prerender: true`. You may want to use the `prerender()` \" +\n              \"API to prerender the following paths:\",\n            ...paramRoutes.map((p) => \"  - \" + p),\n          ].join(\"\\n\"),\n        ),\n      );\n    }\n    return paths;\n  }\n\n  if (typeof pathsConfig === \"function\") {\n    let paths = await pathsConfig({\n      getStaticPaths: () => getStaticPrerenderPaths(prerenderRoutes).paths,\n    });\n    return paths;","sourceCodeStart":2998,"sourceCodeEnd":3034,"githubUrl":"https://github.com/remix-run/react-router/blob/6beaca39526d5716c3c112ebb0782765baa5a9ce/packages/react-router-dev/vite/plugin.ts#L2998-L3034","documentation":"When `prerender: true`, getStaticPrerenderPaths can only enumerate static path segments; routes containing :dynamic params or splats (*) need concrete values that don't exist at build time, so those paths are skipped. This warning (only when logWarning && !ssr, i.e., SPA/prerender-only output) lists the skipped paramRoutes and points you to the `prerender()` API or explicit path arrays that can supply real values.","triggerScenarios":"`prerender: true` in react-router.config.ts combined with route files like `blog.$slug.tsx`, `products.$id.tsx`, or `files.$.ts`, when building without SSR (SPA mode).","commonSituations":"Blogs, docs sites, and e-commerce catalogs wanting static output for param routes; enabling `prerender: true` as a blanket setting without enumerating slugs.","solutions":["Replace the boolean with the `prerender` function (exported from \"@react-router/dev\") and enumerate concrete paths from your data source (CMS/DB/filesystem glob)","Or supply an explicit array of fully-resolved paths: `prerender: [\"/blog/hello-world\", \"/blog/another\"]`","Or keep `prerender: true` and accept that param routes are simply not prerendered — they 404/CSR at runtime in SPA mode unless covered another way"],"exampleFix":"// before - react-router.config.ts\nexport default { prerender: true } satisfies Config;\n\n// after\nimport { prerender } from \"@react-router/dev\";\nexport default {\n  async prerender({ getStaticPaths }) {\n    let slugs = await getSlugsFromCMS(); // e.g. [\"hello-world\", \"another\"]\n    return slugs.map((s) => `/blog/${s}`);\n  },\n} satisfies Config;","handlingStrategy":"validation","validationCode":"// detect param/splat routes before choosing `prerender: true`\nimport { flatRoutes } from \"@react-router/fs-routes\";\nlet routes = await flatRoutes()();\nlet paramRoutes = routes.filter((r) => /[:*]/.test(r.path ?? \"\"));\nif (paramRoutes.length && !ssr) {\n  console.warn(`Use prerender() with concrete paths for: ${paramRoutes.map((r) => r.path).join(\", \")}`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Default to the `prerender()` function over `prerender: true` whenever routes contain :params or splats","Keep a data-source query (CMS/DB/glob) that can enumerate every concrete path at build time","In SPA mode, review build output for the param-route warning before shipping"],"tags":["prerender","dynamic-params","spa","ssg","build"],"backgroundTag":"prerender-dynamic-params","analyzedSha":"6beaca39526d5716c3c112ebb0782765baa5a9ce","analyzedAt":"2026-08-18T18:04:14.938Z","contentChangedAt":"2026-08-18T18:04:14.938Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}