{"record":{"id":"ee3ea767daee384e","repo":"quasarframework/quasar","slug":"ignored-route-dynamic-param-fullpath","errorCode":null,"errorMessage":"Ignored route (dynamic param): ${fullPath}","messagePattern":"Ignored route \\(dynamic param\\): (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"app-vite/lib/modes/ssg/ssg-builder.js","lineNumber":161,"sourceCode":"\n        if (route.children) {\n          parseVueRouterRoutes({\n            routes: route.children,\n            parentPath: fullPath,\n            opts\n          })\n        }\n\n        continue\n      }\n\n      if (routePath.includes(':')) {\n        const dynamicMap = opts.routesDynamicParamsMap[fullPath]\n        if (dynamicMap === void 0) {\n          opts.acc.ignoredDynamicParamSsgPages.push(ssgPage)\n\n          if (opts.verbose) {\n            warn(\n              `Ignored route (dynamic param): ${fullPath}`,\n              'parseVueRouterRoutes()'\n            )\n          }\n        } else {\n          opts.dynamicRoutesMatched.push(fullPath)\n\n          /**\n           * Reuse the vue-router path parser so param substitution has\n           * the exact router.resolve() semantics (optional, repeatable\n           * and custom regex params, special chars in values).\n           */\n          const [routeParser] = createRouterMatcher(\n            [{ path: fullPath, component: {} }],\n            {}\n          ).getRoutes()\n\n          const paramNames = new Set(","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/ssg/ssg-builder.js#L143-L179","documentation":"Verbose-only log from parseVueRouterRoutes when a route path contains a dynamic param (':') and no entry exists in opts.routesDynamicParamsMap for that fullPath. Since no concrete values were supplied for the param, the route is pushed to acc.ignoredDynamicParamSsgPages and skipped. Informational; requires opts.verbose.","triggerScenarios":"SSG build with verbose logging when ssg generation encounters a dynamic route (e.g. /user/:id) for which routesDynamicParamsMap provides no values, so no concrete pages can be generated for it.","commonSituations":"Forgetting to supply dynamic route parameter values via the SSG config (shouldGenerate/list of params) in quasar.config; relying solely on crawling when the dynamic pages are not linked from any prerendered page.","solutions":["Provide the parameter values for the dynamic route via the SSG dynamic-params config so concrete pages can be generated.","Ensure the dynamic pages are linked (crawlable) from pages that are prerendered so the crawler can discover them.","If the route should not be prerendered, ignore this message."],"exampleFix":"// before (quasar.config)\nssg: {}\n// after\nssg: {\n  routesDynamicParams: {\n    '/user/:id': ['1', '2', '3']\n  }\n}","handlingStrategy":"validation","validationCode":"// Ensure dynamic params are provided before SSG build\nconst dynamicRoutes = routes.filter((r) => r.path.includes(':')).map((r) => r.path)\nconst provided = Object.keys(ssg.routesDynamicParams || {})\nconst missing = dynamicRoutes.filter((p) => !provided.includes(p))\nif (missing.length) console.warn('No params for:', missing)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always configure routesDynamicParams for routes with ':' params you want prerendered.","Keep dynamic pages linked from prerendered pages so crawling discovers them.","Run verbose builds to catch silently skipped dynamic routes."],"tags":["ssg","routing","verbose","dynamic-routes"],"backgroundTag":"ssg-dynamic-route-skipped","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}