{"record":{"id":"2708c808b57619b4","repo":"quasarframework/quasar","slug":"failed-to-render-ssg-page-for-getssgpageidentifi-2708c8","errorCode":null,"errorMessage":"Failed to render SSG page for ${getSsgPageIdentifier(ssgPage)}. Retrying in ${ssgRendererRetryDelay}ms... (${retryCount}/${ssgRendererRetryCount})","messagePattern":"Failed to render SSG page for (.+?)\\. Retrying in (.+?)ms\\.\\.\\. \\((.+?)/(.+?)\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"app-vite/lib/modes/ssg/ssg-builder.js","lineNumber":621,"sourceCode":"            !isNoPreloadMatcher?.(ssgPage.route)\n          )\n\n          if (typeof ssgPage.transformHtml === 'function') {\n            const result = await ssgPage.transformHtml(html)\n            if (typeof result === 'string') html = result\n          }\n\n          break\n        } catch (err) {\n          if (\n            err?.routeNotFound !== true &&\n            err?.redirectUrl === void 0 &&\n            retryCount < ssgRendererRetryCount\n          ) {\n            retryCount++\n\n            if (onSsgRendererError !== 'ignore') {\n              warn(\n                `Failed to render SSG page for ${getSsgPageIdentifier(ssgPage)}.` +\n                  ` Retrying in ${ssgRendererRetryDelay}ms...` +\n                  ` (${retryCount}/${ssgRendererRetryCount})`\n              )\n            }\n\n            await new Promise(resolve => {\n              setTimeout(resolve, ssgRendererRetryDelay)\n            })\n\n            continue\n          }\n\n          if (err?.routeNotFound) {\n            await handleError({\n              err,\n              reason:\n                ssgPage.route === synthetic404Route","sourceCodeStart":603,"sourceCodeEnd":639,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/ssg/ssg-builder.js#L603-L639","documentation":"Warning from renderPage during SSG builds when a page render fails but is retryable (err?.redirectUrl is undefined and retryCount < ssgRendererRetryCount). The page will be retried after ssgRendererRetryDelay ms; the message shows the attempt count out of the configured maximum. Suppressed when onSsgRendererError is 'ignore'.","triggerScenarios":"A transient renderer failure (e.g. renderer process crash, timeout, navigation error) while prerendering an ssgPage, with retries still available and onSsgRendererError not 'ignore'.","commonSituations":"Slow pages exceeding renderer timeouts under heavy parallel rendering; flaky external data fetches during prerender; resource exhaustion (memory/CPU) on CI machines running many concurrent page renders.","solutions":["Usually self-resolves via retry — check whether the final build succeeds and whether this page ultimately rendered.","If retries exhaust, increase ssgRendererRetryCount / ssgRendererRetryDelay in quasar.config ssg options.","Reduce renderer concurrency to lower resource pressure on the machine.","Fix the underlying flakiness (timeouts, failing external calls) indicated by the accompanying render error."],"exampleFix":"// before (quasar.config)\nssg: {}\n// after\nssg: {\n  ssgRendererRetryCount: 5,\n  ssgRendererRetryDelay: 2000\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  await renderPage(ssgPage)\n} catch (err) {\n  if (err?.redirectUrl === undefined && attempts < maxRetries) {\n    await new Promise((r) => setTimeout(r, retryDelay))\n    return renderPage(ssgPage)\n  }\n  throw err\n}","preventionTips":["Configure adequate ssgRendererRetryCount and ssgRendererRetryDelay.","Reduce renderer concurrency on resource-constrained CI machines.","Eliminate flaky external calls during prerender (mock or cache data fetches).","Verify final build output actually contains retried pages."],"tags":["ssg","retry","renderer","build"],"backgroundTag":"ssg-render-retry","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}