vercel/next.js · error · Error

Invalid interception route: ${path}. Cannot use (..) marker

Error message

Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.

What it means

extractInterceptionRouteInformation rejects interception route strings that use the (..) marker when the intercepting route is at the root level. (..) means 'match one directory up', but the root has no parent, so the marker can never resolve; Next.js requires (.) (sibling match) at root. Fires during route parsing/validation of app-router interception routes.

Source

Thrown at packages/next/src/shared/lib/router/utils/interception-routes.ts:74

      `Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`
    )
  }

  interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed

  switch (marker) {
    case '(.)':
      // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route
      if (interceptingRoute === '/') {
        interceptedRoute = `/${interceptedRoute}`
      } else {
        interceptedRoute = interceptingRoute + '/' + interceptedRoute
      }
      break
    case '(..)':
      // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route
      if (interceptingRoute === '/') {
        throw new Error(
          `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`
        )
      }
      interceptedRoute = interceptingRoute
        .split('/')
        .slice(0, -1)
        .concat(interceptedRoute)
        .join('/')
      break
    case '(...)':
      // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route
      interceptedRoute = '/' + interceptedRoute
      break
    case '(..)(..)':
      // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route

      const splitInterceptingRoute = interceptingRoute.split('/')
      if (splitInterceptingRoute.length <= 2) {

View on GitHub (pinned to 0eb3775416)

Solutions

  1. Use the (.) marker instead of (..) at the root level.
Defensive patterns

Strategy: validation

When it happens

Trigger: The (..) interception marker is used at the root level.

Common situations: Using (..) at the top of the route tree where (.) should be used instead.


AI-assisted analysis of vercel/next.js@0eb3775416 (2026-08-19). Data as JSON: /api/errors/9ba84a4588494a7b. Report an issue: GitHub.