Skip to content
DocsErrorsCannot access Request information synchronously with Page or Layout or Route `params` or Page `searchParams`

Cannot access Request information synchronously with Page or Layout or Route `params` or Page `searchParams`

Why This Error Occurred

In Next.js 15 params passed into Page and Layout components and searchParams passed into Page components are now Promises.

To support migrating to the async params and searchParams Next.js 15 still supports accessing param and searchParam values directly on the Promise object. However when dynamicIO is enabled it is an error to do so.

Possible Ways to Fix It

If you haven't already followed the Next.js 15 upgrade guide which includes running a codemod to auto-convert to the necessary async form of params and searchParams start there.

Next 15 Upgrade Guide

If you have already run the codemod on your project look for instances of the string @next-codemod-error to see where the codemod was unable to convert to the async form. You will have to refactor your code manually here to make it compatible with the new result type.

Before:

.../some-file.js
// This component ends up being the Page component even though it is defined outside of
// page.js due to how it is reexported in page.js
export default function ComponentThatWillBeExportedAsPage({ params, searchParams }) {
  const { slug } = params;
  const { page } = searchParams
  return <RenderList slug={slug} page={page}>
}
app/page.js
// the codemod cannot find the actual Page component so the Page may still have remaining
// synchronous access to params and searchParams
 
// @next-codemod-error
export * from '.../some-file'

After:

.../some-file.js
// This component ends up being the Page component even though it is defined outside of
// page.js due to how it is reexported in page.js
export default async function ComponentThatWillBeExportedAsPage({ params, searchParams }) {
  const { slug } = await params;
  const { page } = await searchParams
  return <RenderList slug={slug} page={page}>
}
app/page.js
export * from '.../some-file'

It is unexpected that you would run the codemod and not successfully convert all instances of params and searchParams to async or have a marker string to help you locate unconverted cases. If you do find yourself in this situation please report this to Next.js on Github.