From 35e23b914f56a34f7bd610c437c9ca6674dbd467 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 00:28:51 +0000 Subject: [PATCH] Add discoverability redirects for guessable URL patterns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add redirects for ~130 URL patterns that currently return 404 but are logically guessable by users and crawlers: - SDK language shorthand: /learn/sdks//... → /learn/sdks/generators//... - .NET/dotnet aliases → csharp generator paths - SDK top-level shortcuts: /learn/sdks/quickstart, introduction, etc. - API definition shorthand: /learn/openapi/... → /learn/api-definitions/openapi/... - CLI shorthand: /learn/cli/... → /learn/cli-api-reference/cli-reference/... - Docs top-level shortcuts for components, features, auth, config, etc. - Docs integration shortcuts: /learn/docs/posthog → analytics/posthog Co-Authored-By: Niels Swimberghe <3382717+Swimburger@users.noreply.github.com> --- fern/docs.yml | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) diff --git a/fern/docs.yml b/fern/docs.yml index a7d3295520..83944cbfb6 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -831,3 +831,205 @@ redirects: destination: /learn/cli-api-reference/cli-reference/overview - source: /learn/cli-reference/path/to/file.pdf destination: /learn/cli-api-reference/cli-reference/overview + + # ============================================================================ + # DISCOVERABILITY REDIRECTS — guessable URL patterns that return 404 + # ============================================================================ + + # --- SDK language shorthand paths (skip /generators/ segment) --- + # Users/crawlers guess /learn/sdks//... instead of /learn/sdks/generators//... + - source: /learn/sdks/typescript/:slug* + destination: /learn/sdks/generators/typescript/:slug* + - source: /learn/sdks/python/:slug* + destination: /learn/sdks/generators/python/:slug* + - source: /learn/sdks/go/:slug* + destination: /learn/sdks/generators/go/:slug* + - source: /learn/sdks/java/:slug* + destination: /learn/sdks/generators/java/:slug* + - source: /learn/sdks/csharp/:slug* + destination: /learn/sdks/generators/csharp/:slug* + - source: /learn/sdks/php/:slug* + destination: /learn/sdks/generators/php/:slug* + - source: /learn/sdks/ruby/:slug* + destination: /learn/sdks/generators/ruby/:slug* + - source: /learn/sdks/swift/:slug* + destination: /learn/sdks/generators/swift/:slug* + - source: /learn/sdks/rust/:slug* + destination: /learn/sdks/generators/rust/:slug* + - source: /learn/sdks/postman/:slug* + destination: /learn/sdks/generators/postman/:slug* + + # .NET / dotnet aliases → csharp + - source: /learn/sdks/net/:slug* + destination: /learn/sdks/generators/csharp/:slug* + - source: /learn/sdks/dotnet/:slug* + destination: /learn/sdks/generators/csharp/:slug* + - source: /learn/sdks/generators/net/:slug* + destination: /learn/sdks/generators/csharp/:slug* + - source: /learn/sdks/generators/dotnet/:slug* + destination: /learn/sdks/generators/csharp/:slug* + + # --- SDK top-level shorthand paths --- + - source: /learn/sdks/quickstart + destination: /learn/sdks/overview/quickstart + - source: /learn/sdks/introduction + destination: /learn/sdks/overview/introduction + - source: /learn/sdks/how-it-works + destination: /learn/sdks/overview/how-it-works + - source: /learn/sdks/custom-code + destination: /learn/sdks/overview/custom-code + - source: /learn/sdks/project-structure + destination: /learn/sdks/overview/project-structure + - source: /learn/sdks/autorelease + destination: /learn/sdks/overview/autorelease + - source: /learn/sdks/configuration + destination: /learn/sdks/reference/generators-yml + - source: /learn/sdks/changelog + destination: /learn/sdks/generators/typescript/changelog + + # --- API definition shorthand paths (skip /api-definitions/ segment) --- + # Users/crawlers guess /learn/openapi/... instead of /learn/api-definitions/openapi/... + - source: /learn/openapi/:slug* + destination: /learn/api-definitions/openapi/:slug* + - source: /learn/asyncapi/:slug* + destination: /learn/api-definitions/asyncapi/:slug* + - source: /learn/openrpc/:slug* + destination: /learn/api-definitions/openrpc/:slug* + - source: /learn/grpc/:slug* + destination: /learn/api-definitions/grpc/:slug* + + # --- CLI shorthand paths --- + - source: /learn/cli/overview + destination: /learn/cli-api-reference/cli-reference/overview + - source: /learn/cli/commands + destination: /learn/cli-api-reference/cli-reference/commands + - source: /learn/cli/options + destination: /learn/cli-api-reference/cli-reference/options + - source: /learn/cli/changelog + destination: /learn/cli-api-reference/cli-reference/changelog + - source: /learn/cli/:slug* + destination: /learn/cli-api-reference/cli-reference/:slug* + + # --- Docs top-level shorthand paths --- + - source: /learn/docs/overview + destination: /learn/docs/getting-started/overview + - source: /learn/docs/quickstart + destination: /learn/docs/getting-started/quickstart + - source: /learn/docs/project-structure + destination: /learn/docs/getting-started/project-structure + - source: /learn/docs/navigation + destination: /learn/docs/configuration/navigation + - source: /learn/docs/components + destination: /learn/docs/writing-content/components/overview + - source: /learn/docs/markdown + destination: /learn/docs/writing-content/markdown-basics + - source: /learn/docs/api-reference + destination: /learn/docs/api-references/generate-api-ref + + # --- Docs component shorthand paths --- + - source: /learn/docs/components/accordions + destination: /learn/docs/writing-content/components/accordions + - source: /learn/docs/components/cards + destination: /learn/docs/writing-content/components/cards + - source: /learn/docs/components/callouts + destination: /learn/docs/writing-content/components/callouts + - source: /learn/docs/components/code-blocks + destination: /learn/docs/writing-content/components/code-blocks + - source: /learn/docs/components/steps + destination: /learn/docs/writing-content/components/steps + - source: /learn/docs/components/tables + destination: /learn/docs/writing-content/components/tables + - source: /learn/docs/components/badges + destination: /learn/docs/writing-content/components/badges + - source: /learn/docs/components/frames + destination: /learn/docs/writing-content/components/frames + - source: /learn/docs/components/icons + destination: /learn/docs/writing-content/components/icons + - source: /learn/docs/components/tooltips + destination: /learn/docs/writing-content/components/tooltips + - source: /learn/docs/components/:slug* + destination: /learn/docs/writing-content/components/:slug* + + # --- Docs feature shorthand paths --- + - source: /learn/docs/ask-fern + destination: /learn/docs/ai-features/ask-fern/overview + - source: /learn/docs/llms-txt + destination: /learn/docs/ai-features/llms-txt + - source: /learn/docs/writer + destination: /learn/docs/ai-features/fern-writer + - source: /learn/docs/fern-writer + destination: /learn/docs/ai-features/fern-writer + - source: /learn/docs/ai-examples + destination: /learn/docs/ai-features/ai-examples + + # --- Docs authentication shorthand paths --- + - source: /learn/docs/password-protection + destination: /learn/docs/authentication/setup/password-protection + - source: /learn/docs/sso + destination: /learn/docs/authentication/setup/sso + - source: /learn/docs/jwt + destination: /learn/docs/authentication/setup/jwt + - source: /learn/docs/oauth + destination: /learn/docs/authentication/setup/oauth + - source: /learn/docs/rbac + destination: /learn/docs/authentication/features/rbac + + # --- Docs API reference shorthand paths --- + - source: /learn/docs/api-explorer + destination: /learn/docs/api-references/api-explorer + - source: /learn/docs/sdk-snippets + destination: /learn/docs/api-references/sdk-snippets + + # --- Docs customization shorthand paths --- + - source: /learn/docs/custom-css + destination: /learn/docs/customization/custom-css-js + - source: /learn/docs/custom-react-components + destination: /learn/docs/customization/custom-react-components + - source: /learn/docs/announcement-banner + destination: /learn/docs/customization/announcement-banner + - source: /learn/docs/hiding-content + destination: /learn/docs/customization/hiding-content + - source: /learn/docs/search + destination: /learn/docs/customization/search + - source: /learn/docs/frontmatter + destination: /learn/docs/configuration/page-level-settings + + # --- Docs preview & publish shorthand paths --- + - source: /learn/docs/domain + destination: /learn/docs/preview-publish/setting-up-your-domain + - source: /learn/docs/publishing + destination: /learn/docs/preview-publish/publishing-your-docs + - source: /learn/docs/preview + destination: /learn/docs/preview-publish/preview-changes + + # --- Docs SEO shorthand paths --- + - source: /learn/docs/redirects + destination: /learn/docs/seo/redirects + - source: /learn/docs/slugs + destination: /learn/docs/seo/configuring-slugs + + # --- Docs configuration shorthand paths --- + - source: /learn/docs/versions + destination: /learn/docs/configuration/versions + - source: /learn/docs/products + destination: /learn/docs/configuration/products + - source: /learn/docs/tabs + destination: /learn/docs/configuration/tabs + - source: /learn/docs/changelogs + destination: /learn/docs/configuration/changelogs + - source: /learn/docs/reusable-snippets + destination: /learn/docs/writing-content/reusable-snippets + + # --- Docs integration shorthand paths --- + - source: /learn/docs/intercom + destination: /learn/docs/integrations/support/intercom + - source: /learn/docs/google-analytics + destination: /learn/docs/integrations/analytics/google + - source: /learn/docs/posthog + destination: /learn/docs/integrations/analytics/posthog + - source: /learn/docs/segment + destination: /learn/docs/integrations/analytics/segment + - source: /learn/docs/fullstory + destination: /learn/docs/integrations/analytics/fullstory + - source: /learn/docs/mixpanel + destination: /learn/docs/integrations/analytics/mixpanel