diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts
index 967d7103a58d6..a372f49a336ed 100644
--- a/packages/next/server/dev/next-dev-server.ts
+++ b/packages/next/server/dev/next-dev-server.ts
@@ -1226,7 +1226,9 @@ export default class DevServer extends Server {
         res
           .body(
             JSON.stringify({
-              pages: this.sortedRoutes,
+              pages: this.sortedRoutes?.filter(
+                (route) => !this.appPathRoutes![route]
+              ),
             })
           )
           .send()
diff --git a/test/e2e/app-dir/app/app/dynamic-pages-route-app-overlap/app-dir/page.js b/test/e2e/app-dir/app/app/dynamic-pages-route-app-overlap/app-dir/page.js
new file mode 100644
index 0000000000000..2b529331402f7
--- /dev/null
+++ b/test/e2e/app-dir/app/app/dynamic-pages-route-app-overlap/app-dir/page.js
@@ -0,0 +1,7 @@
+export default function Page() {
+  return (
+    <p id="app-text">
+      hello from app/dynamic-pages-route-app-overlap/app-dir/page
+    </p>
+  )
+}
diff --git a/test/e2e/app-dir/app/pages/dynamic-pages-route-app-overlap.js b/test/e2e/app-dir/app/pages/dynamic-pages-route-app-overlap.js
new file mode 100644
index 0000000000000..725caae598137
--- /dev/null
+++ b/test/e2e/app-dir/app/pages/dynamic-pages-route-app-overlap.js
@@ -0,0 +1,9 @@
+import Link from 'next/link'
+
+export default function Page() {
+  return (
+    <Link id="pages-link" href="/dynamic-pages-route-app-overlap/app-dir">
+      To /dynamic-pages-route-app-overlap/app-dir
+    </Link>
+  )
+}
diff --git a/test/e2e/app-dir/app/pages/dynamic-pages-route-app-overlap/[slug].js b/test/e2e/app-dir/app/pages/dynamic-pages-route-app-overlap/[slug].js
new file mode 100644
index 0000000000000..80f7029a0281e
--- /dev/null
+++ b/test/e2e/app-dir/app/pages/dynamic-pages-route-app-overlap/[slug].js
@@ -0,0 +1,7 @@
+export default function Page() {
+  return (
+    <p id="pages-text">
+      hello from pages/dynamic-pages-route-app-overlap/[slug]
+    </p>
+  )
+}
diff --git a/test/e2e/app-dir/index.test.ts b/test/e2e/app-dir/index.test.ts
index 5b0a2e34d72d2..af5fa3044f754 100644
--- a/test/e2e/app-dir/index.test.ts
+++ b/test/e2e/app-dir/index.test.ts
@@ -601,6 +601,29 @@ describe('app dir', () => {
           await browser.close()
         }
       })
+
+      it('should navigate to pages dynamic route from pages page if it overlaps with an app page', async () => {
+        const browser = await webdriver(
+          next.url,
+          '/dynamic-pages-route-app-overlap'
+        )
+
+        try {
+          // Click the link.
+          await browser.elementById('pages-link').click()
+          expect(await browser.waitForElementByCss('#pages-text').text()).toBe(
+            'hello from pages/dynamic-pages-route-app-overlap/[slug]'
+          )
+
+          // When refreshing the browser, the app page should be rendered
+          await browser.refresh()
+          expect(await browser.waitForElementByCss('#app-text').text()).toBe(
+            'hello from app/dynamic-pages-route-app-overlap/app-dir/page'
+          )
+        } finally {
+          await browser.close()
+        }
+      })
     })
 
     describe('server components', () => {