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

  1. Create a page (or 404 page) for the requested route
  2. Check pathPrefix configuration if routes are missing their prefix
  3. 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.