diff --git a/docs/src/components/Test.astro b/docs/src/components/Test.astro
new file mode 100644
index 00000000000..5d3bcaf7a17
--- /dev/null
+++ b/docs/src/components/Test.astro
@@ -0,0 +1,7 @@
+
I am purple
+
+
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index 985a7e61a15..fb6a2f47b6e 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -28,6 +28,10 @@ hero:
link: https://github.com/withastro/starlight
---
+import Test from '../../components/Test.astro';
+
+
+
import { CardGrid, Card } from '@astrojs/starlight/components';
import AboutAstro from '~/components/about-astro.astro';
import TestimonialGrid from '~/components/testimonial-grid.astro';
diff --git a/docs/src/pages/[...dog].astro b/docs/src/pages/[...dog].astro
new file mode 100644
index 00000000000..b7c79b64c24
--- /dev/null
+++ b/docs/src/pages/[...dog].astro
@@ -0,0 +1,36 @@
+---
+import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
+
+/**
+ * Two conditions must be met for the issue to occur:
+ *
+ * - Use a rest parameter for the route
+ * - Render ``
+ */
+
+export function getStaticPaths() {
+ return [
+ { params: { dog: 'clifford' } },
+ { params: { dog: 'rover' } },
+ { params: { dog: 'spot' } },
+ ];
+}
+---
+
+
+ This is a custom page
+
+
+
+
+
diff --git a/packages/starlight/routes/common.astro b/packages/starlight/routes/common.astro
index b96ef3fba4c..396f6c8ced0 100644
--- a/packages/starlight/routes/common.astro
+++ b/packages/starlight/routes/common.astro
@@ -1,6 +1,6 @@
---
import Page from '../components/Page.astro';
-import { useRouteData } from '../utils/routing/data';
+import { useRouteData } from '../utils/routing/use-data';
import { attachRouteDataAndRunMiddleware } from '../utils/routing/middleware';
await attachRouteDataAndRunMiddleware(Astro, await useRouteData(Astro));
diff --git a/packages/starlight/utils/routing/data.ts b/packages/starlight/utils/routing/data.ts
index 302532d98e5..350d1d71040 100644
--- a/packages/starlight/utils/routing/data.ts
+++ b/packages/starlight/utils/routing/data.ts
@@ -117,7 +117,7 @@ export function getSiteTitleHref(locale: string | undefined): string {
}
/** Generate a route object for Starlight’s 404 page. */
-async function get404Route(locals: App.Locals): Promise {
+export async function get404Route(locals: App.Locals): Promise {
const { lang = BuiltInDefaultLocale.lang, dir = BuiltInDefaultLocale.dir } =
config.defaultLocale || {};
let locale = config.defaultLocale?.locale;
diff --git a/packages/starlight/utils/routing/use-data.ts b/packages/starlight/utils/routing/use-data.ts
new file mode 100644
index 00000000000..5964f16f5f3
--- /dev/null
+++ b/packages/starlight/utils/routing/use-data.ts
@@ -0,0 +1,14 @@
+import type { APIContext } from 'astro';
+import { getRouteBySlugParam } from '../routing';
+import type { StarlightRouteData } from './types';
+import { render } from 'astro:content';
+import { generateRouteData, get404Route } from './data';
+
+export async function useRouteData(context: APIContext): Promise {
+ const route =
+ ('slug' in context.params && getRouteBySlugParam(context.params.slug)) ||
+ (await get404Route(context.locals));
+ const { Content, headings } = await render(route.entry);
+ const routeData = generateRouteData({ props: { ...route, headings }, url: context.url });
+ return { ...routeData, Content };
+}