Skip to content

Commit 65eeebb

Browse files
committed
fix(shell-docs): route /unselected/* to /built-in-agent/* not /
The next.config redirects() block runs at Next.js routing time (before middleware), so it preempts the seo-redirects.ts catalog rules. The existing catch-all dropped users at the framework-agnostic root tree (/agentic-chat-ui, /frontend-tools, etc.) instead of the BIA-scoped equivalent (/built-in-agent/...), diffusing SEO equity from legacy /unselected/ URLs. Changes: - /unselected (root): destination /built-in-agent (was /) - /unselected/:path* catch-all: destination /built-in-agent/:path* (was /:path*) - Add 14 explicit slug-rename entries above the catch-all, mirroring SUBPATH_RENAMES in seo-redirects.ts (S1-S15 minus S13). Verified against Phase 4 redirect probe — closes 13 of 22 unselected/ failures.
1 parent 0510470 commit 65eeebb

1 file changed

Lines changed: 87 additions & 11 deletions

File tree

showcase/shell-docs/next.config.ts

Lines changed: 87 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ const nextConfig: NextConfig = {
106106
permanent: true,
107107
},
108108

109-
// /unselected/* tree retired. Most files were either canonical at
110-
// root or duplicated content from `integrations/built-in-agent/`.
111-
// Per-path redirects below handle the BIA-canonical mappings; the
112-
// catch-all at the bottom funnels everything else to root (where
113-
// either the canonical version now lives or the soft-default
114-
// serves the right framework view).
115-
{ source: "/unselected", destination: "/", permanent: true },
109+
// /unselected/* tree retired. Files moved to integrations/built-in-agent/
110+
// (BIA replaced the old "unselected" slot as the default integration).
111+
// Per-path entries below cover BIA-canonical mappings (direct moves +
112+
// slug renames from SUBPATH_RENAMES in seo-redirects.ts); the catch-all
113+
// at the bottom routes everything else into /built-in-agent/ to preserve
114+
// SEO equity, since these legacy URLs historically served BIA content.
115+
{ source: "/unselected", destination: "/built-in-agent", permanent: true },
116116
{
117117
source: "/unselected/quickstart",
118118
destination: "/built-in-agent/quickstart",
@@ -219,12 +219,88 @@ const nextConfig: NextConfig = {
219219
destination: "/",
220220
permanent: true,
221221
},
222-
// Catch-all: any remaining /unselected/* path lands on its
223-
// canonical root equivalent (Cat A files: coding-agents,
224-
// custom-look-and-feel/*, frontend-tools, etc.).
222+
// Slug-rename entries (mirror SUBPATH_RENAMES in seo-redirects.ts).
223+
// These MUST come before the catch-all so the rename wins. Each
224+
// historical slug under /unselected/ has been renamed under
225+
// /built-in-agent/; e.g. agentic-chat-ui → prebuilt-components.
226+
{
227+
source: "/unselected/agentic-chat-ui",
228+
destination: "/built-in-agent/prebuilt-components",
229+
permanent: true,
230+
},
231+
{
232+
source: "/unselected/use-agent-hook",
233+
destination: "/built-in-agent/programmatic-control",
234+
permanent: true,
235+
},
236+
{
237+
source: "/unselected/frontend-actions",
238+
destination: "/built-in-agent/frontend-tools",
239+
permanent: true,
240+
},
241+
{
242+
source: "/unselected/vibe-coding-mcp",
243+
destination: "/built-in-agent/coding-agents",
244+
permanent: true,
245+
},
246+
{
247+
source: "/unselected/generative-ui/agentic",
248+
destination:
249+
"/built-in-agent/generative-ui/your-components/display-only",
250+
permanent: true,
251+
},
252+
{
253+
source: "/unselected/generative-ui/backend-tools",
254+
destination: "/built-in-agent/generative-ui/tool-rendering",
255+
permanent: true,
256+
},
257+
{
258+
source: "/unselected/generative-ui/frontend-tools",
259+
destination: "/built-in-agent/frontend-tools",
260+
permanent: true,
261+
},
262+
{
263+
source: "/unselected/generative-ui/render-only",
264+
destination:
265+
"/built-in-agent/generative-ui/your-components/display-only",
266+
permanent: true,
267+
},
268+
{
269+
source: "/unselected/generative-ui/tool-based",
270+
destination: "/built-in-agent/generative-ui/tool-rendering",
271+
permanent: true,
272+
},
273+
{
274+
source: "/unselected/custom-look-and-feel/bring-your-own-components",
275+
destination: "/built-in-agent/custom-look-and-feel/slots",
276+
permanent: true,
277+
},
278+
{
279+
source: "/unselected/custom-look-and-feel/customize-built-in-ui-components",
280+
destination: "/built-in-agent/custom-look-and-feel/slots",
281+
permanent: true,
282+
},
283+
{
284+
source: "/unselected/custom-look-and-feel/markdown-rendering",
285+
destination: "/built-in-agent/custom-look-and-feel/slots",
286+
permanent: true,
287+
},
288+
{
289+
source: "/unselected/guide",
290+
destination: "/built-in-agent/guides",
291+
permanent: true,
292+
},
293+
{
294+
source: "/unselected/mcp",
295+
destination: "/built-in-agent/coding-agents",
296+
permanent: true,
297+
},
298+
// Catch-all: route remaining /unselected/* paths into /built-in-agent/.
299+
// BIA is the canonical owner of the legacy unselected/ content tree;
300+
// matches P1×unselected in seo-redirects.ts.
225301
{
226302
source: "/unselected/:path*",
227-
destination: "/:path*",
303+
destination: "/built-in-agent/:path*",
228304
permanent: true,
229305
},
230306

0 commit comments

Comments
 (0)