diff --git a/app/assets/javascripts/clusters_list/components/clusters_empty_state.vue b/app/assets/javascripts/clusters_list/components/clusters_empty_state.vue
index d7631a49a27ac696521d4d57e57c85dc31aedd1b..d30d913daa35deac4f3fb2d664f187c75c7248d4 100644
--- a/app/assets/javascripts/clusters_list/components/clusters_empty_state.vue
+++ b/app/assets/javascripts/clusters_list/components/clusters_empty_state.vue
@@ -14,7 +14,7 @@ export default {
     PromoPageLink,
   },
   inject: ['emptyStateHelpText', 'clustersEmptyStateImage'],
-  clustersHelpUrl: helpPagePath('user/infrastructure/clusters/index', {
+  clustersHelpUrl: helpPagePath('user/infrastructure/clusters/_index', {
     anchor: 'certificate-based-kubernetes-integration-deprecated',
   }),
   blogPostPath: 'blog/2021/11/15/deprecating-the-cert-based-kubernetes-integration/',
diff --git a/app/assets/javascripts/organizations/new/components/app.vue b/app/assets/javascripts/organizations/new/components/app.vue
index a9141478022e91f754209f113371df32e446b439..200f3d22321fb44e7a3ae7ccc2a51e8c02361cc3 100644
--- a/app/assets/javascripts/organizations/new/components/app.vue
+++ b/app/assets/javascripts/organizations/new/components/app.vue
@@ -28,7 +28,7 @@ export default {
   },
   computed: {
     organizationsHelpPagePath() {
-      return helpPagePath('user/organization/index');
+      return helpPagePath('user/organization/_index');
     },
   },
   methods: {
diff --git a/app/assets/javascripts/organizations/settings/general/components/visibility_level.vue b/app/assets/javascripts/organizations/settings/general/components/visibility_level.vue
index 8faeeb312d4b69071658987e9fafe7980b76fa11..2cf9bf74cf18b96e4a40366c2f70a23612c21fc8 100644
--- a/app/assets/javascripts/organizations/settings/general/components/visibility_level.vue
+++ b/app/assets/javascripts/organizations/settings/general/components/visibility_level.vue
@@ -56,7 +56,7 @@ export default {
           <template #group(visibilityLevel)-label-description>
             {{ $options.fields.visibilityLevel.labelDescription }}
             <help-page-link
-              href="user/organization/index"
+              href="user/organization/_index"
               anchor="view-an-organizations-visibility-level"
               >{{ $options.i18n.learnMore }}</help-page-link
             >.
diff --git a/app/assets/javascripts/organizations/shared/components/new_edit_form.vue b/app/assets/javascripts/organizations/shared/components/new_edit_form.vue
index 61258da56a27654dfe10cf1fe4554d265fcfc840..746ca663890eb2936cfa5b63913b53f4104d28b8 100644
--- a/app/assets/javascripts/organizations/shared/components/new_edit_form.vue
+++ b/app/assets/javascripts/organizations/shared/components/new_edit_form.vue
@@ -44,7 +44,7 @@ export default {
     charactersOverLimit: (char) => n__('%d character over limit', '%d characters over limit', char),
   },
   formId: 'organization-form',
-  markdownDocsPath: helpPagePath('user/organization/index', {
+  markdownDocsPath: helpPagePath('user/organization/_index', {
     anchor: 'supported-markdown-for-organization-description',
   }),
   restrictedToolBarItems: RESTRICTED_TOOLBAR_ITEMS_BASIC_EDITING_ONLY,
@@ -263,7 +263,7 @@ export default {
       <template #group(visibilityLevel)-label-description>
         {{ fields.visibilityLevel.labelDescription.text }}
         <help-page-link
-          href="user/organization/index"
+          href="user/organization/_index"
           anchor="view-an-organizations-visibility-level"
           >{{ fields.visibilityLevel.labelDescription.linkText }}</help-page-link
         >.
diff --git a/app/assets/javascripts/super_sidebar/components/organization_switcher.vue b/app/assets/javascripts/super_sidebar/components/organization_switcher.vue
index dc993527357f7fb5a61a143ff28366dbb8f38e07..e5699f4e438513e5fea4e756f4079fb1e367d962 100644
--- a/app/assets/javascripts/super_sidebar/components/organization_switcher.vue
+++ b/app/assets/javascripts/super_sidebar/components/organization_switcher.vue
@@ -26,7 +26,7 @@ export default {
     ),
     learnMore: __('Learn more'),
   },
-  switchingOrganizationsDocsPath: helpPagePath('user/organization/index.md', {
+  switchingOrganizationsDocsPath: helpPagePath('user/organization/_index.md', {
     anchor: 'switch-organizations',
   }),
   components: { GlDisclosureDropdown, GlAvatar, GlIcon, GlLoadingIcon, GlLink },
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index e3e3d3ebce0a32e2534327bfd96942847beed7cc..35be9f648a78d667e380c5a97ab57a08a3f4c3dc 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -475,7 +475,7 @@ def project_permissions_panel_data(project)
       environmentsHelpPath: help_page_path('ci/environments/_index.md'),
       featureFlagsHelpPath: help_page_path('operations/feature_flags.md'),
       releasesHelpPath: help_page_path('user/project/releases/index.md'),
-      infrastructureHelpPath: help_page_path('user/infrastructure/index.md')
+      infrastructureHelpPath: help_page_path('user/infrastructure/_index.md')
     }
   end
 
diff --git a/app/presenters/instance_clusterable_presenter.rb b/app/presenters/instance_clusterable_presenter.rb
index d081b819bc74753b358010498fbd854fe00ab3af..9c3ef0762457c38f7b8d6b37e0a6c009098dad6c 100644
--- a/app/presenters/instance_clusterable_presenter.rb
+++ b/app/presenters/instance_clusterable_presenter.rb
@@ -60,7 +60,7 @@ def sidebar_text
 
   override :learn_more_link
   def learn_more_link
-    ApplicationController.helpers.link_to(s_('ClusterIntegration|Learn more about instance Kubernetes clusters'), help_page_path('user/instance/clusters/index.md'), target: '_blank', rel: 'noopener noreferrer')
+    ApplicationController.helpers.link_to(s_('ClusterIntegration|Learn more about instance Kubernetes clusters'), help_page_path('user/instance/clusters/_index.md'), target: '_blank', rel: 'noopener noreferrer')
   end
 end
 
diff --git a/app/views/clusters/clusters/show.html.haml b/app/views/clusters/clusters/show.html.haml
index 89ffa44bf2cc4d1f247391ebf3d45fc9342adc53..e7567d305e5127bd40378cb722b8a3ec6ca1ba19 100644
--- a/app/views/clusters/clusters/show.html.haml
+++ b/app/views/clusters/clusters/show.html.haml
@@ -12,7 +12,7 @@
   cluster_status: @cluster.status_name,
   cluster_status_reason: @cluster.status_reason,
   provider_type: @cluster.provider_type,
-  help_path: help_page_path('user/infrastructure/clusters/index.md'),
+  help_path: help_page_path('user/infrastructure/clusters/_index.md'),
   environments_help_path: help_page_path('ci/environments/_index.md', anchor: 'create-a-static-environment'),
   clusters_help_path: help_page_path('user/project/clusters/deploy_to_cluster.md'),
   deploy_boards_help_path: help_page_path('user/project/deploy_boards.md', anchor: 'enabling-deploy-boards'),
diff --git a/doc/administration/backup_restore/troubleshooting_backup_gitlab.md b/doc/administration/backup_restore/troubleshooting_backup_gitlab.md
index 2c62a3f7d26d648123a66685874a22945d7f9d8b..67e363faffb701609540b9f114d1f9bec15e75f3 100644
--- a/doc/administration/backup_restore/troubleshooting_backup_gitlab.md
+++ b/doc/administration/backup_restore/troubleshooting_backup_gitlab.md
@@ -17,7 +17,7 @@ that contain required, sensitive information. If the key is lost, GitLab can't
 decrypt those columns, preventing access to the following items:
 
 - [CI/CD variables](../../ci/variables/_index.md)
-- [Kubernetes / GCP integration](../../user/infrastructure/clusters/index.md)
+- [Kubernetes / GCP integration](../../user/infrastructure/clusters/_index.md)
 - [Custom Pages domains](../../user/project/pages/custom_domains_ssl_tls_certification/index.md)
 - [Project error tracking](../../operations/error_tracking.md)
 - [Runner authentication](../../ci/runners/_index.md)
diff --git a/doc/administration/integration/terminal.md b/doc/administration/integration/terminal.md
index f40cc32cbd3a5fbd5b8b278d84e904701661aa6c..68b57040cd445443b0f54358d48a46244774ea85 100644
--- a/doc/administration/integration/terminal.md
+++ b/doc/administration/integration/terminal.md
@@ -22,7 +22,7 @@ On GitLab Self-Managed, by default this feature is not available. To make it ava
 
 ---
 
-With the introduction of the [Kubernetes integration](../../user/infrastructure/clusters/index.md),
+With the introduction of the [Kubernetes integration](../../user/infrastructure/clusters/_index.md),
 GitLab can store and use credentials for a Kubernetes cluster.
 GitLab uses these credentials to provide access to
 [web terminals](../../ci/environments/_index.md#web-terminals-deprecated) for environments.
diff --git a/doc/administration/terraform_state.md b/doc/administration/terraform_state.md
index 6bb43e0cc9aa76e3ea6bb6b06408196bdfbb3bb8..442f4c4f999b1325f176d6d8c27e7d4d69fc3337 100644
--- a/doc/administration/terraform_state.md
+++ b/doc/administration/terraform_state.md
@@ -9,7 +9,7 @@ DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
 
-GitLab can be used as a backend for [Terraform](../user/infrastructure/index.md) state
+GitLab can be used as a backend for [Terraform](../user/infrastructure/_index.md) state
 files. The files are encrypted before being stored. This feature is enabled by default.
 
 The storage location of these files defaults to:
diff --git a/doc/api/bulk_imports.md b/doc/api/bulk_imports.md
index 74e3dd1c3d08d7aedc9e20be0c25379ceba402cc..4a45830e6b822a09228eb8d20790c1bc88d379fc 100644
--- a/doc/api/bulk_imports.md
+++ b/doc/api/bulk_imports.md
@@ -46,7 +46,7 @@ POST /bulk_imports
 | `entities[source_full_path]`      | String | yes      | Source full path of the entity to import. For example, `gitlab-org/gitlab`. |
 | `entities[destination_slug]`      | String | yes      | Destination slug for the entity. GitLab uses the slug as the URL path to the entity. The name of the imported entity is copied from the name of the source entity and not the slug. |
 | `entities[destination_name]`      | String | no       | Deprecated: Use `destination_slug` instead. Destination slug for the entity. |
-| `entities[destination_namespace]` | String | yes      | Full path of the destination group [namespace](../user/namespace/index.md) for the entity. Must be an existing group in the destination instance. |
+| `entities[destination_namespace]` | String | yes      | Full path of the destination group [namespace](../user/namespace/_index.md) for the entity. Must be an existing group in the destination instance. |
 | `entities[migrate_projects]`      | Boolean | no      | Also import all nested projects of the group (if `source_type` is `group_entity`). Defaults to `true`. |
 | `entities[migrate_memberships]`   | Boolean | no      | Import user memberships. Defaults to `true`. |
 
diff --git a/doc/api/group_clusters.md b/doc/api/group_clusters.md
index efa255d4f34d811af1ed51a079e140c92e9b0317..dedbaaa1fbdce49598e3647b0283513a328250f1 100644
--- a/doc/api/group_clusters.md
+++ b/doc/api/group_clusters.md
@@ -13,7 +13,7 @@ WARNING:
 This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5.
 
 Similarly to [project-level](../user/project/clusters/index.md) and
-[instance-level](../user/instance/clusters/index.md) Kubernetes clusters,
+[instance-level](../user/instance/clusters/_index.md) Kubernetes clusters,
 group-level Kubernetes clusters allow you to connect a Kubernetes cluster to
 your group, enabling you to use the same cluster across multiple projects.
 
diff --git a/doc/api/instance_clusters.md b/doc/api/instance_clusters.md
index 6cb17e1b019f761b25c36adf170d71aaee910b3a..2ac0122dc6f66f287c072cc98661e72870059cd9 100644
--- a/doc/api/instance_clusters.md
+++ b/doc/api/instance_clusters.md
@@ -12,7 +12,7 @@ DETAILS:
 WARNING:
 This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5.
 
-With [instance-level Kubernetes clusters](../user/instance/clusters/index.md),
+With [instance-level Kubernetes clusters](../user/instance/clusters/_index.md),
 you can connect a Kubernetes cluster to the GitLab instance and use the same cluster across all of
 the projects within your instance.
 
diff --git a/doc/api/namespaces.md b/doc/api/namespaces.md
index 677b75df20158c1a6fe3355945c1683f5ed41153..ae3a11e59a097c5f148647dd8906176c21a7b7a8 100644
--- a/doc/api/namespaces.md
+++ b/doc/api/namespaces.md
@@ -9,7 +9,7 @@ DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
 
-Use this API to interact with namespaces, a special resource category used to organize users and groups. For more information, see [Namespaces](../user/namespace/index.md).
+Use this API to interact with namespaces, a special resource category used to organize users and groups. For more information, see [Namespaces](../user/namespace/_index.md).
 
 This API uses [Pagination](rest/_index.md#pagination) to filter results.
 
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 5accaaf0382a81520642e3a63334737b4c0aa3c9..eb6ce16cc11b65ef700bba72c81c7e3daeb641cb 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -1466,7 +1466,7 @@ settings with access control options can be one of:
 | `environments_access_level`            | string | No       | Set visibility of [environments](../ci/environments/_index.md). |
 | `feature_flags_access_level`           | string | No       | Set visibility of [feature flags](../operations/feature_flags.md). |
 | `forking_access_level`                 | string | No       | Set visibility of [forks](../user/project/repository/forking_workflow.md). |
-| `infrastructure_access_level`          | string | No       | Set visibility of [infrastructure management](../user/infrastructure/index.md). |
+| `infrastructure_access_level`          | string | No       | Set visibility of [infrastructure management](../user/infrastructure/_index.md). |
 | `issues_access_level`                  | string | No       | Set visibility of [issues](../user/project/issues/index.md). |
 | `merge_requests_access_level`          | string | No       | Set visibility of [merge requests](../user/project/merge_requests/_index.md). |
 | `model_experiments_access_level`       | string | No       | Set visibility of [machine learning model experiments](../user/project/ml/experiment_tracking/index.md). |
@@ -1589,7 +1589,7 @@ settings with access control options can be one of:
 | `environments_access_level`            | string | No       | Set visibility of [environments](../ci/environments/_index.md). |
 | `feature_flags_access_level`           | string | No       | Set visibility of [feature flags](../operations/feature_flags.md). |
 | `forking_access_level`                 | string | No       | Set visibility of [forks](../user/project/repository/forking_workflow.md). |
-| `infrastructure_access_level`          | string | No       | Set visibility of [infrastructure management](../user/infrastructure/index.md). |
+| `infrastructure_access_level`          | string | No       | Set visibility of [infrastructure management](../user/infrastructure/_index.md). |
 | `issues_access_level`                  | string | No       | Set visibility of [issues](../user/project/issues/index.md). |
 | `merge_requests_access_level`          | string | No       | Set visibility of [merge requests](../user/project/merge_requests/_index.md). |
 | `model_experiments_access_level`       | string | No       | Set visibility of [machine learning model experiments](../user/project/ml/experiment_tracking/index.md). |
@@ -1727,7 +1727,7 @@ Supported project visibility attributes:
 | `environments_access_level`            | string | No       | Set visibility of [environments](../ci/environments/_index.md). |
 | `feature_flags_access_level`           | string | No       | Set visibility of [feature flags](../operations/feature_flags.md). |
 | `forking_access_level`                 | string | No       | Set visibility of [forks](../user/project/repository/forking_workflow.md). |
-| `infrastructure_access_level`          | string | No       | Set visibility of [infrastructure management](../user/infrastructure/index.md). |
+| `infrastructure_access_level`          | string | No       | Set visibility of [infrastructure management](../user/infrastructure/_index.md). |
 | `issues_access_level`                  | string | No       | Set visibility of [issues](../user/project/issues/index.md). |
 | `merge_requests_access_level`          | string | No       | Set visibility of [merge requests](../user/project/merge_requests/_index.md). |
 | `model_experiments_access_level`       | string | No       | Set visibility of [machine learning model experiments](../user/project/ml/experiment_tracking/index.md). |
diff --git a/doc/ci/environments/_index.md b/doc/ci/environments/_index.md
index 449d84dd6ca6babf12b3582cabb9996d0045884a..e8a1cfe752ab5307947ab21eb7434ad444433218 100644
--- a/doc/ci/environments/_index.md
+++ b/doc/ci/environments/_index.md
@@ -821,7 +821,7 @@ WARNING:
 This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5.
 
 If you deploy to your environments with the help of a deployment service (for example,
-the [Kubernetes integration](../../user/infrastructure/clusters/index.md)), GitLab can open
+the [Kubernetes integration](../../user/infrastructure/clusters/_index.md)), GitLab can open
 a terminal session to your environment. You can then debug issues without leaving your web browser.
 
 The Web terminal is a container-based deployment, which often lack basic tools (like an editor),
diff --git a/doc/ci/environments/configure_kubernetes_deployments.md b/doc/ci/environments/configure_kubernetes_deployments.md
index b94ba149412c6ae159c894d3c8f662ba0b0a4017..07cac7fa04e7c083512a2aa01d94157624c96891 100644
--- a/doc/ci/environments/configure_kubernetes_deployments.md
+++ b/doc/ci/environments/configure_kubernetes_deployments.md
@@ -12,7 +12,7 @@ DETAILS:
 WARNING:
 This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5.
 
-If you are deploying to a [Kubernetes cluster](../../user/infrastructure/clusters/index.md)
+If you are deploying to a [Kubernetes cluster](../../user/infrastructure/clusters/_index.md)
 associated with your project, you can configure these deployments from your
 `.gitlab-ci.yml` file.
 
diff --git a/doc/ci/environments/deployments.md b/doc/ci/environments/deployments.md
index c107d2dd548839cb2eed5f12ea6fb4d3b873db60..d0cc9574a4d80dff3a963e5973846c6cf0c1c6d3 100644
--- a/doc/ci/environments/deployments.md
+++ b/doc/ci/environments/deployments.md
@@ -18,7 +18,7 @@ GitLab:
 - Tracks your deployments, so you always know what is deployed on your
   servers.
 
-If you have a deployment service like [Kubernetes](../../user/infrastructure/clusters/index.md)
+If you have a deployment service like [Kubernetes](../../user/infrastructure/clusters/_index.md)
 associated with your project, you can use it to assist with your deployments.
 
 After a deployment is created, you can roll it out to users.
diff --git a/doc/ci/environments/environments_dashboard.md b/doc/ci/environments/environments_dashboard.md
index 4e391769b44d5cb5d9a3c6852c51daff4c432239..4820b2792fbe75f3ca73dfb5b24429846b556eea 100644
--- a/doc/ci/environments/environments_dashboard.md
+++ b/doc/ci/environments/environments_dashboard.md
@@ -44,7 +44,7 @@ To add a project to the dashboard:
 Once added, you can see a summary of each project's environment operational
 health, including the latest commit, pipeline status, and deployment time.
 
-The Environments and [Operations](../../user/operations_dashboard/index.md)
+The Environments and [Operations](../../user/operations_dashboard/_index.md)
 dashboards share the same list of projects. When you add or remove a
 project from one, GitLab adds or removes the project from the other.
 
diff --git a/doc/ci/jobs/ci_job_token.md b/doc/ci/jobs/ci_job_token.md
index cb19cd6ce6ec91b154b2390d12af62618aadb03a..91bcf03fe3c7751686c583618aecde7f6f5c0c4e 100644
--- a/doc/ci/jobs/ci_job_token.md
+++ b/doc/ci/jobs/ci_job_token.md
@@ -48,7 +48,7 @@ The CI/CD job token can only access the following features and API endpoints:
 | [Releases API](../../api/releases/_index.md)                                                           | `GET` requests are public by default. |
 | [Repositories API](../../api/repositories.md#generate-changelog-data)                                 | Generates changelog data based on commits in a repository. |
 | [Secure files](../secure_files/_index.md#use-secure-files-in-cicd-jobs)                                | The `download-secure-files` tool authenticates with a CI/CD job token by default. |
-| [Terraform plan](../../user/infrastructure/index.md)                                                  |         |
+| [Terraform plan](../../user/infrastructure/_index.md)                                                  |         |
 
 Other API endpoints are not accessible using a job token. There is [a proposal](https://gitlab.com/groups/gitlab-org/-/epics/3559)
 to redesign the feature for more granular control of access permissions.
diff --git a/doc/ci/pipelines/compute_minutes.md b/doc/ci/pipelines/compute_minutes.md
index 8fc844bc5b2581eea56d61498e83bc51b3b6cdd3..dbfced340e1cb92d25a1083b6dd0b5a9652ca3d0 100644
--- a/doc/ci/pipelines/compute_minutes.md
+++ b/doc/ci/pipelines/compute_minutes.md
@@ -24,7 +24,7 @@ On GitLab.com:
 
 - Compute quotas are enabled for all projects, but certain
   projects [consume compute minutes at a slower rate](#cost-factor).
-- The base monthly compute quota for a GitLab.com [namespace](../../user/namespace/index.md)
+- The base monthly compute quota for a GitLab.com [namespace](../../user/namespace/_index.md)
   is determined by its [license tier](https://about.gitlab.com/pricing/).
 - You can [purchase additional compute minutes](../../subscriptions/gitlab_com/compute_minutes.md)
   if you need more than the amount of compute in your monthly quota.
diff --git a/doc/development/database/namespaces_storage_statistics.md b/doc/development/database/namespaces_storage_statistics.md
index 6d6ca85849f3971842cf9a55df19f047dd448b28..50afaef86778e0daea945d59cdf06b8092700693 100644
--- a/doc/development/database/namespaces_storage_statistics.md
+++ b/doc/development/database/namespaces_storage_statistics.md
@@ -13,7 +13,7 @@ storage consumed by a group, and allow easy management.
 
 ## Proposal
 
-1. Create a new ActiveRecord model to hold the namespaces' statistics in an aggregated form (only for root [namespaces](../../user/namespace/index.md)).
+1. Create a new ActiveRecord model to hold the namespaces' statistics in an aggregated form (only for root [namespaces](../../user/namespace/_index.md)).
 1. Refresh the statistics in this model every time a project belonging to this namespace is changed.
 
 ## Problem
diff --git a/doc/development/kubernetes.md b/doc/development/kubernetes.md
index 445f68287aa35ac286574bf264af1def728c1fd5..2d9d0d05c69fe38a83f198f2485e9525d8b879a5 100644
--- a/doc/development/kubernetes.md
+++ b/doc/development/kubernetes.md
@@ -6,7 +6,7 @@ title: Kubernetes integration development guidelines
 ---
 
 This document provides various guidelines when developing for the GitLab
-[Kubernetes integration](../user/infrastructure/clusters/index.md).
+[Kubernetes integration](../user/infrastructure/clusters/_index.md).
 
 ## Development
 
diff --git a/doc/development/organization/_index.md b/doc/development/organization/_index.md
index 8d2d7e8fd02e3eae02badf43b0e37bc13d16889e..3b4d1ddc6094f5fb2903b81593d1762f9c6b77b3 100644
--- a/doc/development/organization/_index.md
+++ b/doc/development/organization/_index.md
@@ -6,7 +6,7 @@ description: "Development Guidelines: learn about organization when developing G
 title: Organization
 ---
 
-The [Organization initiative](../../user/organization/index.md) focuses on reaching feature parity between
+The [Organization initiative](../../user/organization/_index.md) focuses on reaching feature parity between
 GitLab.com and GitLab Self-Managed.
 
 ## Consolidate groups and projects
@@ -149,4 +149,4 @@ To populate the `organization_id` column, use these methods in order of preferen
 
 - [Consolidating groups and projects](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/consolidating_groups_and_projects/)
   architecture documentation
-- [Organization user documentation](../../user/organization/index.md)
+- [Organization user documentation](../../user/organization/_index.md)
diff --git a/doc/development/testing_guide/review_apps.md b/doc/development/testing_guide/review_apps.md
index 847888bb41fecaaa1c0ba17d962bbd2026800a78..6698e5066b2bfe88492365ad0c0aae736ccb83ed 100644
--- a/doc/development/testing_guide/review_apps.md
+++ b/doc/development/testing_guide/review_apps.md
@@ -187,7 +187,7 @@ subgraph "CNG-mirror pipeline"
   stop a review app manually, and is also started by GitLab once a merge
   request's branch is deleted after being merged.
 - The Kubernetes cluster is connected to the `gitlab` projects using the
-  [GitLab Kubernetes integration](../../user/infrastructure/clusters/index.md). This basically
+  [GitLab Kubernetes integration](../../user/infrastructure/clusters/_index.md). This basically
   allows to have a link to the review app directly from the merge request widget.
 
 ### Auto-stopping of review apps
diff --git a/doc/integration/google.md b/doc/integration/google.md
index f9726b80b48660206f415ee69709baa2e83eaa77..c4d2507aa1d230ea7fbacede4a56cdc779b1c748 100644
--- a/doc/integration/google.md
+++ b/doc/integration/google.md
@@ -49,7 +49,7 @@ To see your new project in the list, refresh the page.
 
 1. You should see a client ID and client secret. Note them down
    or keep this page open as you need them later.
-1. To enable projects to access [Google Kubernetes Engine](../user/infrastructure/clusters/index.md),
+1. To enable projects to access [Google Kubernetes Engine](../user/infrastructure/clusters/_index.md),
    you must also enable the:
    - Google Kubernetes Engine API
    - Cloud Resource Manager API
diff --git a/doc/operations/incident_management/integrations.md b/doc/operations/incident_management/integrations.md
index a248ae6073edba11387315228590854ff9b2fa1c..a6b338faf1a4cc6a40b57d015796d0c357e0804a 100644
--- a/doc/operations/incident_management/integrations.md
+++ b/doc/operations/incident_management/integrations.md
@@ -100,7 +100,7 @@ parameters. All fields are optional. If the incoming alert does not contain a va
 | `hosts`                   | String or Array | One or more hosts, as to where this incident occurred. |
 | `severity`                | String          | The severity of the alert. Case-insensitive. Can be one of: `critical`, `high`, `medium`, `low`, `info`, `unknown`. Defaults to `critical` if missing or value is not in this list. |
 | `fingerprint`             | String or Array | The unique identifier of the alert. This can be used to group occurrences of the same alert. When the `generic_alert_fingerprinting` feature is enabled, the fingerprint is generated automatically based on the payload (excluding the `start_time`, `end_time`, and `hosts` parameters). |
-| `gitlab_environment_name` | String          | The name of the associated GitLab [environment](../../ci/environments/_index.md). Required to [display alerts on a dashboard](../../user/operations_dashboard/index.md#adding-a-project-to-the-dashboard). |
+| `gitlab_environment_name` | String          | The name of the associated GitLab [environment](../../ci/environments/_index.md). Required to [display alerts on a dashboard](../../user/operations_dashboard/_index.md#adding-a-project-to-the-dashboard). |
 
 You can also add custom fields to the alert's payload. The values of extra
 parameters aren't limited to primitive types (such as strings or numbers), but
@@ -207,7 +207,7 @@ You can alter the nested parameters listed below to configure the GitLab alert.
 | `annotations/runbook`                                                      | String   | No       | Link to documentation or instructions for how to manage this alert. |
 | `endsAt`                                                                   | DateTime | No       | The resolution time of the alert.    |
 | `g0.expr` query parameter in `generatorUrl`                                | String   | No       | Query of associated metric.          |
-| `labels/gitlab_environment_name`                                           | String   | No       | The name of the associated GitLab [environment](../../ci/environments/_index.md). Required to [display alerts on a dashboard](../../user/operations_dashboard/index.md#adding-a-project-to-the-dashboard). |
+| `labels/gitlab_environment_name`                                           | String   | No       | The name of the associated GitLab [environment](../../ci/environments/_index.md). Required to [display alerts on a dashboard](../../user/operations_dashboard/_index.md#adding-a-project-to-the-dashboard). |
 | `labels/severity`                                                          | String   | No       | Severity of the alert. Should be one of the [Prometheus severity options](#prometheus-severity-options). Defaults to `critical` if missing or value is not in this list. |
 | `status`                                                                   | String   | No       | Status of the alert in Prometheus. If value is 'resolved', the alert is resolved. |
 | One of `annotations/gitlab_y_label`,  `annotations/title`, `annotations/summary`, or `labels/alertname` | String | No | The Y-Axis label to be used when embedding the metrics for this alert in [GitLab Flavored Markdown](../../user/markdown.md). |
diff --git a/doc/topics/autodevops/multiple_clusters_auto_devops.md b/doc/topics/autodevops/multiple_clusters_auto_devops.md
index 0776ef2fba548cb685b745b91ba9c846ecd1be3e..589981f3387e252f571b7679521834bc362b71e9 100644
--- a/doc/topics/autodevops/multiple_clusters_auto_devops.md
+++ b/doc/topics/autodevops/multiple_clusters_auto_devops.md
@@ -33,7 +33,7 @@ To deploy your environments to different Kubernetes clusters:
    - Set up a `KUBE_INGRESS_BASE_DOMAIN`. You must [configure the base domain](requirements.md#auto-devops-base-domain) for each environment to point to the Ingress of the relevant cluster.
    - Add a `KUBE_NAMESPACE` variable with a value of the Kubernetes namespace you want your deployments to target. You can scope the variable to multiple environments.
 
-For deprecated, [certificate-based clusters](../../user/infrastructure/clusters/index.md#certificate-based-kubernetes-integration-deprecated):
+For deprecated, [certificate-based clusters](../../user/infrastructure/clusters/_index.md#certificate-based-kubernetes-integration-deprecated):
 
 1. Go to the project and select **Operate > Kubernetes clusters** from the left sidebar.
 1. [Set the environment scope of each cluster](../../user/project/clusters/multiple_kubernetes_clusters.md#setting-the-environment-scope).
diff --git a/doc/topics/autodevops/requirements.md b/doc/topics/autodevops/requirements.md
index ac7472a53c2edb9908b14f2c8b2e783bdab04218..6199bde4cb84822a5b2272eea57ef895bb7eef58 100644
--- a/doc/topics/autodevops/requirements.md
+++ b/doc/topics/autodevops/requirements.md
@@ -96,7 +96,7 @@ To make full use of Auto DevOps with Kubernetes, you need:
 
   To enable deployments, you need:
 
-  1. A [Kubernetes 1.12+ cluster](../../user/infrastructure/clusters/index.md) for your
+  1. A [Kubernetes 1.12+ cluster](../../user/infrastructure/clusters/_index.md) for your
      project.
      For Kubernetes 1.16+ clusters, you must perform additional configuration for
      [Auto Deploy for Kubernetes 1.16+](stages.md#kubernetes-116).
diff --git a/doc/topics/git/project.md b/doc/topics/git/project.md
index 813f20423468a01857c13e7eeb07a5d27ccba295..7de8adf7d529b1ccef6cd13f65bb6efd13f667a6 100644
--- a/doc/topics/git/project.md
+++ b/doc/topics/git/project.md
@@ -25,7 +25,7 @@ Prerequisites:
 <!--- To push with SSH, you must have [an SSH key](../ssh.md) that is
   [added to your GitLab account](../ssh.md#add-an-ssh-key-to-your-gitlab-account).
 -->
-- You must have permission to add new projects to a [namespace](../../user/namespace/index.md).
+- You must have permission to add new projects to a [namespace](../../user/namespace/_index.md).
   To verify your permissions:
 
   1. On the left sidebar, select **Search or go to** and find your group.
@@ -60,7 +60,7 @@ To create a project with `git push`:
       Replace the following values:
 
       - `gitlab.example.com` with the machine domain name hosts your Git repository.
-      - `namespace` with your [namespace](../../user/namespace/index.md) name.
+      - `namespace` with your [namespace](../../user/namespace/_index.md) name.
       - `myproject` with your project name.
       - If specifying a port, change `00` to your project's required port number.
       - Optional. To export existing repository tags, append the `--tags` flag to
diff --git a/doc/topics/set_up_organization.md b/doc/topics/set_up_organization.md
index 9d486d52c6fdd5c3fc0ca6d02aef1e3677a0b897..715250258bc58892fe8d212ba1436ee4f84a9a50 100644
--- a/doc/topics/set_up_organization.md
+++ b/doc/topics/set_up_organization.md
@@ -11,7 +11,7 @@ and give everyone access to the projects they need.
 
 | | | |
 |--|--|--|
-| [**Tutorial: Set up your organization**](../tutorials/manage_user/_index.md)<br>Setup, configuration, onboarding, organization structure. | [**Namespaces**](../user/namespace/index.md)<br>Organization, hierarchy, project grouping. | [**Members**](../user/project/members/index.md)<br>User management, roles, permissions, access levels. |
-| [**Organization** (in development)](../user/organization/index.md)<br>Namespace hierarchy. | [**Groups**](../user/group/_index.md)<br>Project management, access control, client groups, team groups. | [**Sharing projects and groups**](../user/project/members/sharing_projects_groups.md)<br>Invitations, group inheritance, project visibility. |
+| [**Tutorial: Set up your organization**](../tutorials/manage_user/_index.md)<br>Setup, configuration, onboarding, organization structure. | [**Namespaces**](../user/namespace/_index.md)<br>Organization, hierarchy, project grouping. | [**Members**](../user/project/members/index.md)<br>User management, roles, permissions, access levels. |
+| [**Organization** (in development)](../user/organization/_index.md)<br>Namespace hierarchy. | [**Groups**](../user/group/_index.md)<br>Project management, access control, client groups, team groups. | [**Sharing projects and groups**](../user/project/members/sharing_projects_groups.md)<br>Invitations, group inheritance, project visibility. |
 | [**Compliance**](../administration/compliance.md)<br>Compliance center, audit events, security policies, compliance frameworks. | [**Enterprise users**](../user/enterprise_user/_index.md)<br>Domain verification, two-factor authentication, enterprise user management, SAML response. | [**Service accounts**](../user/profile/service_accounts.md)<br>Machine user, rate limits, personal access tokens. |
 | [**User account options**](../user/profile/index.md)<br>Profile settings, preferences, authentication, notifications. | [**SSH keys**](../user/ssh.md)<br>Authentication, permissions, key types, ownership. | [**GitLab.com settings**](../user/gitlab_com/_index.md)<br>Instance configurations. |
diff --git a/doc/tutorials/automate_runner_creation/_index.md b/doc/tutorials/automate_runner_creation/_index.md
index 649d63165db4e5bb1fa96a5b68de81121db34ec2..15fed723b63a5a622de20f1d0f690ff1f49141d2 100644
--- a/doc/tutorials/automate_runner_creation/_index.md
+++ b/doc/tutorials/automate_runner_creation/_index.md
@@ -193,7 +193,7 @@ generates randomly and stores in your local file system.
 Here's an example of an automation workflow you can use to register and deploy your
 runners to Google Compute Engine:
 
-1. Use [Terraform infrastructure as code](../../user/infrastructure/iac/index.md)
+1. Use [Terraform infrastructure as code](../../user/infrastructure/iac/_index.md)
    to install the runner application to a virtual machine hosted on Google Cloud
    Platform (GCP).
 1. In the [GCP Terraform provider](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance),
diff --git a/doc/tutorials/convert_personal_namespace_to_group/_index.md b/doc/tutorials/convert_personal_namespace_to_group/_index.md
index 08ba561284c706349d758a92143605118fbcbfab..12cf1986348e7bafa32ac7f4bcba59685179622b 100644
--- a/doc/tutorials/convert_personal_namespace_to_group/_index.md
+++ b/doc/tutorials/convert_personal_namespace_to_group/_index.md
@@ -9,7 +9,7 @@ DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com
 
-If you've started out with a personal [namespace](../../user/namespace/index.md), but find
+If you've started out with a personal [namespace](../../user/namespace/_index.md), but find
 that you've outgrown its capabilities, you can switch to a group namespace instead.
 With a group namespace, you can create multiple subgroups and manage their members and permissions.
 
diff --git a/doc/tutorials/fuzz_testing/_index.md b/doc/tutorials/fuzz_testing/_index.md
index 18e036d2626d23ceeaa8f14ebeacb97be291e59b..bfde102a546fd9afd499aaeb65178e1a3a5f54a3 100644
--- a/doc/tutorials/fuzz_testing/_index.md
+++ b/doc/tutorials/fuzz_testing/_index.md
@@ -37,7 +37,7 @@ project template:
 1. [Fork the project template](../../user/project/repository/forking_workflow.md).
 1. When forking the project template:
    - Name the forked project `fuzz-testing-demo`.
-   - Select an appropriate [namespace](../../user/namespace/index.md).
+   - Select an appropriate [namespace](../../user/namespace/_index.md).
    - Set [project visibility](../../user/public_access.md) to **Private**.
 
 You have successfully forked the `fuzz-testing` project template. Before you can
diff --git a/doc/tutorials/move_personal_project_to_group/_index.md b/doc/tutorials/move_personal_project_to_group/_index.md
index 1eae3649376a053edd1e2642da5aa30c3fb6ae2f..0d3cdbce35fbf5fe6b2cb8ec2806570b1e5b1a74 100644
--- a/doc/tutorials/move_personal_project_to_group/_index.md
+++ b/doc/tutorials/move_personal_project_to_group/_index.md
@@ -9,7 +9,7 @@ DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com
 
-If you created a project under a [personal namespace](../../user/namespace/index.md),
+If you created a project under a [personal namespace](../../user/namespace/_index.md),
 you can perform common tasks, like managing issues, merge requests,
 source control, and CI/CD.
 
diff --git a/doc/tutorials/scrum_events/_index.md b/doc/tutorials/scrum_events/_index.md
index 14de25dee85a0f139cfd0ad2151deebad8db3950..50ca75bb75b6b9758a3f6cd43b86256a01cc5e20 100644
--- a/doc/tutorials/scrum_events/_index.md
+++ b/doc/tutorials/scrum_events/_index.md
@@ -103,7 +103,7 @@ To create a group:
 1. Select **Create group**.
 1. In the **Group name** text box, enter the name of the group. For a list of words that cannot be used as group names, see
    [reserved names](../../user/reserved_names.md).
-1. In the **Group URL** text box, enter the path for the group used for the [namespace](../../user/namespace/index.md).
+1. In the **Group URL** text box, enter the path for the group used for the [namespace](../../user/namespace/_index.md).
 1. Select the [**Visibility level**](../../user/public_access.md) of the group.
 1. Optional. To personalize your GitLab experience:
    - From the **Role** dropdown list, select your role.
diff --git a/doc/update/versions/gitlab_15_changes.md b/doc/update/versions/gitlab_15_changes.md
index c4bae0d1ccbe1db4dc130827076f877f76857b43..5729a55be90d9a648f2ecc0f36af3e51ede11bae 100644
--- a/doc/update/versions/gitlab_15_changes.md
+++ b/doc/update/versions/gitlab_15_changes.md
@@ -925,7 +925,7 @@ DETAILS:
   For more information, see [issue 364763](https://gitlab.com/gitlab-org/gitlab/-/issues/364763).
 
 - The use of encrypted S3 buckets with storage-specific configuration is no longer supported after [removing support for using `background_upload`](../deprecations.md#background-upload-for-object-storage).
-- The [certificate-based Kubernetes integration (DEPRECATED)](../../user/infrastructure/clusters/index.md#certificate-based-kubernetes-integration-deprecated) is disabled by default, but you can be re-enable it through the [`certificate_based_clusters` feature flag](../../administration/feature_flags.md#how-to-enable-and-disable-features-behind-flags) until GitLab 16.0.
+- The [certificate-based Kubernetes integration (DEPRECATED)](../../user/infrastructure/clusters/_index.md#certificate-based-kubernetes-integration-deprecated) is disabled by default, but you can be re-enable it through the [`certificate_based_clusters` feature flag](../../administration/feature_flags.md#how-to-enable-and-disable-features-behind-flags) until GitLab 16.0.
 - When you use the GitLab Helm Chart project with a custom `serviceAccount`, ensure it has `get` and `list` permissions for the `serviceAccount` and `secret` resources.
 - The `FF_GITLAB_REGISTRY_HELPER_IMAGE` [feature flag](../../administration/feature_flags.md#enable-or-disable-the-feature) is removed and helper images are always pulled from GitLab Registry.
 
diff --git a/doc/user/clusters/agent/ci_cd_workflow.md b/doc/user/clusters/agent/ci_cd_workflow.md
index 28db0731ffc9c02a20e506d5db91c7a118a04496..102a21488975e3364faab5d90c054420a0b7b118 100644
--- a/doc/user/clusters/agent/ci_cd_workflow.md
+++ b/doc/user/clusters/agent/ci_cd_workflow.md
@@ -155,7 +155,7 @@ for each agent. For example:
 ### Environments with both certificate-based and agent-based connections
 
 When you deploy to an environment that has both a
-[certificate-based cluster](../../infrastructure/clusters/index.md) (deprecated) and an agent connection:
+[certificate-based cluster](../../infrastructure/clusters/_index.md) (deprecated) and an agent connection:
 
 - The certificate-based cluster's context is called `gitlab-deploy`. This context
   is always selected by default.
diff --git a/doc/user/clusters/agent/install/_index.md b/doc/user/clusters/agent/install/_index.md
index 21915766ec3c4f43663459bf121ebaa557f3bce4..9773bfc025f6ec1c41ce140ef0e8d360b35a5282 100644
--- a/doc/user/clusters/agent/install/_index.md
+++ b/doc/user/clusters/agent/install/_index.md
@@ -20,7 +20,7 @@ Before you can install the agent in your cluster, you need:
   - [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/en-us/azure/aks/what-is-aks)
   - [Digital Ocean](https://docs.digitalocean.com/products/kubernetes/getting-started/quickstart/)
   - [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine/docs/deploy-app-cluster)
-  - You should use [Infrastructure as Code techniques](../../../infrastructure/iac/index.md) for managing infrastructure resources at scale.
+  - You should use [Infrastructure as Code techniques](../../../infrastructure/iac/_index.md) for managing infrastructure resources at scale.
 - On GitLab Self-Managed, a GitLab administrator must set up the
   [agent server](../../../../administration/clusters/kas.md).
   Then it is available by default at `wss://gitlab.example.com/-/kubernetes-agent/`.
diff --git a/doc/user/clusters/management_project.md b/doc/user/clusters/management_project.md
index fe955f16f65570ace0f4f58dd681317901eeaeb2..71625a3237d0cd018bf0b809764bc8e5493bf0e6 100644
--- a/doc/user/clusters/management_project.md
+++ b/doc/user/clusters/management_project.md
@@ -62,7 +62,7 @@ To associate a cluster management project with your cluster:
      **Operate > Kubernetes clusters** page.
    - [Group-level cluster](../group/clusters/_index.md), go to your group's **Kubernetes**
      page.
-   - [Instance-level cluster](../instance/clusters/index.md):
+   - [Instance-level cluster](../instance/clusters/_index.md):
      1. On the left sidebar, at the bottom, select **Admin**.
      1. Select **Kubernetes**.
 1. Expand **Advanced settings**.
diff --git a/doc/user/duo_workflow/index.md b/doc/user/duo_workflow/index.md
index a696cca5b4dc52964fe5e176d5288ae60f794f51..8f0248f814f6a0d6e6018e9340b218c68367fd9e 100644
--- a/doc/user/duo_workflow/index.md
+++ b/doc/user/duo_workflow/index.md
@@ -106,7 +106,7 @@ Before you can use Workflow:
 1. Ensure you have an account on GitLab.com.
 1. Ensure that the GitLab.com project you want to use with Workflow meets these requirements:
    - You must have at least the Developer role for the project.
-   - Your project must belong to a [group namespace](../namespace/index.md)
+   - Your project must belong to a [group namespace](../namespace/_index.md)
      with an **Ultimate** subscription and [experimental features turned on](../gitlab_duo/turn_on_off.md#turn-on-beta-and-experimental-features).
    - The project must have [GitLab Duo turned on](../gitlab_duo/index.md).
 1. [Install Visual Studio Code](https://code.visualstudio.com/download) (VS Code).
diff --git a/doc/user/get_started/get_started_deploy_release.md b/doc/user/get_started/get_started_deploy_release.md
index aab8e12543adfe413c5d4401d000fa18f789d63a..3b7d2e81355b7ea798eca71e09d5f9846e72b12f 100644
--- a/doc/user/get_started/get_started_deploy_release.md
+++ b/doc/user/get_started/get_started_deploy_release.md
@@ -57,7 +57,7 @@ For more information, see:
 - [Deploy to Kubernetes](../clusters/agent/_index.md)
 - [Dashboard for Kubernetes](../../ci/environments/kubernetes_dashboard.md)
 - [Environments Dashboard](../../ci/environments/environments_dashboard.md)
-- [Operations Dashboard](../operations_dashboard/index.md)
+- [Operations Dashboard](../operations_dashboard/_index.md)
 - [Review apps](../../ci/review_apps/_index.md)
 
 ## Step 3: Stay compliant with continuous delivery features
diff --git a/doc/user/get_started/get_started_managing_infrastructure.md b/doc/user/get_started/get_started_managing_infrastructure.md
index 16cbd40b37c05b610e8d438f0c6adb709781da86..8ef6126c60e231170cef7962427d602b0c9f0b85 100644
--- a/doc/user/get_started/get_started_managing_infrastructure.md
+++ b/doc/user/get_started/get_started_managing_infrastructure.md
@@ -33,7 +33,7 @@ The various GitLab integrations help you:
 
 For more information, see:
 
-- [Infrastructure as Code](../infrastructure/iac/index.md)
+- [Infrastructure as Code](../infrastructure/iac/_index.md)
 
 ## Step 2: Interact with Kubernetes clusters
 
diff --git a/doc/user/group/_index.md b/doc/user/group/_index.md
index 4354b3fc10cc0ea1c933ef51d44d5bbc72f92f64..b13f2ede0d1e7ec9c03c3a616756faa87f0463f7 100644
--- a/doc/user/group/_index.md
+++ b/doc/user/group/_index.md
@@ -170,7 +170,7 @@ To create a group:
 1. Select **Create group**.
 1. In the **Group name** text box, enter the name of the group. For a list of words that cannot be used as group names, see
    [reserved names](../reserved_names.md).
-1. In the **Group URL** text box, enter the path for the group used for the [namespace](../namespace/index.md).
+1. In the **Group URL** text box, enter the path for the group used for the [namespace](../namespace/_index.md).
 1. Select the [**Visibility level**](../public_access.md) of the group.
 1. Optional. To personalize your GitLab experience:
    - For **Who will be using this group?**, select an option.
diff --git a/doc/user/group/clusters/_index.md b/doc/user/group/clusters/_index.md
index 014bc2bdf5a433ee7897782bde9df1d51d1296d4..00069cb433d753379cf0507747cd6a533047e20c 100644
--- a/doc/user/group/clusters/_index.md
+++ b/doc/user/group/clusters/_index.md
@@ -14,7 +14,7 @@ This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/e
 use the [GitLab agent](../../clusters/agent/_index.md).
 
 Similar to [project-level](../../project/clusters/index.md) and
-[instance-level](../../instance/clusters/index.md) Kubernetes clusters,
+[instance-level](../../instance/clusters/_index.md) Kubernetes clusters,
 group-level Kubernetes clusters allow you to connect a Kubernetes cluster to
 your group, enabling you to use the same cluster across multiple projects.
 
@@ -172,7 +172,7 @@ documentation for project-level clusters.
 ## More information
 
 For information on integrating GitLab and Kubernetes, see
-[Kubernetes clusters](../../infrastructure/clusters/index.md).
+[Kubernetes clusters](../../infrastructure/clusters/_index.md).
 
 <!-- ## Troubleshooting
 
diff --git a/doc/user/index.md b/doc/user/index.md
index 30fe550d23b46298f806e160f54d599102fb2c52..7cea1a87cd3b34acf1aa9f677ba79ad71a22f149 100644
--- a/doc/user/index.md
+++ b/doc/user/index.md
@@ -12,5 +12,5 @@ organize your work, create and secure your application, and analyze its performa
 |--|--|--|
 | [**Manage your organization**](../topics/set_up_organization.md)<br>Users, groups, namespaces, SSH keys.| [**Organize work with projects**](project/organize_work_with_projects.md)<br>Project visibility, search, badges, layout.| [**Plan and track work**](../topics/plan_and_track.md)<br>Epics, issues, milestones, labels.|
 | [**Use Git**](../topics/git/_index.md)<br>Common commands and workflows. | [**Manage your code**](../topics/manage_code.md)<br>Repositories, merge requests, remote development. | [**Use CI/CD to build your application**](../topics/build_your_application.md)<br>Runners, jobs, pipelines, variables. |
-| [**Secure your application**](application_security/secure_your_application.md)<br>Container, dependency, and vulnerability scans. | [**Deploy and release your application**](../topics/release_your_application.md)<br>Environments, packages, review apps, GitLab Pages. | [**Manage your infrastructure**](infrastructure/index.md)<br>Terraform and Kubernetes deployments. |
+| [**Secure your application**](application_security/secure_your_application.md)<br>Container, dependency, and vulnerability scans. | [**Deploy and release your application**](../topics/release_your_application.md)<br>Environments, packages, review apps, GitLab Pages. | [**Manage your infrastructure**](infrastructure/_index.md)<br>Terraform and Kubernetes deployments. |
 | [**Monitor your application**](../operations/_index.md)<br>Error tracking, incident management. | [**Analyze GitLab usage**](analytics/_index.md)<br>Instance, group, and project analytics. | |
diff --git a/doc/user/infrastructure/index.md b/doc/user/infrastructure/_index.md
similarity index 77%
rename from doc/user/infrastructure/index.md
rename to doc/user/infrastructure/_index.md
index 5c88b7882158d99d52f0234a0570ae781e5e9a42..deb12ca3d26cab02b1efef6b52aaba8c6b565fc6 100644
--- a/doc/user/infrastructure/index.md
+++ b/doc/user/infrastructure/_index.md
@@ -10,5 +10,5 @@ Use GitLab to speed up and simplify your infrastructure management practices.
 
 | | | |
 |--|--|--|
-| [**Getting started**](../get_started/get_started_managing_infrastructure.md)<br>Overview of how features fit together. | [**Infrastructure as Code**](iac/index.md)<br>Infrastructure management, versioning, automation, state storage, modules. | [**Create Kubernetes clusters**](../clusters/create/_index.md)<br>Amazon EKS, Azure AKS, Google GKE, Civo. |
+| [**Getting started**](../get_started/get_started_managing_infrastructure.md)<br>Overview of how features fit together. | [**Infrastructure as Code**](iac/_index.md)<br>Infrastructure management, versioning, automation, state storage, modules. | [**Create Kubernetes clusters**](../clusters/create/_index.md)<br>Amazon EKS, Azure AKS, Google GKE, Civo. |
 | [**Connect Kubernetes clusters**](../clusters/agent/_index.md)<br>Kubernetes integration, GitOps, CI/CD, agent deployment, cluster management. | [**Runbooks**](../project/clusters/runbooks/index.md)<br>Executable runbooks, automation, troubleshooting, operations. | |
diff --git a/doc/user/infrastructure/clusters/index.md b/doc/user/infrastructure/clusters/_index.md
similarity index 98%
rename from doc/user/infrastructure/clusters/index.md
rename to doc/user/infrastructure/clusters/_index.md
index 27d1a48f2cb8359052f78c4707005b9df56dde27..a306934f27b76c4de96e824452780689c66b8131 100644
--- a/doc/user/infrastructure/clusters/index.md
+++ b/doc/user/infrastructure/clusters/_index.md
@@ -66,7 +66,7 @@ This feature flag re-enables the certificate-based Kubernetes integration.
 
 The concept of [project-level](../../project/clusters/index.md),
 [group-level](../../group/clusters/_index.md), and
-[instance-level](../../instance/clusters/index.md) clusters becomes
+[instance-level](../../instance/clusters/_index.md) clusters becomes
 extinct in the new model, although the functionality remains to some extent.
 
 The agent is always configured in a single GitLab project and you can expose the cluster connection to other projects and groups to [access it from GitLab CI/CD](../../clusters/agent/ci_cd_workflow.md).
diff --git a/doc/user/infrastructure/clusters/connect/index.md b/doc/user/infrastructure/clusters/connect/_index.md
similarity index 88%
rename from doc/user/infrastructure/clusters/connect/index.md
rename to doc/user/infrastructure/clusters/connect/_index.md
index d0a5a99fcea76391108d44047c2ed9bee5c5e537..6c2a11968b8b3aea078a0008f677e9dd73241785 100644
--- a/doc/user/infrastructure/clusters/connect/index.md
+++ b/doc/user/infrastructure/clusters/connect/_index.md
@@ -9,7 +9,7 @@ DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
 
-The [certificate-based Kubernetes integration with GitLab](../index.md)
+The [certificate-based Kubernetes integration with GitLab](../_index.md)
 was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8)
 in GitLab 14.5. To connect your clusters, use the [GitLab agent](../../../clusters/agent/_index.md).
 
@@ -18,7 +18,7 @@ in GitLab 14.5. To connect your clusters, use the [GitLab agent](../../../cluste
 > - [Deprecated](https://gitlab.com/groups/gitlab-org/configure/-/epics/8) in GitLab 14.5.
 
 WARNING:
-The [concept of cluster levels was deprecated](../index.md#cluster-levels)
+The [concept of cluster levels was deprecated](../_index.md#cluster-levels)
 in GitLab 14.5.
 
 Choose your cluster's level according to its purpose:
@@ -27,7 +27,7 @@ Choose your cluster's level according to its purpose:
 |--|--|
 | [Project level](../../../project/clusters/index.md) | Use your cluster for a single project. |
 | [Group level](../../../group/clusters/_index.md) | Use the same cluster across multiple projects within your group. |
-| [Instance level](../../../instance/clusters/index.md) | Use the same cluster across groups and projects within your instance. |
+| [Instance level](../../../instance/clusters/_index.md) | Use the same cluster across groups and projects within your instance. |
 
 ### View your clusters
 
diff --git a/doc/user/infrastructure/clusters/connect/new_aks_cluster.md b/doc/user/infrastructure/clusters/connect/new_aks_cluster.md
index a38be10548b3fdd92e16bab14d8c28e354c3eadb..a206bec4bbe6664a821259ebe07e31c5c510711b 100644
--- a/doc/user/infrastructure/clusters/connect/new_aks_cluster.md
+++ b/doc/user/infrastructure/clusters/connect/new_aks_cluster.md
@@ -6,7 +6,7 @@ title: Create an Azure AKS cluster
 ---
 
 You can create a cluster on Azure Kubernetes Service (AKS) through
-[Infrastructure as Code (IaC)](../../index.md). This process uses the Azure and
+[Infrastructure as Code (IaC)](../../_index.md). This process uses the Azure and
 Kubernetes Terraform providers to create AKS clusters. You connect the clusters to GitLab
 by using the GitLab agent for Kubernetes.
 
@@ -102,7 +102,7 @@ After you provision the cluster, it is connected to GitLab and is ready for depl
 1. On the left sidebar, select **Operate > Kubernetes clusters**.
 1. In the list, view the **Connection status** column.
 
-For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../index.md).
+For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../_index.md).
 
 ## Remove the cluster
 
diff --git a/doc/user/infrastructure/clusters/connect/new_civo_cluster.md b/doc/user/infrastructure/clusters/connect/new_civo_cluster.md
index b25b0f83d02fb7819b0aaa8b179ad1d209a6063a..7c357a7130860a61db50f62128f9b9dfe05ca1d9 100644
--- a/doc/user/infrastructure/clusters/connect/new_civo_cluster.md
+++ b/doc/user/infrastructure/clusters/connect/new_civo_cluster.md
@@ -8,7 +8,7 @@ title: Create a Civo Kubernetes cluster
 Every new Civo account receives [$250 in credit](https://dashboard.civo.com/signup) to get started with the GitLab integration with Civo Kubernetes. You can also use a marketplace app to install GitLab on your Civo Kubernetes cluster.
 
 Learn how to create a new cluster on Civo Kubernetes through
-[Infrastructure as Code (IaC)](../../index.md). This process uses the Civo
+[Infrastructure as Code (IaC)](../../_index.md). This process uses the Civo
 and Kubernetes Terraform providers to create Civo Kubernetes clusters. You connect the clusters to GitLab
 by using the GitLab agent for Kubernetes.
 
@@ -109,7 +109,7 @@ After you provision the cluster, it is connected to GitLab and is ready for depl
 1. On the left sidebar, select **Operate > Kubernetes clusters**.
 1. In the list, view the **Connection status** column.
 
-For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../index.md).
+For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../_index.md).
 
 ## Remove the cluster
 
diff --git a/doc/user/infrastructure/clusters/connect/new_eks_cluster.md b/doc/user/infrastructure/clusters/connect/new_eks_cluster.md
index 6b8451f2834a7f23bfe0e33638adc730a5482ceb..2cef99ae43b9373bd4223b6e556756b5d39aa7cb 100644
--- a/doc/user/infrastructure/clusters/connect/new_eks_cluster.md
+++ b/doc/user/infrastructure/clusters/connect/new_eks_cluster.md
@@ -6,7 +6,7 @@ title: Create an Amazon EKS cluster
 ---
 
 You can create a cluster on Amazon Elastic Kubernetes Service (EKS) through
-[Infrastructure as Code (IaC)](../../index.md). This process uses the AWS and
+[Infrastructure as Code (IaC)](../../_index.md). This process uses the AWS and
 Kubernetes Terraform providers to create EKS clusters. You connect the clusters to GitLab
 by using the GitLab agent for Kubernetes.
 
@@ -153,7 +153,7 @@ After you provision the cluster, it is connected to GitLab and is ready for depl
 1. On the left sidebar, select **Operate > Kubernetes clusters**.
 1. In the list, view the **Connection status** column.
 
-For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../index.md).
+For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../_index.md).
 
 ## Remove the cluster
 
diff --git a/doc/user/infrastructure/clusters/connect/new_gke_cluster.md b/doc/user/infrastructure/clusters/connect/new_gke_cluster.md
index 361a92d5f145a3860acbcaa48319d6fadd429fa1..94a7dd9d9e15b0a37e5cb62ffa04fe789a20b1c7 100644
--- a/doc/user/infrastructure/clusters/connect/new_gke_cluster.md
+++ b/doc/user/infrastructure/clusters/connect/new_gke_cluster.md
@@ -6,7 +6,7 @@ title: Create a Google GKE cluster
 ---
 
 Learn how to create a new cluster on Google Kubernetes Engine (GKE) through
-[Infrastructure as Code (IaC)](../../index.md). This process uses the Google
+[Infrastructure as Code (IaC)](../../_index.md). This process uses the Google
 and Kubernetes Terraform providers create GKE clusters. You connect the clusters to GitLab
 by using the GitLab agent for Kubernetes.
 
@@ -148,7 +148,7 @@ After you provision the cluster, it is connected to GitLab and is ready for depl
 1. On the left sidebar, select **Operate > Kubernetes clusters**.
 1. In the list, view the **Connection status** column.
 
-For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../index.md).
+For more information about the capabilities of the connection, see [the GitLab agent for Kubernetes documentation](../_index.md).
 
 ## Remove the cluster
 
diff --git a/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md b/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md
index e68a88601da5db401d6d4b660661793e162b2f78..5100b8682a47a934f25eac0aa75e5c9ec7f363fd 100644
--- a/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md
+++ b/doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md
@@ -13,7 +13,7 @@ To connect your Kubernetes cluster with GitLab, you can use:
 
 - [A GitOps workflow](../../clusters/agent/gitops.md).
 - [A GitLab CI/CD workflow](../../clusters/agent/ci_cd_workflow.md).
-- [A certificate-based integration](index.md).
+- [A certificate-based integration](_index.md).
 
 The certificate-based integration is
 [**deprecated**](https://about.gitlab.com/blog/2021/11/15/deprecating-the-cert-based-kubernetes-integration/)
diff --git a/doc/user/infrastructure/iac/index.md b/doc/user/infrastructure/iac/_index.md
similarity index 100%
rename from doc/user/infrastructure/iac/index.md
rename to doc/user/infrastructure/iac/_index.md
diff --git a/doc/user/infrastructure/iac/gitlab_terraform_helpers.md b/doc/user/infrastructure/iac/gitlab_terraform_helpers.md
index d25cc9e364e3d8ecf6b05c2a7534898a45315b85..00e208b00312032c4d82c6bb4db4e9417fedcee0 100644
--- a/doc/user/infrastructure/iac/gitlab_terraform_helpers.md
+++ b/doc/user/infrastructure/iac/gitlab_terraform_helpers.md
@@ -140,5 +140,5 @@ For supported combinations, see [the `terraform-images` container registry](http
 
 ## Related topics
 
-- [Terraform CI/CD templates](index.md)
+- [Terraform CI/CD templates](_index.md)
 - [Terraform template recipes](terraform_template_recipes.md)
diff --git a/doc/user/infrastructure/iac/mr_integration.md b/doc/user/infrastructure/iac/mr_integration.md
index 8434e0f48a915b9866c41bfe9385ccd77d694fa2..c4c4dc5dcb0c4f9df422a24e1f35b68dd7dec9f1 100644
--- a/doc/user/infrastructure/iac/mr_integration.md
+++ b/doc/user/infrastructure/iac/mr_integration.md
@@ -29,7 +29,7 @@ This setting ensures artifacts are accessible only to GitLab administrators and
 
 ## Configure OpenTofu report artifacts
 
-GitLab [integrates with OpenTofu](index.md#quickstart-an-opentofu-project-in-pipelines)
+GitLab [integrates with OpenTofu](_index.md#quickstart-an-opentofu-project-in-pipelines)
 through the OpenTofu CI/CD component. This component uses GitLab-managed OpenTofu state to display OpenTofu changes on merge requests.
 
 ### Automatically configure OpenTofu report artifacts
diff --git a/doc/user/instance/clusters/index.md b/doc/user/instance/clusters/_index.md
similarity index 96%
rename from doc/user/instance/clusters/index.md
rename to doc/user/instance/clusters/_index.md
index 834d93f7423113cf5ece7f84bfb1f60dd7bd157e..300d7bda5e016197dc5cab0b18c3b3a196bdc205 100644
--- a/doc/user/instance/clusters/index.md
+++ b/doc/user/instance/clusters/_index.md
@@ -47,4 +47,4 @@ are deployed to the Kubernetes cluster, see the documentation for
 ## More information
 
 For information on integrating GitLab and Kubernetes, see
-[Kubernetes clusters](../../infrastructure/clusters/index.md).
+[Kubernetes clusters](../../infrastructure/clusters/_index.md).
diff --git a/doc/user/namespace/index.md b/doc/user/namespace/_index.md
similarity index 100%
rename from doc/user/namespace/index.md
rename to doc/user/namespace/_index.md
diff --git a/doc/user/operations_dashboard/index.md b/doc/user/operations_dashboard/_index.md
similarity index 100%
rename from doc/user/operations_dashboard/index.md
rename to doc/user/operations_dashboard/_index.md
diff --git a/doc/user/organization/index.md b/doc/user/organization/_index.md
similarity index 98%
rename from doc/user/organization/index.md
rename to doc/user/organization/_index.md
index 5ed162a6ff9458bfe95252422dfa4d3b9dd18016..e96d055d1b3628c1ab4f510f197169d0c39644d0 100644
--- a/doc/user/organization/index.md
+++ b/doc/user/organization/_index.md
@@ -22,7 +22,7 @@ sole discretion of GitLab Inc.
 NOTE:
 Organization is in development.
 
-Organization will be above the [top-level namespaces](../namespace/index.md) for you to manage
+Organization will be above the [top-level namespaces](../namespace/_index.md) for you to manage
 everything you do as a GitLab administrator, including:
 
 - Defining and applying settings to all of your groups, subgroups, and projects.
@@ -103,7 +103,7 @@ To switch organizations:
 1. Select **New group**.
 1. In the **Group name** text box, enter the name of the group. For a list of words that cannot be used as group names, see
    [reserved names](../reserved_names.md).
-1. In the **Group URL** text box, enter the path for the group used for the [namespace](../namespace/index.md).
+1. In the **Group URL** text box, enter the path for the group used for the [namespace](../namespace/_index.md).
 1. Select the [**Visibility level**](../public_access.md) of the group.
 1. Select **Create group**.
 
diff --git a/doc/user/packages/terraform_module_registry/index.md b/doc/user/packages/terraform_module_registry/index.md
index aac44d37607a17d77f7898b1279781c4cbc8e207..72421a8a593071ee469083f52847c4ae8bc1ba5a 100644
--- a/doc/user/packages/terraform_module_registry/index.md
+++ b/doc/user/packages/terraform_module_registry/index.md
@@ -224,7 +224,7 @@ module "<module>" {
 }
 ```
 
-Where `<namespace>` is the [namespace](../../namespace/index.md) of the Terraform Module Registry.
+Where `<namespace>` is the [namespace](../../namespace/_index.md) of the Terraform Module Registry.
 
 ### From a project
 
diff --git a/doc/user/packages/workflows/build_packages.md b/doc/user/packages/workflows/build_packages.md
index 42b8675582022cf43a814055d342fc2c2e161d5e..f166d15c5b2d1348b4daf6bd3c72cacddc228841 100644
--- a/doc/user/packages/workflows/build_packages.md
+++ b/doc/user/packages/workflows/build_packages.md
@@ -26,7 +26,7 @@ Learn how to install and build packages different package formats.
 
 1. Run [`composer init`](https://getcomposer.org/doc/03-cli.md#init) and answer the prompts.
 
-   For namespace, enter your unique [namespace](../../namespace/index.md), like your GitLab username or group name.
+   For namespace, enter your unique [namespace](../../namespace/_index.md), like your GitLab username or group name.
 
    A file called `composer.json` is created:
 
diff --git a/doc/user/permissions.md b/doc/user/permissions.md
index 637ceece049cbd9adf8e7efe85c609b3a72caf5b..908a214396747fb716a9d4dcf4c4a013f2bb512e 100644
--- a/doc/user/permissions.md
+++ b/doc/user/permissions.md
@@ -58,7 +58,7 @@ available only:
 - For group and project Owners.
 - For Administrators.
 
-Personal [namespace](namespace/index.md) owners:
+Personal [namespace](namespace/_index.md) owners:
 
 - Are displayed as having the Maintainer role on projects in the namespace, but have the same permissions as a user with the Owner role.
 - For new projects in the namespace, are displayed as having the Owner role.
@@ -142,7 +142,7 @@ Project Owners can perform any listed action, and can delete pipelines:
 | Enable [review apps](../ci/review_apps/_index.md)                                                                              |            |       |         |          |     ✓     |     ✓      |       |
 | Cancel jobs                                                                                                                    |            |       |         |          |     ✓     |     ✓      | Cancellation permissions can be [restricted in the pipeline settings](../ci/pipelines/settings.md#restrict-roles-that-can-cancel-pipelines-or-jobs). |
 | Retry jobs                                                                                                                     |            |       |         |          |     ✓     |     ✓      |       |
-| Read [Terraform](infrastructure/index.md) state                                                                                |            |       |         |          |     ✓     |     ✓      |       |
+| Read [Terraform](infrastructure/_index.md) state                                                                               |            |       |         |          |     ✓     |     ✓      |       |
 | Run [interactive web terminals](../ci/interactive_web_terminal/_index.md)                                                      |            |       |         |          |     ✓     |     ✓      |       |
 | Use pipeline editor                                                                                                            |            |       |         |          |     ✓     |     ✓      |       |
 | Manage [agents for Kubernetes](clusters/agent/_index.md)                                                                        |            |       |         |          |           |     ✓      |       |
@@ -151,7 +151,7 @@ Project Owners can perform any listed action, and can delete pipelines:
 | Manage project CI/CD variables                                                                                                 |            |       |         |          |           |     ✓      |       |
 | Manage project protected environments                                                                                          |            |       |         |          |           |     ✓      |       |
 | Manage project [Secure Files](../api/secure_files.md)                                                                          |            |       |         |          |           |     ✓      |       |
-| Manage [Terraform](infrastructure/index.md) state                                                                              |            |       |         |          |           |     ✓      |       |
+| Manage [Terraform](infrastructure/_index.md) state                                                                             |            |       |         |          |           |     ✓      |       |
 | Add project runners to project                                                                                                 |            |       |         |          |           |     ✓      |       |
 | Clear runner caches manually                                                                                                   |            |       |         |          |           |     ✓      |       |
 | Enable instance runners in project                                                                                             |            |       |         |          |           |     ✓      |       |
diff --git a/doc/user/profile/index.md b/doc/user/profile/index.md
index 63fb162be56cab4ab6eb01de8147a05fb39450b4..b09116823f771eb0fc86ac555b9e1b8bac11e326 100644
--- a/doc/user/profile/index.md
+++ b/doc/user/profile/index.md
@@ -29,7 +29,7 @@ To access your user settings:
 
 ## Change your username
 
-Your username has a unique [namespace](../namespace/index.md),
+Your username has a unique [namespace](../namespace/_index.md),
 which is updated when you change your username. Before you change your username, read about
 [how redirects behave](../project/repository/index.md#repository-path-changes).
 If you do not want to update the namespace, you can create a new user or group and transfer projects to it instead.
diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md
index 9465dd693336f2f35ada53883fce1c51495dda38..93c3ac3f6c8f632644ca8f06f0b358930bd72feb 100644
--- a/doc/user/profile/preferences.md
+++ b/doc/user/profile/preferences.md
@@ -106,7 +106,7 @@ The availability of this feature is controlled by a feature flag. For more infor
 On GitLab.com and GitLab Dedicated, this feature is not available.
 This feature is not ready for production use.
 
-If you are a member of two or more [organizations](../organization/index.md), you can choose a home organization.
+If you are a member of two or more [organizations](../organization/_index.md), you can choose a home organization.
 This is the organization you are in by default when you first sign in to GitLab.
 
 To choose your home organization:
diff --git a/doc/user/project/canary_deployments.md b/doc/user/project/canary_deployments.md
index f8df78f4dd917f02b6ad16832358ba8563f8627f..91bc20e004c0b04fa14a839dc126220fdb7f5459 100644
--- a/doc/user/project/canary_deployments.md
+++ b/doc/user/project/canary_deployments.md
@@ -58,7 +58,7 @@ canary deployment is promoted to production.
 Here's an example setup flow from scratch:
 
 1. Prepare an [Auto DevOps-enabled](../../topics/autodevops/_index.md) project.
-1. Set up a [Kubernetes Cluster](../infrastructure/clusters/index.md) in your project.
+1. Set up a [Kubernetes Cluster](../infrastructure/clusters/_index.md) in your project.
 1. Install [NGINX Ingress](https://github.com/kubernetes/ingress-nginx/tree/master/charts/ingress-nginx) in your cluster.
 1. Set up [the base domain](clusters/gitlab_managed_clusters.md#base-domain) based on the Ingress
    Endpoint assigned above.
diff --git a/doc/user/project/clusters/add_eks_clusters.md b/doc/user/project/clusters/add_eks_clusters.md
index b13e0ccfdb814c0ab7a39309da0236fc045f0d18..57cb224011e21289ddee013fe81ae8ab0303d125 100644
--- a/doc/user/project/clusters/add_eks_clusters.md
+++ b/doc/user/project/clusters/add_eks_clusters.md
@@ -10,7 +10,7 @@ DETAILS:
 **Offering:** GitLab.com, GitLab Self-Managed
 
 WARNING:
-This feature was deprecated in GitLab 14.5. Use [Infrastructure as Code](../../infrastructure/iac/index.md)
+This feature was deprecated in GitLab 14.5. Use [Infrastructure as Code](../../infrastructure/iac/_index.md)
 to create new clusters.
 
 Through GitLab, you can create new clusters and add existing clusters hosted on Amazon Elastic
@@ -23,7 +23,7 @@ use the [GitLab agent](../../clusters/agent/_index.md).
 
 ## Create a new EKS cluster
 
-To create a new cluster from GitLab, use [Infrastructure as Code](../../infrastructure/iac/index.md).
+To create a new cluster from GitLab, use [Infrastructure as Code](../../infrastructure/iac/_index.md).
 
 ### How to create a new cluster on EKS through cluster certificates (deprecated)
 
diff --git a/doc/user/project/clusters/add_existing_cluster.md b/doc/user/project/clusters/add_existing_cluster.md
index 6752f469e1a6aa30c116e45fa52a3c993d7ea4b0..dce6458b177b477d730998909297dbc4db38c346 100644
--- a/doc/user/project/clusters/add_existing_cluster.md
+++ b/doc/user/project/clusters/add_existing_cluster.md
@@ -220,7 +220,7 @@ integration to work properly.
 WARNING:
 Disabling RBAC means that any application running in the cluster,
 or user who can authenticate to the cluster, has full API access. This is a
-[security concern](../../infrastructure/clusters/connect/index.md#security-implications-for-clusters-connected-with-certificates),
+[security concern](../../infrastructure/clusters/connect/_index.md#security-implications-for-clusters-connected-with-certificates),
 and may not be desirable.
 
 To effectively disable RBAC, global permissions can be applied granting full access:
diff --git a/doc/user/project/clusters/add_remove_clusters.md b/doc/user/project/clusters/add_remove_clusters.md
index eca65eb09d895518820c5b33482ccfa9a44ea6ab..0a58ac88f889ebd48a2f802950816e1d64e32bce 100644
--- a/doc/user/project/clusters/add_remove_clusters.md
+++ b/doc/user/project/clusters/add_remove_clusters.md
@@ -13,7 +13,7 @@ DETAILS:
 
 WARNING:
 This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/327908) in GitLab 14.0.
-To create and manage a new cluster use [Infrastructure as Code](../../infrastructure/iac/index.md).
+To create and manage a new cluster use [Infrastructure as Code](../../infrastructure/iac/_index.md).
 
 ## Disable a cluster
 
diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md
index 9dc8179d7b452916c8f5d2eb8e83817036c584d9..b483c26f68bd8babb8c7dd808462364170b12de9 100644
--- a/doc/user/project/clusters/index.md
+++ b/doc/user/project/clusters/index.md
@@ -14,7 +14,7 @@ This feature was [deprecated](https://gitlab.com/groups/gitlab-org/configure/-/e
 in GitLab 14.5. To connect clusters to GitLab, use the
 [GitLab agent](../../clusters/agent/_index.md).
 
-[Project-level](../../infrastructure/clusters/connect/index.md#cluster-levels-deprecated) Kubernetes clusters
+[Project-level](../../infrastructure/clusters/connect/_index.md#cluster-levels-deprecated) Kubernetes clusters
 allow you to connect a Kubernetes cluster to a project in GitLab.
 
 You can also [connect multiple clusters](multiple_kubernetes_clusters.md)
diff --git a/doc/user/project/deploy_boards.md b/doc/user/project/deploy_boards.md
index 3478355306daa5a874d9fa9ec80a7820c480b671..ea0d78f5ebb6898586bca5bf32ca82de06b752aa 100644
--- a/doc/user/project/deploy_boards.md
+++ b/doc/user/project/deploy_boards.md
@@ -93,7 +93,7 @@ To display the deploy boards for a specific [environment](../../ci/environments/
 
 1. [Configure GitLab Runner](../../ci/runners/_index.md) with the [`docker`](https://docs.gitlab.com/runner/executors/docker.html) or
    [`kubernetes`](https://docs.gitlab.com/runner/executors/kubernetes/index.html) executor.
-1. Configure the [Kubernetes integration](../infrastructure/clusters/index.md) in your project for the
+1. Configure the [Kubernetes integration](../infrastructure/clusters/_index.md) in your project for the
    cluster. The Kubernetes namespace is of particular note as you need it
    for your deployment scripts (exposed by the `KUBE_NAMESPACE` deployment variable).
 1. Ensure Kubernetes annotations of `app.gitlab.com/env: $CI_ENVIRONMENT_SLUG`
diff --git a/doc/user/project/integrations/aws_codepipeline.md b/doc/user/project/integrations/aws_codepipeline.md
index 180aaf5d65feecb4b3e31cb8233ee8da8fe0fb2b..0b8740e242870829703b2774a3253f920aafbd45 100644
--- a/doc/user/project/integrations/aws_codepipeline.md
+++ b/doc/user/project/integrations/aws_codepipeline.md
@@ -62,7 +62,7 @@ Now you've connected AWS CodeSuite to GitLab.com, you can create or edit a pipel
    You can also pick an option from the dialog, or type a new path manually.
    For more information about the:
    - Path and namespace, see the `path_with_namespace` field in the [projects API](../../../api/projects.md#get-a-single-project).
-   - Namespace in GitLab, see [namespaces](../../namespace/index.md).
+   - Namespace in GitLab, see [namespaces](../../namespace/_index.md).
 
 1. In **Branch name**, select the branch where you want your pipeline to detect source changes.
    If the branch name does not populate automatically, this might be because of one of the following:
diff --git a/doc/user/project/members/sharing_projects_groups.md b/doc/user/project/members/sharing_projects_groups.md
index b012a952732d14220ec0d3e0e0bbc748eab1e40d..f50c2c581b8bf9738959b9831579a0c93b32b033 100644
--- a/doc/user/project/members/sharing_projects_groups.md
+++ b/doc/user/project/members/sharing_projects_groups.md
@@ -48,7 +48,7 @@ For example, you can invite:
 - A **public** group to a **public** project.
 
 If the project's top-level group does not allow the project to be shared outside the hierarchy,
-the invited group or subgroup must be in the project's [namespace](../../namespace/index.md).
+the invited group or subgroup must be in the project's [namespace](../../namespace/_index.md).
 
 ### Member access and roles
 
@@ -135,7 +135,7 @@ Private groups are:
 The **Members** tab shows:
 
 - Members who were directly added to the project.
-- Inherited members of the group [namespace](../../namespace/index.md) that the project was added to.
+- Inherited members of the group [namespace](../../namespace/_index.md) that the project was added to.
 
 The members of the invited group are not displayed on the **Members** tab unless the `webui_members_inherited_users` feature flag is enabled.
 
diff --git a/doc/user/project/pages/getting_started_part_one.md b/doc/user/project/pages/getting_started_part_one.md
index 5ee2a9e20b592f8f224f499b88a4975f6347d691..c8012acdf5cc088c4fc2a0af16e3a386f887b4df 100644
--- a/doc/user/project/pages/getting_started_part_one.md
+++ b/doc/user/project/pages/getting_started_part_one.md
@@ -23,7 +23,7 @@ replace the Pages wildcard domain on GitLab.com (`*.gitlab.io`) with your own.
 If you set up a GitLab Pages project on GitLab,
 it's automatically accessible under a
 subdomain of `namespace.example.io`.
-The [`namespace`](../../namespace/index.md)
+The [`namespace`](../../namespace/_index.md)
 is defined by your username on GitLab.com,
 or the group name you created this project under.
 For GitLab Self-Managed, replace `example.io`
diff --git a/doc/user/project/repository/forking_workflow.md b/doc/user/project/repository/forking_workflow.md
index c27939d90a3f72be8032f82874666855f7517a4f..b61f1343b3136911bba9b25d2c640c50d8864883 100644
--- a/doc/user/project/repository/forking_workflow.md
+++ b/doc/user/project/repository/forking_workflow.md
@@ -33,7 +33,7 @@ To fork an existing project in GitLab:
 
 1. On the project's homepage, in the upper-right corner, select **Fork** (**{fork}**).
 1. Optional. Edit the **Project name**.
-1. For **Project URL**, select the [namespace](../../namespace/index.md)
+1. For **Project URL**, select the [namespace](../../namespace/_index.md)
    your fork should belong to.
 1. Add a **Project slug**. This value becomes part of the URL to your fork.
    It must be unique in the namespace.
diff --git a/doc/user/project/working_with_projects.md b/doc/user/project/working_with_projects.md
index 55f2023d4922be2f01907fb42a36730f1c258483..13790aa656a57fc71ccd41b7b8b52a81119fc70b 100644
--- a/doc/user/project/working_with_projects.md
+++ b/doc/user/project/working_with_projects.md
@@ -501,7 +501,7 @@ When you leave a project:
 
 Prerequisites:
 
-- You can leave a project this way only when a project is part of a group under a [group namespace](../namespace/index.md).
+- You can leave a project this way only when a project is part of a group under a [group namespace](../namespace/_index.md).
 - You must be a [direct member](members/index.md#membership-types) of the project.
 
 To leave a project:
diff --git a/doc/user/storage_management_automation.md b/doc/user/storage_management_automation.md
index b32fba5d59e99d9a45adcf56b24626ab40a5c26e..5e1b7890ec6cae146aad3c5870b24226abca2858 100644
--- a/doc/user/storage_management_automation.md
+++ b/doc/user/storage_management_automation.md
@@ -192,7 +192,7 @@ and recursively analyze all subgroups and projects. You can also analyze differe
 
 Here's an example of an algorithm to analyze multiple subgroups and projects:
 
-1. Fetch the top-level namespace ID. You can copy the ID value from the [namespace/group overview](namespace/index.md#types-of-namespaces).
+1. Fetch the top-level namespace ID. You can copy the ID value from the [namespace/group overview](namespace/_index.md#types-of-namespaces).
 1. Fetch all [subgroups](../api/groups.md#list-subgroups) from the top-level group, and save the IDs in a list.
 1. Loop over all groups and fetch all [projects from each group](../api/groups.md#list-projects) and save the IDs in a list.
 1. Identify the storage type to analyze, and collect the information from project attributes, like project statistics, and job artifacts.
diff --git a/ee/app/helpers/ee/operations_helper.rb b/ee/app/helpers/ee/operations_helper.rb
index b2cb68a3569d21de341f419c62863e1bcb92dd7e..47f8a7b3865ff23ab412385001f6047de160b3d8 100644
--- a/ee/app/helpers/ee/operations_helper.rb
+++ b/ee/app/helpers/ee/operations_helper.rb
@@ -9,8 +9,8 @@ def operations_data
         'add-path' => add_operations_project_path(format: :json),
         'list-path' => operations_path(format: :json),
         'empty-dashboard-svg-path' => image_path('illustrations/empty-state/empty-radar-md.svg'),
-        'empty-dashboard-help-path' => help_page_path('user/operations_dashboard/index.md'),
-        'operations-dashboard-help-path' => help_page_path('user/operations_dashboard/index.md')
+        'empty-dashboard-help-path' => help_page_path('user/operations_dashboard/_index.md'),
+        'operations-dashboard-help-path' => help_page_path('user/operations_dashboard/_index.md')
       }
     end
 
diff --git a/spec/frontend/organizations/settings/general/components/visibility_level_spec.js b/spec/frontend/organizations/settings/general/components/visibility_level_spec.js
index 3785cb0150c9ccdb71484ec56630e677b983f47b..49c1c4eaee9f0c54af87ef8c97ef32e3e91a20b2 100644
--- a/spec/frontend/organizations/settings/general/components/visibility_level_spec.js
+++ b/spec/frontend/organizations/settings/general/components/visibility_level_spec.js
@@ -55,7 +55,7 @@ describe('VisibilityLevel', () => {
   it('renders label description with link to docs', () => {
     expect(wrapper.text()).toContain('Who can see this organization?');
     expect(findHelpPageLink().props()).toEqual({
-      href: 'user/organization/index',
+      href: 'user/organization/_index',
       anchor: 'view-an-organizations-visibility-level',
     });
     expect(findHelpPageLink().text()).toBe('Learn more about visibility levels');
diff --git a/spec/frontend/organizations/shared/components/new_edit_form_spec.js b/spec/frontend/organizations/shared/components/new_edit_form_spec.js
index 40457ea50302849c3d001bbe78b8bda62b9f28e0..9316044b1b3a621141b653e851fd8d6f7554866c 100644
--- a/spec/frontend/organizations/shared/components/new_edit_form_spec.js
+++ b/spec/frontend/organizations/shared/components/new_edit_form_spec.js
@@ -90,7 +90,7 @@ describe('NewEditForm', () => {
     expect(findDescriptionField().exists()).toBe(true);
     expect(wrapper.findComponent(MarkdownField).props()).toMatchObject({
       markdownPreviewPath: defaultProvide.previewMarkdownPath,
-      markdownDocsPath: helpPagePath('user/organization/index', {
+      markdownDocsPath: helpPagePath('user/organization/_index', {
         anchor: 'supported-markdown-for-organization-description',
       }),
       textareaValue: '',
@@ -186,7 +186,7 @@ describe('NewEditForm', () => {
     });
     expect(wrapper.text()).toContain('Who can see this organization?');
     expect(findHelpPageLink().props()).toEqual({
-      href: 'user/organization/index',
+      href: 'user/organization/_index',
       anchor: 'view-an-organizations-visibility-level',
     });
     expect(findHelpPageLink().text()).toBe('Learn more about visibility levels');
diff --git a/spec/frontend/super_sidebar/components/organization_switcher_spec.js b/spec/frontend/super_sidebar/components/organization_switcher_spec.js
index a2be9e5cfe5bd62544b3d6b242fd99b713bb6471..080b54bccf922d0ad7f2ca8c99c580eacf1e5f7d 100644
--- a/spec/frontend/super_sidebar/components/organization_switcher_spec.js
+++ b/spec/frontend/super_sidebar/components/organization_switcher_spec.js
@@ -185,7 +185,7 @@ describe('OrganizationSwitcher', () => {
           'Switching between organizations is not currently supported.',
         );
         expect(wrapper.findComponent(GlLink).attributes('href')).toBe(
-          helpPagePath('user/organization/index.md', {
+          helpPagePath('user/organization/_index.md', {
             anchor: 'switch-organizations',
           }),
         );
diff --git a/spec/presenters/instance_clusterable_presenter_spec.rb b/spec/presenters/instance_clusterable_presenter_spec.rb
index 1c14e5af351a322381283ffd63a01a407b1c9a0d..71d0ee643350b98f8ac3fa73b5470565bfb62272 100644
--- a/spec/presenters/instance_clusterable_presenter_spec.rb
+++ b/spec/presenters/instance_clusterable_presenter_spec.rb
@@ -24,6 +24,6 @@
   describe '#learn_more_link' do
     subject { presenter.learn_more_link }
 
-    it { is_expected.to include('user/instance/clusters/index') }
+    it { is_expected.to include('user/instance/clusters/_index') }
   end
 end