gatsbyjs/gatsby · error
<html><body><h1>404</h1><p>Not found</p></body></html>
Error message
<html><body><h1>404</h1><p>Not found</p></body></html>
What it means
engineHandler resolves the request path against the page manifest (honoring PATH_PREFIX); no matching page or page-data route yields this HTML 404 body sent with status 404. It is the SSR engine's terminal response for unknown routes, not an exception.
Source
Thrown at packages/gatsby/src/utils/page-ssr-module/lambda.ts:507
req: GatsbyFunctionRequest,
res: GatsbyFunctionResponse
): Promise<void> {
try {
let pageInfo: IPageInfo | undefined
const originalPathName = req.url ?? ``
if (PATH_PREFIX && originalPathName.startsWith(PATH_PREFIX)) {
const maybePath = originalPathName.slice(PATH_PREFIX.length)
pageInfo = getPage(maybePath)
}
if (!pageInfo) {
pageInfo = getPage(originalPathName)
}
if (!pageInfo) {
res.status(404).send(getErrorBody(404))
return
}
const { pagePath, isPageData, page } = pageInfo
const data = await getData({
pathName: pagePath,
getGraphqlEngine: () =>
memoizedInitializeGraphqlEngine(
req?.rawUrl ? new URL(req.rawUrl).origin : cdnDatastoreOrigin
),
req,
})
if (isPageData) {
const results = await renderPageData({ data })
setStatusAndHeaders({ page, data, res })
res.json(results)View on GitHub (pinned to 8cffb8f412)
Solutions
- Create a page (or 404 page) for the requested route
- Check pathPrefix configuration if routes are missing their prefix
- Verify the routes manifest includes the path
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at packages/gatsby/src/utils/page-ssr-module/lambda.ts:489 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of gatsbyjs/gatsby@8cffb8f412 (2026-08-26).
Data as JSON: /api/errors/a0934eef7dd0b13b.
Report an issue: GitHub.