From 660252eb78e71b83237ac3f34a8f0721977f0836 Mon Sep 17 00:00:00 2001
From: Evan Read <eread@gitlab.com>
Date: Mon, 10 Feb 2025 06:43:49 +0000
Subject: [PATCH] Rename index files for user/infrastructure and user/instance

Also rename index files for user/namespace, user/operations_dashboard,
and user/organization, and update crosslinks.
---
 .../clusters_list/components/clusters_empty_state.vue       | 2 +-
 app/assets/javascripts/organizations/new/components/app.vue | 2 +-
 .../settings/general/components/visibility_level.vue        | 2 +-
 .../organizations/shared/components/new_edit_form.vue       | 4 ++--
 .../super_sidebar/components/organization_switcher.vue      | 2 +-
 app/helpers/projects_helper.rb                              | 2 +-
 app/presenters/instance_clusterable_presenter.rb            | 2 +-
 app/views/clusters/clusters/show.html.haml                  | 2 +-
 .../backup_restore/troubleshooting_backup_gitlab.md         | 2 +-
 doc/administration/integration/terminal.md                  | 2 +-
 doc/administration/terraform_state.md                       | 2 +-
 doc/api/bulk_imports.md                                     | 2 +-
 doc/api/group_clusters.md                                   | 2 +-
 doc/api/instance_clusters.md                                | 2 +-
 doc/api/namespaces.md                                       | 2 +-
 doc/api/projects.md                                         | 6 +++---
 doc/ci/environments/_index.md                               | 2 +-
 doc/ci/environments/configure_kubernetes_deployments.md     | 2 +-
 doc/ci/environments/deployments.md                          | 2 +-
 doc/ci/environments/environments_dashboard.md               | 2 +-
 doc/ci/jobs/ci_job_token.md                                 | 2 +-
 doc/ci/pipelines/compute_minutes.md                         | 2 +-
 doc/development/database/namespaces_storage_statistics.md   | 2 +-
 doc/development/kubernetes.md                               | 2 +-
 doc/development/organization/_index.md                      | 4 ++--
 doc/development/testing_guide/review_apps.md                | 2 +-
 doc/integration/google.md                                   | 2 +-
 doc/operations/incident_management/integrations.md          | 4 ++--
 doc/topics/autodevops/multiple_clusters_auto_devops.md      | 2 +-
 doc/topics/autodevops/requirements.md                       | 2 +-
 doc/topics/git/project.md                                   | 4 ++--
 doc/topics/set_up_organization.md                           | 4 ++--
 doc/tutorials/automate_runner_creation/_index.md            | 2 +-
 doc/tutorials/convert_personal_namespace_to_group/_index.md | 2 +-
 doc/tutorials/fuzz_testing/_index.md                        | 2 +-
 doc/tutorials/move_personal_project_to_group/_index.md      | 2 +-
 doc/tutorials/scrum_events/_index.md                        | 2 +-
 doc/update/versions/gitlab_15_changes.md                    | 2 +-
 doc/user/clusters/agent/ci_cd_workflow.md                   | 2 +-
 doc/user/clusters/agent/install/_index.md                   | 2 +-
 doc/user/clusters/management_project.md                     | 2 +-
 doc/user/duo_workflow/index.md                              | 2 +-
 doc/user/get_started/get_started_deploy_release.md          | 2 +-
 doc/user/get_started/get_started_managing_infrastructure.md | 2 +-
 doc/user/group/_index.md                                    | 2 +-
 doc/user/group/clusters/_index.md                           | 4 ++--
 doc/user/index.md                                           | 2 +-
 doc/user/infrastructure/{index.md => _index.md}             | 2 +-
 doc/user/infrastructure/clusters/{index.md => _index.md}    | 2 +-
 .../infrastructure/clusters/connect/{index.md => _index.md} | 6 +++---
 doc/user/infrastructure/clusters/connect/new_aks_cluster.md | 4 ++--
 .../infrastructure/clusters/connect/new_civo_cluster.md     | 4 ++--
 doc/user/infrastructure/clusters/connect/new_eks_cluster.md | 4 ++--
 doc/user/infrastructure/clusters/connect/new_gke_cluster.md | 4 ++--
 doc/user/infrastructure/clusters/migrate_to_gitlab_agent.md | 2 +-
 doc/user/infrastructure/iac/{index.md => _index.md}         | 0
 doc/user/infrastructure/iac/gitlab_terraform_helpers.md     | 2 +-
 doc/user/infrastructure/iac/mr_integration.md               | 2 +-
 doc/user/instance/clusters/{index.md => _index.md}          | 2 +-
 doc/user/namespace/{index.md => _index.md}                  | 0
 doc/user/operations_dashboard/{index.md => _index.md}       | 0
 doc/user/organization/{index.md => _index.md}               | 4 ++--
 doc/user/packages/terraform_module_registry/index.md        | 2 +-
 doc/user/packages/workflows/build_packages.md               | 2 +-
 doc/user/permissions.md                                     | 6 +++---
 doc/user/profile/index.md                                   | 2 +-
 doc/user/profile/preferences.md                             | 2 +-
 doc/user/project/canary_deployments.md                      | 2 +-
 doc/user/project/clusters/add_eks_clusters.md               | 4 ++--
 doc/user/project/clusters/add_existing_cluster.md           | 2 +-
 doc/user/project/clusters/add_remove_clusters.md            | 2 +-
 doc/user/project/clusters/index.md                          | 2 +-
 doc/user/project/deploy_boards.md                           | 2 +-
 doc/user/project/integrations/aws_codepipeline.md           | 2 +-
 doc/user/project/members/sharing_projects_groups.md         | 4 ++--
 doc/user/project/pages/getting_started_part_one.md          | 2 +-
 doc/user/project/repository/forking_workflow.md             | 2 +-
 doc/user/project/working_with_projects.md                   | 2 +-
 doc/user/storage_management_automation.md                   | 2 +-
 ee/app/helpers/ee/operations_helper.rb                      | 4 ++--
 .../settings/general/components/visibility_level_spec.js    | 2 +-
 .../organizations/shared/components/new_edit_form_spec.js   | 4 ++--
 .../super_sidebar/components/organization_switcher_spec.js  | 2 +-
 spec/presenters/instance_clusterable_presenter_spec.rb      | 2 +-
 84 files changed, 102 insertions(+), 102 deletions(-)
 rename doc/user/infrastructure/{index.md => _index.md} (77%)
 rename doc/user/infrastructure/clusters/{index.md => _index.md} (98%)
 rename doc/user/infrastructure/clusters/connect/{index.md => _index.md} (88%)
 rename doc/user/infrastructure/iac/{index.md => _index.md} (100%)
 rename doc/user/instance/clusters/{index.md => _index.md} (96%)
 rename doc/user/namespace/{index.md => _index.md} (100%)
 rename doc/user/operations_dashboard/{index.md => _index.md} (100%)
 rename doc/user/organization/{index.md => _index.md} (98%)

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 d7631a49a27a..d30d913daa35 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 a9141478022e..200f3d22321f 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 8faeeb312d4b..2cf9bf74cf18 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 61258da56a27..746ca663890e 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 dc993527357f..e5699f4e4385 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 e3e3d3ebce0a..35be9f648a78 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 d081b819bc74..9c3ef0762457 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 89ffa44bf2cc..e7567d305e51 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 2c62a3f7d26d..67e363faffb7 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 f40cc32cbd3a..68b57040cd44 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 6bb43e0cc9aa..442f4c4f999b 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 74e3dd1c3d08..4a45830e6b82 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 efa255d4f34d..dedbaaa1fbdc 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 6cb17e1b019f..2ac0122dc6f6 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 677b75df2015..ae3a11e59a09 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 5accaaf0382a..eb6ce16cc11b 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 449d84dd6ca6..e8a1cfe752ab 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 b94ba149412c..07cac7fa04e7 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 c107d2dd5488..d0cc9574a4d8 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 4e391769b44d..4820b2792fbe 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 cb19cd6ce6ec..91bcf03fe3c7 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 8fc844bc5b25..dbfced340e1c 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 6d6ca85849f3..50afaef86778 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 445f68287aa3..2d9d0d05c69f 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 8d2d7e8fd02e..3b4d1ddc6094 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 847888bb41fe..6698e5066b2b 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 f9726b80b486..c4d2507aa1d2 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 a248ae6073ed..a6b338faf1a4 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 0776ef2fba54..589981f3387e 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 ac7472a53c2e..6199bde4cb84 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 813f20423468..7de8adf7d529 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 9d486d52c6fd..715250258bc5 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 649d63165db4..15fed723b63a 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 08ba561284c7..12cf1986348e 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 18e036d2626d..bfde102a546f 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 1eae3649376a..0d3cdbce35fb 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 14de25dee85a..50ca75bb75b6 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 c4bae0d1ccbe..5729a55be90d 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 28db0731ffc9..102a21488975 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 21915766ec3c..9773bfc025f6 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 fe955f16f655..71625a3237d0 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 a696cca5b4dc..8f0248f814f6 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 aab8e12543ad..3b7d2e81355b 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 16cbd40b37c0..8ef6126c60e2 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 4354b3fc10cc..b13f2ede0d1e 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 014bc2bdf5a4..00069cb433d7 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 30fe550d23b4..7cea1a87cd3b 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 5c88b7882158..deb12ca3d26c 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 27d1a48f2cb8..a306934f27b7 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 d0a5a99fcea7..6c2a11968b8b 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 a38be10548b3..a206bec4bbe6 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 b25b0f83d02f..7c357a713086 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 6b8451f2834a..2cef99ae43b9 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 361a92d5f145..94a7dd9d9e15 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 e68a88601da5..5100b8682a47 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 d25cc9e364e3..00e208b00312 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 8434e0f48a91..c4c4dc5dcb0c 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 834d93f74231..300d7bda5e01 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 5ed162a6ff94..e96d055d1b36 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 aac44d37607a..72421a8a5930 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 42b867558202..f166d15c5b2d 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 637ceece049c..908a21439674 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 63fb162be56c..b09116823f77 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 9465dd693336..93c3ac3f6c8f 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 f8df78f4dd91..91bc20e004c0 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 b13e0ccfdb81..57cb224011e2 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 6752f469e1a6..dce6458b177b 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 eca65eb09d89..0a58ac88f889 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 9dc8179d7b45..b483c26f68bd 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 3478355306da..ea0d78f5ebb6 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 180aaf5d65fe..0b8740e24287 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 b012a952732d..f50c2c581b8b 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 5ee2a9e20b59..c8012acdf5cc 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 c27939d90a3f..b61f1343b313 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 55f2023d4922..13790aa656a5 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 b32fba5d59e9..5e1b7890ec6c 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 b2cb68a3569d..47f8a7b3865f 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 3785cb0150c9..49c1c4eaee9f 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 40457ea50302..9316044b1b3a 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 a2be9e5cfe5b..080b54bccf92 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 1c14e5af351a..71d0ee643350 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
-- 
GitLab