{"record":{"id":"745f14427c4e5b7d","repo":"vercel/next.js","slug":"unstable-redirect-has-been-renamed-to-redirect-pl","errorCode":null,"errorMessage":"unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${pathname}","messagePattern":"unstable_redirect has been renamed to redirect, please update the field to continue\\. Page: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/next/src/server/render.tsx","lineNumber":1157,"sourceCode":"    if (data == null) {\n      throw new Error(GSSP_NO_RETURNED_VALUE)\n    }\n\n    if ((data as any).props instanceof Promise) {\n      deferredContent = true\n    }\n\n    const invalidKeys = Object.keys(data).filter(\n      (key) => key !== 'props' && key !== 'redirect' && key !== 'notFound'\n    )\n\n    if ((data as any).unstable_notFound) {\n      throw new Error(\n        `unstable_notFound has been renamed to notFound, please update the field to continue. Page: ${pathname}`\n      )\n    }\n    if ((data as any).unstable_redirect) {\n      throw new Error(\n        `unstable_redirect has been renamed to redirect, please update the field to continue. Page: ${pathname}`\n      )\n    }\n\n    if (invalidKeys.length) {\n      throw new Error(invalidKeysMsg('getServerSideProps', invalidKeys))\n    }\n\n    if ('notFound' in data && data.notFound) {\n      if (pathname === '/404') {\n        throw new Error(\n          `The /404 page can not return notFound in \"getStaticProps\", please remove it to continue!`\n        )\n      }\n\n      metadata.isNotFound = true\n      return new RenderResult(null, {\n        metadata,","sourceCodeStart":1139,"sourceCodeEnd":1175,"githubUrl":"https://github.com/vercel/next.js/blob/89d017eac43ebf4742ed2b58d3c1373b70283b69/packages/next/src/server/render.tsx#L1139-L1175","documentation":"Migration guard in renderToHTMLImpl's getServerSideProps result validation: the returned object contains the legacy unstable_redirect key, renamed to redirect. The validator rejects the old key so the renamed API is used instead.","triggerScenarios":"Thrown at packages/next/src/server/render.tsx:1159 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rename the returned field `unstable_redirect` to `redirect` in the data function for the page."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"89d017eac43ebf4742ed2b58d3c1373b70283b69","analyzedAt":"2026-08-19T02:10:13.922Z","contentChangedAt":"2026-08-19T02:10:13.922Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}