diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index 9c20a3632a5d58a23eb9c25dd7bbbbfdd8d1f615..0f3e718be3aa6c5c303d3e2a906bed88c5e07c37 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -306,7 +306,7 @@ def default_autocomplete_admin
   # Autocomplete results for internal help pages
   def help_autocomplete
     [
-      { category: "Help", label: _("API Help"),                     url: help_page_path("api/index.md") },
+      { category: "Help", label: _("API Help"),                     url: help_page_path("api/_index.md") },
       { category: "Help", label: _("Markdown Help"),                url: help_page_path("user/markdown.md") },
       { category: "Help", label: _("Permissions Help"),             url: help_page_path("user/permissions.md") },
       { category: "Help", label: _("Public Access Help"),           url: help_page_path("user/public_access.md") },
diff --git a/doc/administration/get_started.md b/doc/administration/get_started.md
index 40ef6581f3bfe311d3f90cb60095687b04724438..2bbab3db556c15125e7fcdd388bc40fd174ac12f 100644
--- a/doc/administration/get_started.md
+++ b/doc/administration/get_started.md
@@ -256,7 +256,7 @@ You can make changes to your default rate limits from the **Admin** area. For mo
 - Review the [rate limit on raw endpoints](settings/rate_limits_on_raw_endpoints.md). The default setting is 300 requests per minute for raw file access.
 - Review the [import/export rate limits](settings/import_export_rate_limits.md) of the six active defaults.
 
-For more information about API and rate limits, see our [API page](../api/rest/index.md).
+For more information about API and rate limits, see our [API page](../api/rest/_index.md).
 
 ## API and rate limits for GitLab SaaS
 
@@ -270,7 +270,7 @@ Rate limits also improve the security of your application.
 You can make changes to your default rate limits from the **Admin** area. For more information about configuration, see the [**Admin** area page](../security/rate_limits.md#configurable-limits).
 
 - Review the rate limit page.
-- Read our [API page](../api/rest/index.md) for more information about API and rate limiting.
+- Read our [API page](../api/rest/_index.md) for more information about API and rate limiting.
 
 ### GitLab SaaS-specific block and error responses
 
diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md
index f1c15b1bb553bc5aec2f4a7c9d36d01627cbf003..23da4b10edbcb6c692b3f3a392bf936aa4cc0411 100644
--- a/doc/administration/instance_limits.md
+++ b/doc/administration/instance_limits.md
@@ -391,7 +391,7 @@ and to limit memory consumption.
 When using offset-based pagination in the REST API, there is a limit to the maximum
 requested offset into the set of results. This limit is only applied to endpoints that
 also support keyset-based pagination. More information about pagination options can be
-found in the [API documentation section on pagination](../api/rest/index.md#pagination).
+found in the [API documentation section on pagination](../api/rest/_index.md#pagination).
 
 To set this limit for a GitLab Self-Managed instance, run the following in the
 [GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
diff --git a/doc/api/index.md b/doc/api/_index.md
similarity index 54%
rename from doc/api/index.md
rename to doc/api/_index.md
index eab0ee2c3be299deb3459258bd2d41bf2e9bc5e3..f87244ea2f200433c4ade3078291a7dacb371f2c 100644
--- a/doc/api/index.md
+++ b/doc/api/_index.md
@@ -2,13 +2,12 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Extend with GitLab
 ---
 
-# Extend with GitLab
-
 Automate with GitLab and integrate with external applications.
 
 | | | |
 |--|--|--|
-| [**Integrate with GitLab**](../integration/index.md)<br>Projects, issues, authentication, security providers. | [**Webhooks**](../user/project/integrations/webhooks.md)<br>Custom HTTP callbacks, used to send events. | [**REST API**](rest/index.md)<br>Programmatic interaction with GitLab. |
-| [**GraphQL API**](graphql/index.md)<br>Programmatic interaction with GitLab. | [**OAuth 2.0 identity provider API**](oauth2.md)<br>Third-party authorization to GitLab. | [**Editor and IDE extensions**](../editor_extensions/_index.md)<br>Visual Studio Code, JetBrains, Neovim, GitLab CLI. |
+| [**Integrate with GitLab**](../integration/index.md)<br>Projects, issues, authentication, security providers. | [**Webhooks**](../user/project/integrations/webhooks.md)<br>Custom HTTP callbacks, used to send events. | [**REST API**](rest/_index.md)<br>Programmatic interaction with GitLab. |
+| [**GraphQL API**](graphql/_index.md)<br>Programmatic interaction with GitLab. | [**OAuth 2.0 identity provider API**](oauth2.md)<br>Third-party authorization to GitLab. | [**Editor and IDE extensions**](../editor_extensions/_index.md)<br>Visual Studio Code, JetBrains, Neovim, GitLab CLI. |
diff --git a/doc/api/access_requests.md b/doc/api/access_requests.md
index 1b003ffa419770cc65c2b6e796f43cc9e89b68e0..87778efee51409a3bb859f31e40bc6445a773eb2 100644
--- a/doc/api/access_requests.md
+++ b/doc/api/access_requests.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Group and project access requests API
 ---
 
-# Group and project access requests API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -37,7 +36,7 @@ GET /projects/:id/access_requests
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 Example request:
 
@@ -86,7 +85,7 @@ POST /projects/:id/access_requests
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group or project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group or project](rest/_index.md#namespaced-paths) |
 
 Example request:
 
@@ -121,7 +120,7 @@ PUT /projects/:id/access_requests/:user_id/approve
 
 | Attribute      | Type           | Required | Description |
 |----------------|----------------|----------|-------------|
-| `id`           | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `user_id`      | integer        | yes      | The user ID of the access requester |
 | `access_level` | integer        | no       | A valid access level (defaults: `30`, the Developer role) |
 
@@ -158,7 +157,7 @@ DELETE /projects/:id/access_requests/:user_id
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `user_id` | integer        | yes      | The user ID of the access requester |
 
 Example request:
diff --git a/doc/api/admin/token.md b/doc/api/admin/token.md
index 9d60797e452e8ba17c696fbea2531c13d4386df1..f71a23b99d2b9b56bee94d94049fe336d3dd6392 100644
--- a/doc/api/admin/token.md
+++ b/doc/api/admin/token.md
@@ -3,10 +3,9 @@ stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API that exposes token information."
+title: Token information API
 ---
 
-# Token information API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/admin_sidekiq_queues.md b/doc/api/admin_sidekiq_queues.md
index d6c70dcd7dd4623ddbe82e720047a0437d9ffc45..64818dd94f737788a1cb3dda2d3e37ea8a050ef1 100644
--- a/doc/api/admin_sidekiq_queues.md
+++ b/doc/api/admin_sidekiq_queues.md
@@ -2,10 +2,9 @@
 stage: Systems
 group: Distribution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Sidekiq queues administration API
 ---
 
-# Sidekiq queues administration API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/alert_management_alerts.md b/doc/api/alert_management_alerts.md
index ae688e9f05ad9a415b6eb7ca886114193820fc33..0b449579e5838ce5994176770cb26d5d54d303cc 100644
--- a/doc/api/alert_management_alerts.md
+++ b/doc/api/alert_management_alerts.md
@@ -2,10 +2,9 @@
 stage: Monitor
 group: Platform Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Alert Management alerts API
 ---
 
-# Alert Management alerts API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -21,7 +20,7 @@ POST /projects/:id/alert_management_alerts/:alert_iid/metric_images
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `alert_iid` | integer        | yes      | The internal ID of a project's alert. |
 
 Example request:
@@ -55,7 +54,7 @@ GET /projects/:id/alert_management_alerts/:alert_iid/metric_images
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `alert_iid` | integer        | yes      | The internal ID of a project's alert. |
 
 Example request:
@@ -96,7 +95,7 @@ PUT /projects/:id/alert_management_alerts/:alert_iid/metric_images/:image_id
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `alert_iid` | integer        | yes      | The internal ID of a project's alert. |
 | `image_id`  | integer        | yes      | The ID of the image. |
 | `url`       | string         | no       | The URL to view more metrics information. |
@@ -132,7 +131,7 @@ DELETE /projects/:id/alert_management_alerts/:alert_iid/metric_images/:image_id
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `alert_iid` | integer        | yes      | The internal ID of a project's alert. |
 | `image_id`  | integer        | yes      | The ID of the image. |
 
diff --git a/doc/api/api_resources.md b/doc/api/api_resources.md
index 5c13019866ba2df9647098d68de4507eb86770c4..bf0f82588a56bc3ed23598237846055a97699e30 100644
--- a/doc/api/api_resources.md
+++ b/doc/api/api_resources.md
@@ -2,15 +2,14 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: REST API resources
 ---
 
-# REST API resources
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
 
-Available resources for the [GitLab REST API](index.md) can be grouped in the following contexts:
+Available resources for the [GitLab REST API](_index.md) can be grouped in the following contexts:
 
 - [Projects](#project-resources)
 - [Groups](#group-resources)
@@ -100,7 +99,7 @@ The following API resources are available in the project context:
 | [Protected tags](protected_tags.md)                                            | `/projects/:id/protected_tags` |
 | [PyPI packages](packages/pypi.md)                                              | `/projects/:id/packages/pypi` (also available for groups) |
 | [Release links](releases/links.md)                                             | `/projects/:id/releases/.../assets/links` |
-| [Releases](releases/index.md)                                                  | `/projects/:id/releases` |
+| [Releases](releases/_index.md)                                                 | `/projects/:id/releases` |
 | [Remote mirrors](remote_mirrors.md)                                            | `/projects/:id/remote_mirrors` |
 | [Repositories](repositories.md)                                                | `/projects/:id/repository` |
 | [Repository files](repository_files.md)                                        | `/projects/:id/repository/files` |
diff --git a/doc/api/appearance.md b/doc/api/appearance.md
index c365fbff26744953e055fc094ce678c038a76f91..9275c344a5527e61214792155caeb25c92e02666 100644
--- a/doc/api/appearance.md
+++ b/doc/api/appearance.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Application appearance API
 ---
 
-# Application appearance API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/applications.md b/doc/api/applications.md
index be12169164bce27b66ae7b1c5842d8359b7b046d..d0b1d49a37eb7c4f48be0b96fa6303b67b28a6e3 100644
--- a/doc/api/applications.md
+++ b/doc/api/applications.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Applications API
 ---
 
-# Applications API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/audit_events.md b/doc/api/audit_events.md
index b6bb98a5927a7f90235eb68becff24f44626c3d4..821740d8af4744300f4c02af57e9c5351fa72172 100644
--- a/doc/api/audit_events.md
+++ b/doc/api/audit_events.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Compliance
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Audit events API
 ---
 
-# Audit events API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -38,10 +37,10 @@ GET /audit_events
 | `entity_type` | string | no | Return audit events for the given entity type. Valid values are: `User`, `Group`, `Project`, or `Gitlab::Audit::InstanceScope`. |
 | `entity_id` | integer | no | Return audit events for the given entity ID. Requires `entity_type` attribute to be present.                    |
 
-This endpoint supports both offset-based and [keyset-based](rest/index.md#keyset-based-pagination) pagination. You should use keyset-based
+This endpoint supports both offset-based and [keyset-based](rest/_index.md#keyset-based-pagination) pagination. You should use keyset-based
 pagination when requesting consecutive pages of results.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/audit_events"
@@ -178,7 +177,7 @@ A user with:
 - The Owner role can retrieve group audit events of all users.
 - The Developer or Maintainer role is limited to group audit events based on their individual actions.
 
-This endpoint supports both offset-based and [keyset-based](rest/index.md#keyset-based-pagination) pagination. Keyset-based
+This endpoint supports both offset-based and [keyset-based](rest/_index.md#keyset-based-pagination) pagination. Keyset-based
 pagination is recommended when requesting consecutive pages of results.
 
 ### Retrieve all group audit events
@@ -191,14 +190,14 @@ GET /groups/:id/audit_events
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `created_after` | string | no | Return group audit events created on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ)`  |
 | `created_before` | string | no | Return group audit events created on or before the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
 
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/groups/60/audit_events"
@@ -255,7 +254,7 @@ GET /groups/:id/audit_events/:audit_event_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `audit_event_id` | integer | yes | The ID of the audit event |
 
 ```shell
@@ -301,14 +300,14 @@ GET /projects/:id/audit_events
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `created_after` | string | no | Return project audit events created on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`)  |
 | `created_before` | string | no | Return project audit events created on or before the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
 
 By default, `GET` requests return 20 results at a time because the API results are paginated.
-When requesting consecutive pages of results, you should use [keyset pagination](rest/index.md#keyset-based-pagination).
+When requesting consecutive pages of results, you should use [keyset pagination](rest/_index.md#keyset-based-pagination).
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://primary.example.com/api/v4/projects/7/audit_events"
@@ -369,7 +368,7 @@ GET /projects/:id/audit_events/:audit_event_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `audit_event_id` | integer | yes | The ID of the audit event |
 
 ```shell
diff --git a/doc/api/avatar.md b/doc/api/avatar.md
index 68f9c20b058882ae816ca19f2cc48ebe525d69e1..024fed3400823718704dcfefe8775e69d6d29c39 100644
--- a/doc/api/avatar.md
+++ b/doc/api/avatar.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Avatar API
 ---
 
-# Avatar API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/boards.md b/doc/api/boards.md
index 30a338434fc5e98224be5df821bcbd761adb6b2d..aaea90b266703680fcf301e57390ab510ec6129a 100644
--- a/doc/api/boards.md
+++ b/doc/api/boards.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project issue boards API
 ---
 
-# Project issue boards API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -25,7 +24,7 @@ GET /projects/:id/boards
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/boards"
@@ -109,7 +108,7 @@ GET /projects/:id/boards/:board_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 
 ```shell
@@ -186,7 +185,7 @@ POST /projects/:id/boards
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the new board. |
 
 ```shell
@@ -227,7 +226,7 @@ PUT /projects/:id/boards/:board_id
 
 | Attribute                    | Type           | Required | Description |
 | ---------------------------- | -------------- | -------- | ----------- |
-| `id`                         | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                         | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id`                   | integer        | yes      | The ID of a board. |
 | `name`                       | string         | no       | The new name of the board. |
 | `assignee_id`                | integer        | no       | The assignee the board should be scoped to. Premium and Ultimate only. |
@@ -307,7 +306,7 @@ DELETE /projects/:id/boards/:board_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 
 ```shell
@@ -325,7 +324,7 @@ GET /projects/:id/boards/:board_id/lists
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 
 ```shell
@@ -385,7 +384,7 @@ GET /projects/:id/boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `list_id`| integer | yes | The ID of a board's list. |
 
@@ -420,7 +419,7 @@ POST /projects/:id/boards/:board_id/lists
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `label_id` | integer | no | The ID of a label. |
 | `assignee_id` | integer | no | The ID of a user. Premium and Ultimate only. |
@@ -463,7 +462,7 @@ PUT /projects/:id/boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `list_id` | integer | yes | The ID of a board's list. |
 | `position` | integer | yes | The position of the list. |
@@ -499,7 +498,7 @@ DELETE /projects/:id/boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `list_id` | integer | yes | The ID of a board's list. |
 
diff --git a/doc/api/branches.md b/doc/api/branches.md
index db421c3ec23350cc3443784318fc2d88f7623f65..9a63911a3422ede6922b3ebee8b4891c9f24509c 100644
--- a/doc/api/branches.md
+++ b/doc/api/branches.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for Git branches in GitLab."
+title: Branches API
 ---
 
-# Branches API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -30,7 +29,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 |:----------|:---------------|:---------|:------------|
-| `id`      | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).|
+| `id`      | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).|
 | `search`  | string         | no       | Return list of branches containing the search string. Use `^term` to find branches that begin with `term`, and `term$` to find branches that end with `term`. |
 | `regex`   | string         | no       | Return list of branches with names matching a [re2](https://github.com/google/re2/wiki/Syntax) regular expression. |
 
@@ -93,8 +92,8 @@ Parameters:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
-| `branch`  | string            | yes      | [URL-encoded name](rest/index.md#namespaced-paths) of the branch. |
+| `id`      | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
+| `branch`  | string            | yes      | [URL-encoded name](rest/_index.md#namespaced-paths) of the branch. |
 
 Example request:
 
@@ -158,7 +157,7 @@ Parameters:
 
 | Attribute | Type    | Required | Description |
 |-----------|---------|----------|-------------|
-| `id`      | integer | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `branch`  | string  | yes      | Name of the branch. |
 | `ref`     | string  | yes      | Branch name or commit SHA to create branch from. |
 
@@ -218,7 +217,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `branch`  | string         | yes      | Name of the branch. |
 
 Example request:
@@ -249,7 +248,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description                                                                                                  |
 |:----------|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------|
-| `id`      | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
diff --git a/doc/api/broadcast_messages.md b/doc/api/broadcast_messages.md
index dfa69cccb771798edef46069070881d82546dbd5..30afbb54c629be298e07b4535d9102033e70f9fb 100644
--- a/doc/api/broadcast_messages.md
+++ b/doc/api/broadcast_messages.md
@@ -2,10 +2,9 @@
 stage: Growth
 group: Acquisition
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Broadcast Messages API
 ---
 
-# Broadcast Messages API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/bulk_imports.md b/doc/api/bulk_imports.md
index 04a2fd7c19ed2c6bef35aade944bda26e3de1fcd..791e13076dc11e020338f01cc06ecd0aeb7e5d95 100644
--- a/doc/api/bulk_imports.md
+++ b/doc/api/bulk_imports.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group and project migration by direct transfer API
 ---
 
-# Group and project migration by direct transfer API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/chat.md b/doc/api/chat.md
index 8eacf5aa51d2a9725a8524a40336ed183ce167c9..28bb119c23c9b901e0a61dece922ba0adead42bf 100644
--- a/doc/api/chat.md
+++ b/doc/api/chat.md
@@ -3,10 +3,9 @@ stage: AI-Powered
 group: Duo Chat
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for Duo Chat."
+title: GitLab Duo Chat Completions API
 ---
 
-# GitLab Duo Chat Completions API
-
 The GitLab Duo Chat Completions API generates Chat responses. This API is for internal use only.
 
 ## Generate Chat responses
diff --git a/doc/api/cluster_agents.md b/doc/api/cluster_agents.md
index 37763adad8f6d8fface3e9a3be90ed2f34f5d2b2..6ad13887e61e1c57cf75eab788c5ac579e420c27 100644
--- a/doc/api/cluster_agents.md
+++ b/doc/api/cluster_agents.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Agents API
 ---
 
-# Agents API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ Parameters:
 
 | Attribute | Type              | Required  | Description                                                                                                     |
 |-----------|-------------------|-----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`      | integer or string | yes       | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user |
+| `id`      | integer or string | yes       | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user |
 
 Response:
 
@@ -106,7 +105,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description                                                                                                     |
 |------------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user |
+| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user |
 | `agent_id` | integer           | yes      | ID of the agent                                                                                                 |
 
 Response:
@@ -168,7 +167,7 @@ Parameters:
 
 | Attribute | Type              | Required | Description                                                                                                     |
 |-----------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`      | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user |
+| `id`      | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user |
 | `name`    | string            | yes      | Name for the agent                                                                                              |
 
 Response:
@@ -232,7 +231,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description                                                                                                     |
 |------------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user |
+| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user |
 | `agent_id` | integer           | yes      | ID of the agent                                                                                                 |
 
 Example request:
@@ -257,7 +256,7 @@ Supported attributes:
 
 | Attribute  | Type              | Required  | Description                                                                                                      |
 |------------|-------------------|-----------|------------------------------------------------------------------------------------------------------------------|
-| `id`       | integer or string | yes       | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`       | integer or string | yes       | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `agent_id` | integer or string | yes       | ID of the agent.                                                                                                 |
 
 Response:
@@ -326,7 +325,7 @@ Supported attributes:
 
 | Attribute  | Type              | Required | Description                                                                                                       |
 |------------|-------------------|----------|-------------------------------------------------------------------------------------------------------------------|
-| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user.  |
+| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user.  |
 | `agent_id` | integer           | yes      | ID of the agent.                                                                                                  |
 | `token_id` | integer           | yes      | ID of the token.                                                                                                  |
 
@@ -386,7 +385,7 @@ Supported attributes:
 
 | Attribute     | Type              | Required | Description                                                                                                      |
 |---------------|-------------------|----------|------------------------------------------------------------------------------------------------------------------|
-| `id`          | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`          | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `agent_id`    | integer           | yes      | ID of the agent.                                                                                                 |
 | `name`        | string            | yes      | Name for the token.                                                                                              |
 | `description` | string            | no       | Description for the token.                                                                                       |
@@ -450,7 +449,7 @@ Supported attributes:
 
 | Attribute  | Type              | Required | Description                                                                                                      |
 |------------|-------------------|----------|---------------------------------------------------------------------------------------------------------------- -|
-| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`       | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `agent_id` | integer           | yes      | ID of the agent.                                                                                                 |
 | `token_id` | integer           | yes      | ID of the token.                                                                                                 |
 
@@ -485,7 +484,7 @@ Supported attributes:
 
 | Attribute  | Type              | Required  | Description                                                                                                           |
 |------------|-------------------|-----------|-----------------------------------------------------------------------------------------------------------------------|
-| `id`       | integer or string | yes       | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`       | integer or string | yes       | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `agent_id` | integer or string | yes       | ID of the agent.                                                                                                      |
 
 Response:
@@ -538,7 +537,7 @@ Supported attributes:
 
 | Attribute              | Type              | Required | Description                                                                                                            |
 |------------------------|-------------------|----------|------------------------------------------------------------------------------------------------------------------------|
-| `id`                   | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user.  |
+| `id`                   | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user.  |
 | `agent_id`             | integer           | yes      | ID of the agent.                                                                                                       |
 | `url_configuration_id` | integer           | yes      | ID of the URL configuration.                                                                                           |
 
@@ -592,7 +591,7 @@ Supported attributes:
 
 | Attribute     | Type              | Required | Description                                                                                                           |
 |---------------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------------|
-| `id`          | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`          | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `agent_id`    | integer           | yes      | ID of the agent.                                                                                                      |
 | `url`         | string            | yes      | Agent URL for this URL configuration.                                                                                 |
 | `client_cert` | string            | no       | Client certificate in PEM format if mTLS authentication should be used. Must be provided with `client_key`.           |
@@ -669,7 +668,7 @@ Supported attributes:
 
 | Attribute              | Type              | Required | Description                                                                                                           |
 |------------------------|-------------------|----------|-----------------------------------------------------------------------------------------------------------------------|
-| `id`                   | integer or string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`                   | integer or string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `agent_id`             | integer           | yes      | ID of the agent.                                                                                                      |
 | `url_configuration_id` | integer           | yes      | ID of the URL configuration.                                                                                          |
 
diff --git a/doc/api/cluster_discovery.md b/doc/api/cluster_discovery.md
index 9daab85f7fb80baba01470a68fdc8cf55c1e11cb..430eec27ec94c6fec62baba9b8c01ecfa7427d3c 100644
--- a/doc/api/cluster_discovery.md
+++ b/doc/api/cluster_discovery.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Cluster discovery API (certificate-based) (deprecated)
 ---
 
-# Cluster discovery API (certificate-based) (deprecated)
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/code_suggestions.md b/doc/api/code_suggestions.md
index 99b801f806b20b2f9bd8948cf294092dc2b5d182..48f999262cff28a00a9d580da17fe2c3af292df6 100644
--- a/doc/api/code_suggestions.md
+++ b/doc/api/code_suggestions.md
@@ -3,10 +3,9 @@ stage: Create
 group: Code Creation
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for Code Suggestions."
+title: Code Suggestions API
 ---
 
-# Code Suggestions API
-
 Use the Code Suggestions API to access the Code Suggestions feature.
 
 ## Generate code completions
diff --git a/doc/api/commits.md b/doc/api/commits.md
index 1ca805a3bc50cf67c1a085d57b8bd2451f0565a0..14292f550a1536ba1e4e7a47e08198b39d438c29 100644
--- a/doc/api/commits.md
+++ b/doc/api/commits.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for Git commits in GitLab."
+title: Commits API
 ---
 
-# Commits API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -35,7 +34,7 @@ GET /projects/:id/repository/commits
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `ref_name` | string | no | The name of a repository branch, tag or revision range, or if not given the default branch |
 | `since` | string | no | Only commits after or on this date are returned in ISO 8601 format `YYYY-MM-DDTHH:MM:SSZ` |
 | `until` | string | no | Only commits before or on this date are returned in ISO 8601 format `YYYY-MM-DDTHH:MM:SSZ` |
@@ -105,12 +104,12 @@ POST /projects/:id/repository/commits
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `branch` | string | yes | Name of the branch to commit into. To create a new branch, also provide either `start_branch` or `start_sha`, and optionally `start_project`. |
 | `commit_message` | string | yes | Commit message |
 | `start_branch` | string | no | Name of the branch to start the new branch from |
 | `start_sha` | string | no | SHA of the commit to start the new branch from |
-| `start_project` | integer/string | no | The project ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) to start the new branch from. Defaults to the value of `id`. |
+| `start_project` | integer/string | no | The project ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) to start the new branch from. Defaults to the value of `id`. |
 | `actions[]` | array | yes | An array of action hashes to commit as a batch. See the next table for what attributes it can take. |
 | `author_email` | string | no | Specify the commit author's email address |
 | `author_name` | string | no | Specify the commit author's name |
@@ -197,7 +196,7 @@ Example response:
 }
 ```
 
-GitLab supports [form encoding](rest/index.md#array-and-hash-types). The following is an example using Commit API with form encoding:
+GitLab supports [form encoding](rest/_index.md#array-and-hash-types). The following is an example using Commit API with form encoding:
 
 ```shell
 curl --request POST \
@@ -235,7 +234,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha` | string | yes | The commit hash or name of a repository branch or tag |
 | `stats` | boolean | no | Include commit stats. Default is true |
 
@@ -291,7 +290,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha` | string | yes | The commit hash  |
 | `type` | string | no | The scope of commits. Possible values `branch`, `tag`, `all`. Default is `all`.  |
 
@@ -328,7 +327,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description |
 | -------------- | -------------- | -------- | ----------- |
-| `id`           | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `sha`          | string         | yes      | The commit hash. |
 | `first_parent` | boolean        | no       | Follow only the first parent commit upon seeing a merge commit. |
 
@@ -359,7 +358,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha` | string | yes | The commit hash  |
 | `branch` | string | yes | The name of the branch  |
 | `dry_run` | boolean | no | Does not commit any changes. Default is false. |
@@ -434,7 +433,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description                                                                     |
 | --------- | ----           | -------- | -----------                                                                     |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha`     | string         | yes      | Commit SHA to revert                                                            |
 | `branch`  | string         | yes      | Target branch name                                                              |
 | `dry_run` | boolean        | no       | Does not commit any changes. Default is false. |
@@ -504,7 +503,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha` | string | yes | The commit hash or name of a repository branch or tag |
 | `unidiff` | boolean | no | Present diffs in the [unified diff](https://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html) format. Default is false. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/130610) in GitLab 16.5. |
 
@@ -542,7 +541,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha` | string | yes | The commit hash or name of a repository branch or tag |
 
 ```shell
@@ -596,7 +595,7 @@ POST /projects/:id/repository/commits/:sha/comments
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha`       | string  | yes | The commit SHA or name of a repository branch or tag |
 | `note`      | string  | yes | The text of the comment |
 | `path`      | string  | no  | The file path relative to the repository |
@@ -645,7 +644,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha`     | string | yes | The commit hash or name of a repository branch or tag |
 
 ```shell
@@ -707,7 +706,7 @@ GET /projects/:id/repository/commits/:sha/statuses
 
 | Attribute     | Type           | Required | Description                                                                          |
 |---------------|----------------| -------- |--------------------------------------------------------------------------------------|
-| `id`          | integer/string | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).          |
+| `id`          | integer/string | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).          |
 | `sha`         | string         | Yes | Hash of the commit.                                                                      |
 | `ref`         | string         | No  | Name of the branch or tag. Default is the default branch.          |
 | `stage`       | string         | No  | Filter statuses by [build stage](../ci/yaml/index.md#stages). For example, `test`.             |
@@ -786,7 +785,7 @@ POST /projects/:id/statuses/:sha
 
 | Attribute | Type | Required | Description                                                                                                           |
 | --------- | ---- | -------- |-----------------------------------------------------------------------------------------------------------------------|
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                           |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                           |
 | `sha`     | string  | yes   | The commit SHA                                                                                                        |
 | `state`   | string  | yes   | The state of the status. Can be one of the following: `pending`, `running`, `success`, `failed`, `canceled`, `skipped` |
 | `ref`     | string  | no    | The `ref` (branch or tag) to which the status refers. Must be 255 characters or fewer.                                                                  |
@@ -839,7 +838,7 @@ GET /projects/:id/repository/commits/:sha/merge_requests
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha`     | string  | yes   | The commit SHA |
 
 ```shell
@@ -912,7 +911,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `sha` | string | yes | The commit hash or name of a repository branch or tag |
 
 ```shell
diff --git a/doc/api/container_registry.md b/doc/api/container_registry.md
index ee24e5236b00ea7e208d1b54425b5726e5b4c167..af57f0e0f2260251cb8ae12b1cadebce015656eb 100644
--- a/doc/api/container_registry.md
+++ b/doc/api/container_registry.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Container Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Container registry API
 ---
 
-# Container registry API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -26,7 +25,7 @@ PUT /projects/:id/
 
 | Attribute                         | Type           | Required | Description |
 |-----------------------------------|----------------|----------|-------------|
-| `id`                              | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) accessible by the authenticated user. |
+| `id`                              | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) accessible by the authenticated user. |
 | `container_registry_access_level` | string         | no       | The desired visibility of the container registry. One of `enabled` (default), `private`, or `disabled`. |
 
 Descriptions of the possible values for `container_registry_access_level`:
@@ -66,7 +65,7 @@ Example response:
 ## Container registry pagination
 
 By default, `GET` requests return 20 results at a time because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 ## List registry repositories
 
@@ -80,7 +79,7 @@ GET /projects/:id/registry/repositories
 
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
-| `id`         | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) accessible by the authenticated user. |
+| `id`         | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) accessible by the authenticated user. |
 | `tags`       | boolean        | no       | If the parameter is included as true, each repository includes an array of `"tags"` in the response. |
 | `tags_count` | boolean        | no       | If the parameter is included as true, each repository includes `"tags_count"` in the response . |
 
@@ -127,7 +126,7 @@ GET /groups/:id/registry/repositories
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) accessible by the authenticated user. |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) accessible by the authenticated user. |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -215,7 +214,7 @@ DELETE /projects/:id/registry/repositories/:repository_id
 
 | Attribute       | Type           | Required | Description |
 |-----------------|----------------|----------|-------------|
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `repository_id` | integer        | yes      | The ID of registry repository. |
 
 ```shell
@@ -240,7 +239,7 @@ GET /projects/:id/registry/repositories/:repository_id/tags
 
 | Attribute       | Type           | Required | Description |
 |-----------------|----------------|----------|-------------|
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) accessible by the authenticated user. |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) accessible by the authenticated user. |
 | `repository_id` | integer        | yes      | The ID of registry repository. |
 
 ```shell
@@ -275,7 +274,7 @@ GET /projects/:id/registry/repositories/:repository_id/tags/:tag_name
 
 | Attribute       | Type           | Required | Description |
 |-----------------|----------------|----------|-------------|
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) accessible by the authenticated user. |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) accessible by the authenticated user. |
 | `repository_id` | integer        | yes      | The ID of registry repository. |
 | `tag_name`      | string         | yes      | The name of tag. |
 
@@ -309,7 +308,7 @@ DELETE /projects/:id/registry/repositories/:repository_id/tags/:tag_name
 
 | Attribute       | Type           | Required | Description |
 |-----------------|----------------|----------|-------------|
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `repository_id` | integer        | yes      | The ID of registry repository. |
 | `tag_name`      | string         | yes      | The name of tag. |
 
@@ -334,7 +333,7 @@ DELETE /projects/:id/registry/repositories/:repository_id/tags
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `repository_id`     | integer        | yes      | The ID of registry repository. |
 | `name_regex`        | string         | no       | The [re2](https://github.com/google/re2/wiki/Syntax) regex of the name to delete. To delete all tags specify `.*`. **Note:** `name_regex` is deprecated in favor of `name_regex_delete`. This field is validated. |
 | `name_regex_delete` | string         | yes      | The [re2](https://github.com/google/re2/wiki/Syntax) regex of the name to delete. To delete all tags specify `.*`. This field is validated. |
diff --git a/doc/api/container_repository_protection_rules.md b/doc/api/container_repository_protection_rules.md
index d9d51e3db6bcf34e9d0603316ded8e5e8cc64355..f26f914b36e1495d3ad9c561e9b068191d534abe 100644
--- a/doc/api/container_repository_protection_rules.md
+++ b/doc/api/container_repository_protection_rules.md
@@ -3,10 +3,9 @@ stage: Package
 group: Container Registry
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for container repository protection rules in GitLab."
+title: Container repository protection rules API
 ---
 
-# Container repository protection rules API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed
@@ -27,7 +26,7 @@ Supported attributes:
 
 | Attribute                     | Type            | Required | Description                    |
 |-------------------------------|-----------------|----------|--------------------------------|
-| `id`                          | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and a list of container repository protection rules.
 
@@ -80,7 +79,7 @@ Supported attributes:
 
 | Attribute                         | Type           | Required | Description |
 |-----------------------------------|----------------|----------|-------------|
-| `id`                              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `repository_path_pattern`         | string         | Yes      | Container repository path pattern protected by the protection rule. For example `flight/flight-*`. Wildcard character `*` allowed. |
 | `minimum_access_level_for_push`   | string         | No       | Minimum GitLab access level required to push container images to the container registry. For example `maintainer`, `owner` or `admin`. Must be provided when `minimum_access_level_for_delete` is not set. |
 | `minimum_access_level_for_delete` | string         | No       | Minimum GitLab access level required to delete container images in the container registry. For example `maintainer`, `owner`, `admin`. Must be provided when `minimum_access_level_for_push` is not set. |
@@ -124,7 +123,7 @@ Supported attributes:
 
 | Attribute                         | Type           | Required | Description |
 |-----------------------------------|----------------|----------|-------------|
-| `id`                              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `protection_rule_id`              | integer        | Yes      | ID of the protection rule to be updated. |
 | `repository_path_pattern`         | string         | No       | Container repository path pattern protected by the protection rule. For example `flight/flight-*`. Wildcard character `*` allowed. |
 | `minimum_access_level_for_push`   | string         | No       | Minimum GitLab access level required to push container images to the container registry. For example `maintainer`, `owner` or `admin`. Must be provided when `minimum_access_level_for_delete` is not set. To unset the value, use an empty string `""`. |
@@ -167,7 +166,7 @@ Supported attributes:
 
 | Attribute            | Type           | Required | Description |
 |----------------------|----------------|----------|-------------|
-| `id`                 | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                 | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `protection_rule_id` | integer        | Yes      | ID of the container repository protection rule to be deleted. |
 
 If successful, returns [`204 No Content`](rest/troubleshooting.md#status-codes).
diff --git a/doc/api/custom_attributes.md b/doc/api/custom_attributes.md
index 21e382018eccc09d4eabf24ac07d9fb22f6ba3ac..c8f88449921ed5e1d3036b496212bb9e0449205c 100644
--- a/doc/api/custom_attributes.md
+++ b/doc/api/custom_attributes.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Custom Attributes API
 ---
 
-# Custom Attributes API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/database_migrations.md b/doc/api/database_migrations.md
index 11e878790e685f9845a5f4bb4378d6c7ab95f086..1fea960ee2057f9150fd384a9c685f3d5a9a0f88 100644
--- a/doc/api/database_migrations.md
+++ b/doc/api/database_migrations.md
@@ -2,10 +2,9 @@
 stage: Data Access
 group: Database Frameworks
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Database migrations API
 ---
 
-# Database migrations API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/dependencies.md b/doc/api/dependencies.md
index 4fd0634996500a17d5fafc7b08521a00958e442c..9548715d9b8048c54aa85f34b78a93dddf2c25e6 100644
--- a/doc/api/dependencies.md
+++ b/doc/api/dependencies.md
@@ -2,10 +2,9 @@
 stage: Application Security Testing
 group: Composition Analysis
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Dependencies API
 ---
 
-# Dependencies API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -29,7 +28,7 @@ GET /projects/:id/dependencies?package_manager=yarn,bundler
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                 |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                                            |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                                            |
 | `package_manager` | string array   | no       | Returns dependencies belonging to specified package manager. Valid values: `bundler`, `composer`, `conan`, `go`, `gradle`, `maven`, `npm`, `nuget`, `pip`, `pipenv`, `pnpm`, `yarn`, `sbt`, or `setuptools`. |
 
 ```shell
@@ -81,4 +80,4 @@ Example response:
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
diff --git a/doc/api/dependency_list_export.md b/doc/api/dependency_list_export.md
index 6dea9c0cc5117c1deb7483015a091dda1110c07e..ceb6396d22a6f3e3bf53c04f6c1b411ec38a012a 100644
--- a/doc/api/dependency_list_export.md
+++ b/doc/api/dependency_list_export.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Dependency list export API
 ---
 
-# Dependency list export API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/dependency_proxy.md b/doc/api/dependency_proxy.md
index 0fdff81e75a51b44735e7b082ad31b0a64364e4c..a8a0d898645244a9c344af2478c565145b29d49b 100644
--- a/doc/api/dependency_proxy.md
+++ b/doc/api/dependency_proxy.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Container Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Dependency Proxy API
 ---
 
-# Dependency Proxy API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -21,7 +20,7 @@ DELETE /groups/:id/dependency_proxy/cache
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 
 Example request:
 
diff --git a/doc/api/deploy_keys.md b/doc/api/deploy_keys.md
index 0476d787fcab2eb74259285dacccc5bdc9ca3e5e..aee6cd5674cd54b13ca5d43c8d1d3e714f8a0c14 100644
--- a/doc/api/deploy_keys.md
+++ b/doc/api/deploy_keys.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Deploy keys API
 ---
 
-# Deploy keys API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -156,7 +155,7 @@ GET /projects/:id/deploy_keys
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys"
@@ -260,7 +259,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key_id`  | integer | yes | The ID of the deploy key |
 
 ```shell
@@ -295,7 +294,7 @@ POST /projects/:id/deploy_keys
 
 | Attribute    | Type | Required | Description |
 | -----------  | ---- | -------- | ----------- |
-| `id`         | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`        | string   | yes | New deploy key |
 | `title`      | string   | yes | New deploy key's title |
 | `can_push`   | boolean  | no  | Can deploy key push to the project's repository |
@@ -330,7 +329,7 @@ PUT /projects/:id/deploy_keys/:key_id
 
 | Attribute  | Type | Required | Description |
 | ---------  | ---- | -------- | ----------- |
-| `id`       | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`       | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `can_push` | boolean | no  | Can deploy key push to the project's repository |
 | `title`    | string  | no | New deploy key's title |
 
@@ -362,7 +361,7 @@ DELETE /projects/:id/deploy_keys/:key_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key_id`  | integer | yes | The ID of the deploy key |
 
 ```shell
@@ -379,7 +378,7 @@ POST /projects/:id/deploy_keys/:key_id/enable
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key_id`  | integer | yes | The ID of the deploy key |
 
 ```shell
diff --git a/doc/api/deploy_tokens.md b/doc/api/deploy_tokens.md
index 0e3884eaa49739c7857268b134b5681fc9e1010d..98b64a3b0588c567e3fbcfbec82496ef3c504e29 100644
--- a/doc/api/deploy_tokens.md
+++ b/doc/api/deploy_tokens.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Deploy Tokens API
 ---
 
-# Deploy Tokens API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -70,7 +69,7 @@ Parameters:
 
 | Attribute      | Type           | Required               | Description |
 |:---------------|:---------------|:-----------------------|:------------|
-| `id`           | integer/string | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `active`       | boolean        | No | Limit by active status. |
 
 Example request:
@@ -110,7 +109,7 @@ Parameters:
 
 | Attribute  | Type           | Required               | Description |
 | ---------- | -------------- | ---------------------- | ----------- |
-| `id`       | integer/string | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`       | integer/string | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `token_id` | integer        | Yes | ID of the deploy token |
 
 Example request:
@@ -148,7 +147,7 @@ Parameters:
 
 | Attribute    | Type             | Required               | Description |
 | ------------ | ---------------- | ---------------------- | ----------- |
-| `id`         | integer/string   | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer/string   | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name`       | string           | Yes | New deploy token's name |
 | `scopes`     | array of strings | Yes | Indicates the deploy token scopes. Must be at least one of `read_repository`, `read_registry`, `write_registry`, `read_package_registry`, or `write_package_registry`. |
 | `expires_at` | datetime         | No | Expiration date for the deploy token. Does not expire if no value is provided. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`) |
@@ -191,7 +190,7 @@ Parameters:
 
 | Attribute  | Type           | Required               | Description |
 | ---------- | -------------- | ---------------------- | ----------- |
-| `id`       | integer/string | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`       | integer/string | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `token_id` | integer        | Yes | ID of the deploy token |
 
 Example request:
@@ -218,7 +217,7 @@ Parameters:
 
 | Attribute      | Type           | Required               | Description |
 |:---------------|:---------------|:-----------------------|:------------|
-| `id`           | integer/string | Yes | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | Yes | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `active`       | boolean        | No | Limit by active status. |
 
 Example request:
@@ -258,7 +257,7 @@ Parameters:
 
 | Attribute   | Type           | Required               | Description |
 | ----------- | -------------- | ---------------------- | ----------- |
-| `id`        | integer/string | Yes | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | Yes | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `token_id`  | integer        | Yes | ID of the deploy token |
 
 Example request:
@@ -296,7 +295,7 @@ Parameters:
 
 | Attribute    | Type | Required  | Description |
 | ------------ | ---- | --------- | ----------- |
-| `id`         | integer/string   | Yes | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`         | integer/string   | Yes | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `name`       | string           | Yes | New deploy token's name |
 | `scopes`     | array of strings | Yes | Indicates the deploy token scopes. Must be at least one of `read_repository`, `read_registry`, `write_registry`, `read_package_registry`, or `write_package_registry`. |
 | `expires_at` | datetime         | No | Expiration date for the deploy token. Does not expire if no value is provided. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`) |
@@ -339,7 +338,7 @@ Parameters:
 
 | Attribute   | Type           | Required               | Description |
 | ----------- | -------------- | ---------------------- | ----------- |
-| `id`        | integer/string | Yes | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | Yes | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `token_id`  | integer        | Yes | ID of the deploy token |
 
 Example request:
diff --git a/doc/api/deployments.md b/doc/api/deployments.md
index a2196dcc14967924b77cb8abef8c248787b047bf..ed07dd828fd0e10e2d794cfef7401cdb78f1de16 100644
--- a/doc/api/deployments.md
+++ b/doc/api/deployments.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Deployments API
 ---
 
-# Deployments API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -22,7 +21,7 @@ GET /projects/:id/deployments
 
 | Attribute         | Type           | Required | Description                                                                                                     |
 |-------------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`              | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `order_by`        | string         | no       | Return deployments ordered by either one of `id`, `iid`, `created_at`, `updated_at`, `finished_at` or `ref` fields. Default is `id`.    |
 | `sort`            | string         | no       | Return deployments sorted in `asc` or `desc` order. Default is `asc`.                                            |
 | `updated_after`   | datetime       | no       | Return deployments updated after the specified date. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). |
@@ -200,7 +199,7 @@ GET /projects/:id/deployments/:deployment_id
 
 | Attribute | Type    | Required | Description         |
 |-----------|---------|----------|---------------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `deployment_id` | integer | yes      | The ID of the deployment |
 
 ```shell
@@ -334,7 +333,7 @@ POST /projects/:id/deployments
 
 | Attribute     | Type           | Required | Description                                                                                                     |
 |---------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).|
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).|
 | `environment` | string         | yes      | The [name of the environment](../ci/environments/index.md) to create the deployment for.                        |
 | `sha`         | string         | yes      | The SHA of the commit that is deployed.                                                                         |
 | `ref`         | string         | yes      | The name of the branch or tag that is deployed.                                                                 |
@@ -392,7 +391,7 @@ PUT /projects/:id/deployments/:deployment_id
 
 | Attribute        | Type           | Required | Description         |
 |------------------|----------------|----------|---------------------|
-| `id`             | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`             | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `deployment_id`  | integer        | yes      | The ID of the deployment to update. |
 | `status`         | string         | yes      | The new status of the deployment. One of `running`, `success`, `failed`, or `canceled`.                         |
 
@@ -462,7 +461,7 @@ DELETE /projects/:id/deployments/:deployment_id
 
 | Attribute | Type    | Required | Description         |
 |-----------|---------|----------|---------------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `deployment_id` | integer | yes      | The ID of the deployment |
 
 ```shell
@@ -523,7 +522,7 @@ POST /projects/:id/deployments/:deployment_id/approval
 
 | Attribute       | Type           | Required | Description                                                                                                     |
 |-----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `deployment_id` | integer        | yes      | The ID of the deployment.                                                                                       |
 | `status`        | string         | yes      | The status of the approval (either `approved` or `rejected`).                                                   |
 | `comment`       | string         | no       | A comment to go with the approval                                                                               |
diff --git a/doc/api/discussions.md b/doc/api/discussions.md
index 76e3fa2f5c78c11a0a013cea31547020e03408c0..4854c1814b5fa4ec88929f78a6c446127371c7fe 100644
--- a/doc/api/discussions.md
+++ b/doc/api/discussions.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Discussions API
 ---
 
-# Discussions API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -40,7 +39,7 @@ Not all discussion types are equally available in the API:
 
 By default, `GET` requests return 20 results at a time because the API results are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ## Issues
 
@@ -54,7 +53,7 @@ GET /projects/:id/issues/:issue_iid/discussions
 
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`         | integer          | yes        | The IID of an issue. |
 
 ```json
@@ -156,7 +155,7 @@ Parameters:
 
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | yes      | The IID of an issue. |
 | `discussion_id` | integer        | yes      | The ID of a discussion item. |
 
@@ -178,7 +177,7 @@ Parameters:
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of the thread. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | yes      | The IID of an issue. |
 | `created_at`    | string         | no       | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
 
@@ -205,7 +204,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of the note or reply. |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | yes      | The IID of an issue. |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 | `created_at`    | string         | no       | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
@@ -230,7 +229,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of the note or reply. |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | yes      | The IID of an issue. |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 
@@ -253,7 +252,7 @@ Parameters:
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
 | `discussion_id` | integer        | yes      | The ID of a discussion. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | yes      | The IID of an issue. |
 | `note_id`       | integer        | yes      | The ID of a discussion note. |
 
@@ -275,7 +274,7 @@ GET /projects/:id/snippets/:snippet_id/discussions
 
 | Attribute           | Type             | Required   | Description |
 | ------------------- | ---------------- | ---------- | ------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id`        | integer          | yes        | The ID of an snippet. |
 
 ```json
@@ -378,7 +377,7 @@ Parameters:
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
 | `discussion_id` | integer        | yes      | The ID of a discussion item. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id`    | integer        | yes      | The ID of an snippet. |
 
 ```shell
@@ -401,7 +400,7 @@ Parameters:
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of a discussion. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id`    | integer        | yes      | The ID of an snippet. |
 | `created_at`    | string         | no       | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
 
@@ -425,7 +424,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of the note or reply. |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 | `snippet_id`    | integer        | yes      | The ID of an snippet. |
 | `created_at`    | string         | no       | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
@@ -450,7 +449,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of the note or reply. |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 | `snippet_id`    | integer        | yes      | The ID of an snippet. |
 
@@ -473,7 +472,7 @@ Parameters:
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
 | `discussion_id` | integer        | yes      | The ID of a discussion. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `note_id`       | integer        | yes      | The ID of a discussion note. |
 | `snippet_id`    | integer        | yes      | The ID of an snippet. |
 
@@ -507,7 +506,7 @@ GET /groups/:id/epics/:epic_id/discussions
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
 | `epic_id`           | integer          | yes        | The ID of an epic. |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 ```json
 [
@@ -611,7 +610,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `discussion_id` | integer        | yes      | The ID of a discussion item. |
 | `epic_id`       | integer        | yes      | The ID of an epic. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --request POST \
@@ -634,7 +633,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `body`          | string         | yes      | The content of the thread. |
 | `epic_id`       | integer        | yes      | The ID of an epic. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `created_at`    | string         | no       | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
 
 ```shell
@@ -659,7 +658,7 @@ Parameters:
 | `body`          | string         | yes      | The content of the note or reply. |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
 | `epic_id`       | integer        | yes      | The ID of an epic. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 | `created_at`    | string         | no       | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
 
@@ -684,7 +683,7 @@ Parameters:
 | `body`          | string         | yes      | The content of note or reply. |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
 | `epic_id`       | integer        | yes      | The ID of an epic. |
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 
 ```shell
@@ -707,7 +706,7 @@ Parameters:
 | --------------- | -------------- | -------- | ----------- |
 | `discussion_id` | integer        | yes      | The ID of a thread. |
 | `epic_id`       | integer        | yes      | The ID of an epic. |
-| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `note_id`       | integer        | yes      | The ID of a thread note. |
 
 ```shell
@@ -728,7 +727,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/discussions
 
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer          | yes        | The IID of a merge request. |
 
 ```json
@@ -897,7 +896,7 @@ Parameters:
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
 | `discussion_id`     | string        | yes      | The ID of a discussion item. |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request. |
 
 ```shell
@@ -921,7 +920,7 @@ Parameters for all comments:
 | Attribute                                | Type           | Required                             | Description |
 | ---------------------------------------- | -------------- |--------------------------------------| ----------- |
 | `body`                                   | string         | yes                                  | The content of the thread. |
-| `id`                                     | integer/string | yes                                  | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                     | integer/string | yes                                  | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid`                      | integer        | yes                                  | The IID of a merge request. |
 | `position[base_sha]`                     | string         | yes (if `position*` is supplied)     | Base commit SHA in the source branch. |
 | `position[head_sha]`                     | string         | yes (if `position*` is supplied)     | SHA referencing HEAD of this merge request. |
@@ -1069,7 +1068,7 @@ Parameters:
 
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
-| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `discussion_id`     | string        | yes      | The ID of a thread. |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request. |
 | `resolved`          | boolean        | yes      | Resolve or unresolve the discussion. |
@@ -1094,7 +1093,7 @@ Parameters:
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
 | `body`              | string         | yes      | The content of the note or reply. |
-| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `discussion_id`     | string        | yes      | The ID of a thread. |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request. |
 | `note_id`           | integer        | yes      | The ID of a thread note. |
@@ -1119,7 +1118,7 @@ Parameters:
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
 | `discussion_id`     | string        | yes      | The ID of a thread. |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request. |
 | `note_id`           | integer        | yes      | The ID of a thread note. |
 | `body`              | string         | no       | The content of the note or reply. Exactly one of `body` or `resolved` must be set. |
@@ -1152,7 +1151,7 @@ Parameters:
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
 | `discussion_id`     | string        | yes      | The ID of a thread. |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request. |
 | `note_id`           | integer        | yes      | The ID of a thread note. |
 
@@ -1175,7 +1174,7 @@ GET /projects/:id/repository/commits/:commit_id/discussions
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
 | `commit_id`         | string           | yes        | The SHA of a commit. |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```json
 [
@@ -1324,7 +1323,7 @@ Parameters:
 | ------------------- | -------------- | -------- | ----------- |
 | `commit_id`         | string         | yes      | The SHA of a commit. |
 | `discussion_id`     | string         | yes      | The ID of a discussion item. |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -1346,7 +1345,7 @@ Parameters:
 | ------------------------- | -------------- |----------------------------------| ----------- |
 | `body`                    | string         | yes                              | The content of the thread. |
 | `commit_id`               | string         | yes                              | The SHA of a commit. |
-| `id`                      | integer/string | yes                              | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                      | integer/string | yes                              | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `position[base_sha]`      | string         | yes (if `position*` is supplied) | SHA of the parent commit. |
 | `position[head_sha]`      | string         | yes (if `position*` is supplied) | The SHA of this commit. Same as `commit_id`. |
 | `position[start_sha]`     | string         | yes (if `position*` is supplied) | SHA of the parent commit. |
@@ -1392,7 +1391,7 @@ Parameters:
 | `body`              | string         | yes      | The content of the note or reply. |
 | `commit_id`         | string         | yes      | The SHA of a commit. |
 | `discussion_id`     | string         | yes      | The ID of a thread. |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `note_id`           | integer        | yes      | The ID of a thread note. |
 | `created_at`        | string         | no       | Date time string, ISO 8601 formatted, such `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights. |
 
@@ -1416,7 +1415,7 @@ Parameters:
 | ------------------- | -------------- | -------- | ----------- |
 | `commit_id`         | string         | yes      | The SHA of a commit. |
 | `discussion_id`     | string         | yes      | The ID of a thread. |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `note_id`           | integer        | yes      | The ID of a thread note. |
 | `body`              | string         | no       | The content of a note. |
 
@@ -1446,7 +1445,7 @@ Parameters:
 
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `commit_id`         | string         | yes      | The SHA of a commit. |
 | `discussion_id`     | string         | yes      | The ID of a thread. |
 | `note_id`           | integer        | yes      | The ID of a thread note. |
diff --git a/doc/api/dora/metrics.md b/doc/api/dora/metrics.md
index b32691da1c700129208bd9beebb6d07bf70aff9c..e77c8f3b5249b7eeba611d40f40d34b188080f7a 100644
--- a/doc/api/dora/metrics.md
+++ b/doc/api/dora/metrics.md
@@ -24,7 +24,7 @@ GET /projects/:id/dora/metrics
 
 | Attribute            | Type             | Required | Description |
 |:---------------------|:-----------------|:---------|:------------|
-| `id`                 | integer/string   | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths) can be accessed by the authenticated user. |
+| `id`                 | integer/string   | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths) can be accessed by the authenticated user. |
 | `metric`             | string           | yes      | One of `deployment_frequency`, `lead_time_for_changes`, `time_to_restore_service` or `change_failure_rate`. |
 | `end_date`           | string           | no       | Date range to end at. ISO 8601 Date format, for example `2021-03-01`. Default is the current date. |
 | `environment_tiers`  | array of strings | no       | The [tiers of the environments](../../ci/environments/index.md#deployment-tier-of-environments). Default is `production`. |
@@ -62,7 +62,7 @@ GET /groups/:id/dora/metrics
 
 | Attribute           | Type             | Required | Description |
 |:--------------------|:-----------------|:---------|:------------|
-| `id`                | integer/string   | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths) can be accessed by the authenticated user. |
+| `id`                | integer/string   | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths) can be accessed by the authenticated user. |
 | `metric`            | string           | yes      | One of `deployment_frequency`, `lead_time_for_changes`, `time_to_restore_service` or `change_failure_rate`. |
 | `end_date`          | string           | no       | Date range to end at. ISO 8601 Date format, for example `2021-03-01`. Default is the current date. |
 | `environment_tiers` | array of strings | no       | The [tiers of the environments](../../ci/environments/index.md#deployment-tier-of-environments). Default is `production`. |
diff --git a/doc/api/draft_notes.md b/doc/api/draft_notes.md
index c860c14619e4eeb3384cc65dd5e673059fcd000d..e2be69928493e19187ec87c845c4f42eb3cc057a 100644
--- a/doc/api/draft_notes.md
+++ b/doc/api/draft_notes.md
@@ -3,10 +3,9 @@ stage: Create
 group: Code Review
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for draft notes (unpublished comments) in GitLab."
+title: Draft Notes API
 ---
 
-# Draft Notes API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/draft_notes
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid` | integer           | yes      | The IID of a project merge request |
 
 ```json
@@ -71,7 +70,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/draft_notes/:draft_note_id
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `draft_note_id`     | integer           | yes      | The ID of a draft note. |
 | `merge_request_iid` | integer           | yes      | The IID of a project merge request. |
 
@@ -115,7 +114,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/draft_notes
 
 | Attribute                                | Type              | Required    | Description           |
 | ---------------------------------------- | ----------------- | ----------- | --------------------- |
-| `id`                                     | integer or string | yes         | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                     | integer or string | yes         | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid`                      | integer           | yes         | The IID of a project merge request. |
 | `note`                                   | string            | yes         | The content of a note. |
 | `commit_id`                              | string            | no          | The SHA of a commit to associate the draft note to. |
@@ -151,7 +150,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid/draft_notes/:draft_note_id
 
 | Attribute                                | Type              | Required    | Description           |
 | -------------------                      | ----------------- | ----------- | --------------------- |
-| `id`                                     | integer or string | yes         | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                     | integer or string | yes         | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `draft_note_id`                          | integer           | yes         | The ID of a draft note. |
 | `merge_request_iid`                      | integer           | yes         | The IID of a project merge request. |
 | `note`                                   | string            | no          | The content of a note. |
@@ -187,7 +186,7 @@ DELETE /projects/:id/merge_requests/:merge_request_iid/draft_notes/:draft_note_i
 | Attribute           | Type             | Required    | Description           |
 | ------------------- | ---------------- | ----------- | --------------------- |
 | `draft_note_id`     | integer           | yes        | The ID of a draft note. |
-| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | yes        | The IID of a project merge request. |
 
 ```shell
@@ -207,7 +206,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid/draft_notes/:draft_note_id/p
 | Attribute           | Type             | Required    | Description           |
 | ------------------- | ---------------- | ----------- | --------------------- |
 | `draft_note_id`     | integer           | yes        | The ID of a draft note. |
-| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | yes        | The IID of a project merge request. |
 
 ```shell
@@ -226,7 +225,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/draft_notes/bulk_publish
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | yes      | The IID of a project merge request. |
 
 ```shell
diff --git a/doc/api/emoji_reactions.md b/doc/api/emoji_reactions.md
index a82c463d1a5b55ae4beb1e8d93666a038fbcbc5d..5eefd151ccc7c7f48b485a4dcb8672083814bf56 100644
--- a/doc/api/emoji_reactions.md
+++ b/doc/api/emoji_reactions.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Emoji reactions API
 ---
 
-# Emoji reactions API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -43,7 +42,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                  |
 |:---------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`/`merge_request_iid`/`snippet_id` | integer        | yes      | ID (`iid` for merge requests/issues, `id` for snippets) of an awardable.     |
 
 Example request:
@@ -108,7 +107,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                  |
 |:---------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`/`merge_request_iid`/`snippet_id` | integer        | yes      | ID (`iid` for merge requests/issues, `id` for snippets) of an awardable.     |
 | `award_id`     | integer        | yes      | ID of the emoji reaction.                                                       |
 
@@ -153,7 +152,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                  |
 |:---------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`/`merge_request_iid`/`snippet_id` | integer        | yes      | ID (`iid` for merge requests/issues, `id` for snippets) of an awardable.     |
 | `name`         | string         | yes      | Name of the emoji without colons.                                            |
 
@@ -198,7 +197,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                  |
 |:---------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`/`merge_request_iid`/`snippet_id` | integer        | yes      | ID (`iid` for merge requests/issues, `id` for snippets) of an awardable.     |
 | `award_id`     | integer        | yes      | ID of an emoji reaction.                                                        |
 
@@ -230,7 +229,7 @@ Parameters:
 
 | Attribute   | Type           | Required | Description                                                                  |
 |:------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer        | yes      | Internal ID of an issue.                                                     |
 | `note_id`   | integer        | yes      | ID of a comment (note).                                                      |
 
@@ -278,7 +277,7 @@ Parameters:
 
 | Attribute   | Type           | Required | Description                                                                  |
 |:------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer        | yes      | Internal ID of an issue.                                                     |
 | `note_id`   | integer        | yes      | ID of a comment (note).                                                      |
 | `award_id`  | integer        | yes      | ID of the emoji reaction.                                                       |
@@ -322,7 +321,7 @@ Parameters:
 
 | Attribute   | Type           | Required | Description                                                                  |
 |:------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer        | yes      | Internal ID of an issue.                                                     |
 | `note_id`   | integer        | yes      | ID of a comment (note).                                                      |
 | `name`      | string         | yes      | Name of the emoji without colons.                                            |
@@ -368,7 +367,7 @@ Parameters:
 
 | Attribute   | Type           | Required | Description                                                                  |
 |:------------|:---------------|:---------|:-----------------------------------------------------------------------------|
-| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer        | yes      | Internal ID of an issue.                                                     |
 | `note_id`   | integer        | yes      | ID of a comment (note).                                                      |
 | `award_id`  | integer        | yes      | ID of an emoji reaction.                                                        |
diff --git a/doc/api/environments.md b/doc/api/environments.md
index 728a4683c61fc03ad7894913e86ed6b3107e578d..f5d56f12c4051666c883330fe062e5bb8b401767 100644
--- a/doc/api/environments.md
+++ b/doc/api/environments.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Environments API
 ---
 
-# Environments API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -23,7 +22,7 @@ GET /projects/:id/environments
 
 | Attribute | Type           | Required | Description                                                                                                                                                   |
 |-----------|----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded](rest/index.md#namespaced-paths) path of the project.                                                                          |
+| `id`      | integer/string | yes      | The ID or [URL-encoded](rest/_index.md#namespaced-paths) path of the project.                                                                          |
 | `name`    | string         | no       | Return the environment with this name. Mutually exclusive with `search`.                                                                                      |
 | `search`  | string         | no       | Return list of environments matching the search criteria. Mutually exclusive with `name`. Must be at least 3 characters long.                                 |
 | `states`  | string         | no       | List all environments that match a specific state. Accepted values: `available`, `stopping`, or `stopped`. If no state value given, returns all environments. |
@@ -65,7 +64,7 @@ GET /projects/:id/environments/:environment_id
 
 | Attribute        | Type           | Required | Description                                                                          |
 |------------------|----------------|----------|--------------------------------------------------------------------------------------|
-| `id`             | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project. |
+| `id`             | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project. |
 | `environment_id` | integer        | yes      | The ID of the environment.                                                           |
 
 ```shell
@@ -205,7 +204,7 @@ POST /projects/:id/environments
 
 | Attribute              | Type           | Required | Description                                                                                                         |
 |------------------------|----------------|----------|---------------------------------------------------------------------------------------------------------------------|
-| `id`                   | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project.                                |
+| `id`                   | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project.                                |
 | `name`                 | string         | yes      | The name of the environment.                                                                                        |
 | `description`          | string         | no       | The description of the environment.                                                                                        |
 | `external_url`         | string         | no       | Place to link to for this environment.                                                                              |
@@ -254,7 +253,7 @@ PUT /projects/:id/environments/:environments_id
 
 | Attribute              | Type            | Required | Description                                                                                                         |
 |------------------------|-----------------|----------|---------------------------------------------------------------------------------------------------------------------|
-| `id`                   | integer/string  | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                |
+| `id`                   | integer/string  | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                |
 | `environment_id`       | integer         | yes      | The ID of the environment.                                                                                          |
 | `description`          | string          | no       | The description of the environment.                                                                                        |
 | `external_url`         | string          | no       | The new `external_url`.                                                                                             |
@@ -300,7 +299,7 @@ DELETE /projects/:id/environments/:environment_id
 
 | Attribute        | Type           | Required | Description                                                                          |
 |------------------|----------------|----------|--------------------------------------------------------------------------------------|
-| `id`             | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project. |
+| `id`             | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project. |
 | `environment_id` | integer        | yes      | The ID of the environment.                                                           |
 
 ```shell
@@ -323,7 +322,7 @@ DELETE /projects/:id/environments/review_apps
 
 | Attribute | Type           | Required | Description                                                                                                                                            |
 |-----------|----------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project.                                                                   |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project.                                                                   |
 | `before`  | datetime       | no       | The date before which environments can be deleted. Defaults to 30 days ago. Expected in ISO 8601 format (`YYYY-MM-DDTHH:MM:SSZ`).                      |
 | `limit`   | integer        | no       | Maximum number of environments to delete. Defaults to 100.                                                                                             |
 | `dry_run` | boolean        | no       | Defaults to `true` for safety reasons. It performs a dry run where no actual deletion is performed. Set to `false` to actually delete the environment. |
@@ -366,7 +365,7 @@ POST /projects/:id/environments/:environment_id/stop
 
 | Attribute        | Type           | Required | Description                                                                          |
 |------------------|----------------|----------|--------------------------------------------------------------------------------------|
-| `id`             | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project. |
+| `id`             | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project. |
 | `environment_id` | integer        | yes      | The ID of the environment.                                                           |
 | `force`          | boolean        | no       | Force environment to stop without executing `on_stop` actions.                       |
 
@@ -403,7 +402,7 @@ POST /projects/:id/environments/stop_stale
 
 | Attribute | Type           | Required | Description                                                                                                                                                                                    |
 |-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project.                                                                                                           |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project.                                                                                                           |
 | `before`  | date           | yes      | Stop environments that have been modified or deployed to before the specified date. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). Valid inputs are between 10 years ago and 1 week ago |
 
 ```shell
diff --git a/doc/api/epic_issues.md b/doc/api/epic_issues.md
index 3567f1368573165cc9d8f63ab9c55e8a21ca4ee1..9b941b709927504a6f86b6fbd3bbd510c69abe27 100644
--- a/doc/api/epic_issues.md
+++ b/doc/api/epic_issues.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Product Planning
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Epic Issues API
 ---
 
-# Epic Issues API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ If the Epics feature is not available, a `403` status code is returned.
 
 ## Epic Issues pagination
 
-API results [are paginated](rest/index.md#pagination). Requests that return
+API results [are paginated](rest/_index.md#pagination). Requests that return
 multiple issues default to returning 20 results at a time.
 
 ## List issues for an epic
@@ -40,7 +39,7 @@ GET /groups/:id/epics/:epic_iid/issues
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic.  |
 
 ```shell
@@ -135,7 +134,7 @@ POST /groups/:id/epics/:epic_iid/issues/:issue_id
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic.  |
 | `issue_id`          | integer/string   | yes        | The ID of the issue.          |
 
@@ -241,7 +240,7 @@ DELETE /groups/:id/epics/:epic_iid/issues/:epic_issue_id
 
 | Attribute           | Type             | Required   | Description                                                                                          |
 | ------------------- | ---------------- | ---------- | -----------------------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic.                |
 | `epic_issue_id`     | integer/string   | yes        | The ID of the issue - epic association.     |
 
@@ -347,7 +346,7 @@ PUT /groups/:id/epics/:epic_iid/issues/:epic_issue_id
 
 | Attribute           | Type             | Required   | Description                                                                                          |
 | ------------------- | ---------------- | ---------- | -----------------------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic.                |
 | `epic_issue_id`     | integer/string   | yes        | The ID of the issue - epic association.     |
 | `move_before_id`    | integer/string   | no         | The ID of the issue - epic association that should be placed before the link in the question.     |
diff --git a/doc/api/epic_links.md b/doc/api/epic_links.md
index cb86e1d816bca9b1480accb56ab970cf92256fe7..b84aa5dc395b5865c540e6a88f5e641939798597 100644
--- a/doc/api/epic_links.md
+++ b/doc/api/epic_links.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Product Planning
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Epic Links API
 ---
 
-# Epic Links API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -37,7 +36,7 @@ GET /groups/:id/epics/:epic_iid/epics
 
 | Attribute  | Type           | Required | Description                                                                                                   |
 | ---------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `epic_iid` | integer        | yes      | The internal ID of the epic.                                                                                  |
 
 ```shell
@@ -91,7 +90,7 @@ POST /groups/:id/epics/:epic_iid/epics/:child_epic_id
 
 | Attribute       | Type           | Required | Description                                                                                                        |
 | --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)      |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)      |
 | `epic_iid`      | integer        | yes      | The internal ID of the epic.                                                                                       |
 | `child_epic_id` | integer        | yes      | The global ID of the child epic. Internal ID can't be used because they can conflict with epics from other groups. |
 
@@ -144,7 +143,7 @@ POST /groups/:id/epics/:epic_iid/epics
 
 | Attribute       | Type           | Required | Description                                                                                                        |
 | --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)      |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)      |
 | `epic_iid`      | integer        | yes      | The internal ID of the (future parent) epic.                                                                       |
 | `title`         | string         | yes      | The title of a newly created epic.                                                                                 |
 | `confidential`  | boolean        | no       | Whether the epic should be confidential. Parameter is ignored if `confidential_epics` feature flag is disabled. Defaults to the confidentiality state of the parent epic.  |
@@ -178,7 +177,7 @@ PUT /groups/:id/epics/:epic_iid/epics/:child_epic_id
 
 | Attribute        | Type           | Required | Description                                                                                                        |
 | ---------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
-| `id`             | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).     |
+| `id`             | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).     |
 | `epic_iid`       | integer        | yes      | The internal ID of the epic.                                                                                       |
 | `child_epic_id`  | integer        | yes      | The global ID of the child epic. Internal ID can't be used because they can conflict with epics from other groups. |
 | `move_before_id` | integer        | no       | The global ID of a sibling epic that should be placed before the child epic.                                       |
@@ -235,7 +234,7 @@ DELETE /groups/:id/epics/:epic_iid/epics/:child_epic_id
 
 | Attribute       | Type           | Required | Description                                                                                                        |
 | --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).     |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).     |
 | `epic_iid`      | integer        | yes      | The internal ID of the epic.                                                                                       |
 | `child_epic_id` | integer        | yes      | The global ID of the child epic. Internal ID can't be used because they can conflict with epics from other groups. |
 
diff --git a/doc/api/epics.md b/doc/api/epics.md
index 92067b3126c05a284155a116a6baeeb926ee5e4b..3eda5e76a645e440138a5bbc3a54c3eff3c2ee74 100644
--- a/doc/api/epics.md
+++ b/doc/api/epics.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Product Planning
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Epics API (deprecated)
 ---
 
-# Epics API (deprecated)
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -43,7 +42,7 @@ fields `start_date_is_fixed` and `due_date_is_fixed`, and four date fields `star
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 WARNING:
 In [GitLab 12.6](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20354) and later,
@@ -67,7 +66,7 @@ GET /groups/:id/epics?state=opened
 
 | Attribute           | Type             | Required   | Description                                                                                                                 |
 | ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)               |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)               |
 | `author_id`         | integer          | no         | Return epics created by the given user `id`                                                                                 |
 | `author_username`   | string           | no         | Return epics created by the user with the given `username`. |
 | `labels`            | string           | no         | Return epics matching a comma-separated list of labels names. Label names from the epic group or a parent group can be used |
@@ -207,7 +206,7 @@ GET /groups/:id/epics/:epic_iid
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic.  |
 
 ```shell
@@ -286,7 +285,7 @@ POST /groups/:id/epics
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `title`             | string           | yes        | The title of the epic |
 | `labels`            | string           | no         | The comma-separated list of labels |
 | `description`       | string           | no         | The description of the epic. Limited to 1,048,576 characters.  |
@@ -370,7 +369,7 @@ PUT /groups/:id/epics/:epic_iid
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic  |
 | `add_labels`        | string           | no         | Comma-separated label names to add to an issue. |
 | `confidential`      | boolean          | no         | Whether the epic should be confidential |
@@ -454,7 +453,7 @@ DELETE /groups/:id/epics/:epic_iid
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                |
 | `epic_iid`          | integer/string   | yes        | The internal ID of the epic.  |
 
 ```shell
@@ -473,7 +472,7 @@ POST /groups/:id/epics/:epic_iid/todo
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | yes   | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)  |
+| `id`        | integer/string | yes   | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)  |
 | `epic_iid` | integer | yes          | The internal ID of a group's epic |
 
 ```shell
diff --git a/doc/api/error_tracking.md b/doc/api/error_tracking.md
index efb82e9403ccbb6745fb6c8cc047581e185dcb4c..622e08c3d7774a0092a2e5ad363acf370a3ee25d 100644
--- a/doc/api/error_tracking.md
+++ b/doc/api/error_tracking.md
@@ -2,10 +2,9 @@
 stage: Monitor
 group: Platform Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Error Tracking settings API
 ---
 
-# Error Tracking settings API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -23,7 +22,7 @@ GET /projects/:id/error_tracking/settings
 
 | Attribute | Type    | Required | Description           |
 | --------- | ------- | -------- | --------------------- |
-| `id`      | integer | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -60,7 +59,7 @@ Supported attributes:
 
 | Attribute    | Type    | Required | Description                                                                                                                                                     |
 | ------------ | ------- |----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`         | integer | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                            |
+| `id`         | integer | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                            |
 | `active`     | boolean | yes      | Pass `true` to enable the error tracking setting configuration or `false` to disable it.                                                                        |
 | `integrated` | boolean | yes      | Pass `true` to enable the integrated error tracking backend. |
 
@@ -94,7 +93,7 @@ PATCH /projects/:id/error_tracking/settings
 
 | Attribute    | Type    | Required | Description           |
 | ------------ | ------- | -------- | --------------------- |
-| `id`         | integer | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `active`     | boolean | yes      | Pass `true` to enable the already configured error tracking settings or `false` to disable it. |
 | `integrated` | boolean | no       | Pass `true` to enable the integrated error tracking backend. |
 
@@ -128,7 +127,7 @@ GET /projects/:id/error_tracking/client_keys
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -164,7 +163,7 @@ POST /projects/:id/error_tracking/client_keys
 
 | Attribute  | Type | Required | Description |
 | ---------  | ---- | -------- | ----------- |
-| `id`       | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --request POST \
@@ -194,7 +193,7 @@ DELETE /projects/:id/error_tracking/client_keys/:key_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `key_id`  | integer | yes | The ID of the client key. |
 
 ```shell
diff --git a/doc/api/events.md b/doc/api/events.md
index a70c93c10a8a956d5a8e2f6b958fd1b240ddad58..c892d643be22c33d8111ffbe5477c59dd2de5f52 100644
--- a/doc/api/events.md
+++ b/doc/api/events.md
@@ -2,10 +2,9 @@
 stage: none
 group: unassigned
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Events API
 ---
 
-# Events API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -294,7 +293,7 @@ Parameters:
 
 | Attribute     | Type           | Required | Description                                                                                         |
 |---------------|----------------|----------|-----------------------------------------------------------------------------------------------------|
-| `project_id`  | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                 |
+| `project_id`  | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                 |
 | `action`      | string         | no       | Include only events of a particular [action type](#actions)                                         |
 | `target_type` | string         | no       | Include only events of a particular [target type](#target-types)                                    |
 | `before`      | date           | no       | Include only events created before a particular date. [View how to format dates](#date-formatting). |
diff --git a/doc/api/experiments.md b/doc/api/experiments.md
index 5d3cae107c8c618a85d97741a516acff28439b01..6f829c127cb1655b6305e3a1a56f8d574287cd53 100644
--- a/doc/api/experiments.md
+++ b/doc/api/experiments.md
@@ -2,10 +2,9 @@
 stage: Growth
 group: Acquisition
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Experiments API (GitLab team only)
 ---
 
-# Experiments API (GitLab team only)
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com
diff --git a/doc/api/feature_flag_user_lists.md b/doc/api/feature_flag_user_lists.md
index 1cfc480380c2e1ab405b18887db7c63865e3efa9..036f23dbd2ceaa281624e8af06a2ca4b208e734d 100644
--- a/doc/api/feature_flag_user_lists.md
+++ b/doc/api/feature_flag_user_lists.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Feature flag user lists API
 ---
 
-# Feature flag user lists API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -19,7 +18,7 @@ Users with at least the Developer [role](../user/permissions.md) can access the
 
 NOTE:
 `GET` requests return twenty results at a time because the API results
-are [paginated](rest/index.md#pagination). You can change this value.
+are [paginated](rest/_index.md#pagination). You can change this value.
 
 ## List all feature flag user lists for a project
 
@@ -31,7 +30,7 @@ GET /projects/:id/feature_flags_user_lists
 
 | Attribute | Type           | Required | Description                                                                      |
 | --------- | -------------- | -------- | -------------------------------------------------------------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `search`  | string         | no       | Return user lists matching the search criteria.                                  |
 
 ```shell
@@ -73,7 +72,7 @@ POST /projects/:id/feature_flags_user_lists
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).       |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).       |
 | `name`              | string           | yes        | The name of the list. |
 | `user_xids`         | string           | yes        | A comma-separated list of external user IDs. |
 
@@ -113,7 +112,7 @@ GET /projects/:id/feature_flags_user_lists/:iid
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).       |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).       |
 | `iid`               | integer/string   | yes        | The internal ID of the project's feature flag user list.                               |
 
 ```shell
@@ -144,7 +143,7 @@ PUT /projects/:id/feature_flags_user_lists/:iid
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).       |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).       |
 | `iid`               | integer/string   | yes        | The internal ID of the project's feature flag user list.                               |
 | `name`              | string           | no         | The name of the list.                                                          |
 | `user_xids`         | string           | no         | A comma-separated list of external user IDs.                                                    |
@@ -185,7 +184,7 @@ DELETE /projects/:id/feature_flags_user_lists/:iid
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).       |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).       |
 | `iid`               | integer/string   | yes        | The internal ID of the project's feature flag user list                                |
 
 ```shell
diff --git a/doc/api/feature_flags.md b/doc/api/feature_flags.md
index 0a35bde9bb6bd91cab2161e9d89c6fd2ce785f3f..2099c09857352ce32d9b4cb1fbf13c8945f43309 100644
--- a/doc/api/feature_flags.md
+++ b/doc/api/feature_flags.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Feature flags API
 ---
 
-# Feature flags API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -20,7 +19,7 @@ Users with at least the Developer [role](../user/permissions.md) can access the
 ## Feature flags pagination
 
 By default, `GET` requests return 20 results at a time because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 ## List feature flags for a project
 
@@ -32,7 +31,7 @@ GET /projects/:id/feature_flags
 
 | Attribute           | Type             | Required   | Description                                                                                                                 |
 | ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                            |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                            |
 | `scope`             | string           | no         | The condition of feature flags, one of: `enabled`, `disabled`.                                                              |
 
 ```shell
@@ -132,7 +131,7 @@ GET /projects/:id/feature_flags/:feature_flag_name
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).       |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).       |
 | `feature_flag_name` | string           | yes        | The name of the feature flag.                                                          |
 
 ```shell
@@ -177,7 +176,7 @@ POST /projects/:id/feature_flags
 
 | Attribute           | Type             | Required   | Description                                                                                                                                                                                                                                                                              |
 | ------------------- | ---------------- | ---------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                                                                                                                                                                                     |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                                                                                                                                                                                     |
 | `name`              | string           | yes        | The name of the feature flag.                                                                                                                                                                                                                                                            |
 | `version`           | string           | yes        | **Deprecated** The version of the feature flag. Must be `new_version_flag`. Omit to create a Legacy feature flag.                                                                                                                                                                        |
 | `description`       | string           | no         | The description of the feature flag.                                                                                                                                                                                                                                                     |
@@ -239,7 +238,7 @@ PUT /projects/:id/feature_flags/:feature_flag_name
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).   |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).   |
 | `feature_flag_name` | string           | yes        | The current name of the feature flag.                                                  |
 | `description`       | string           | no         | The description of the feature flag.                                                   |
 | `active`            | boolean          | no         | The active state of the flag.                                                          |
@@ -317,7 +316,7 @@ DELETE /projects/:id/feature_flags/:feature_flag_name
 
 | Attribute           | Type             | Required   | Description                                                                            |
 | ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).       |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).       |
 | `feature_flag_name` | string           | yes        | The name of the feature flag.                                                          |
 
 ```shell
diff --git a/doc/api/features.md b/doc/api/features.md
index 01c9b3853616ff504ca6a6c985c696e6c2a97b0d..50b6817ade4cfa1d5e03e2dd11cc1dc7d6393a76 100644
--- a/doc/api/features.md
+++ b/doc/api/features.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Feature flags API
 ---
 
-# Feature flags API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/freeze_periods.md b/doc/api/freeze_periods.md
index ba13b6a446feb60867f6e5f0e6d00bb9bfe7b812..973992f051bfed693f0e802b9cf3a2c07204cd4f 100644
--- a/doc/api/freeze_periods.md
+++ b/doc/api/freeze_periods.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Freeze Periods API
 ---
 
-# Freeze Periods API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ GET /projects/:id/freeze_periods
 
 | Attribute     | Type           | Required | Description                                                                         |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -61,7 +60,7 @@ GET /projects/:id/freeze_periods/:freeze_period_id
 
 | Attribute     | Type           | Required | Description                                                                         |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `freeze_period_id`    | integer         | yes      | The ID of the freeze period.                                     |
 
 Example request:
@@ -93,7 +92,7 @@ POST /projects/:id/freeze_periods
 
 | Attribute          | Type            | Required                    | Description                                                                                                                      |
 | -------------------| --------------- | --------                    | -------------------------------------------------------------------------------------------------------------------------------- |
-| `id`               | integer or string  | yes                         | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                              |
+| `id`               | integer or string  | yes                         | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                              |
 | `freeze_start`     | string          | yes                         | Start of the freeze period in [cron](https://crontab.guru/) format.                                                              |
 | `freeze_end`       | string          | yes                         | End of the freeze period in [cron](https://crontab.guru/) format.                                                                |
 | `cron_timezone`    | string          | no                          | The time zone for the cron fields, defaults to UTC if not provided.                                                               |
@@ -129,7 +128,7 @@ PUT /projects/:id/freeze_periods/:freeze_period_id
 
 | Attribute     | Type            | Required | Description                                                                                                 |
 | ------------- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------- |
-| `id`          | integer or string  | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                         |
+| `id`          | integer or string  | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                         |
 | `freeze_period_id`    | integer          | yes      | The ID of the freeze period.                                                              |
 | `freeze_start`     | string          | no                         | Start of the freeze period in [cron](https://crontab.guru/) format.                                                              |
 | `freeze_end`       | string          | no                         | End of the freeze period in [cron](https://crontab.guru/) format.                                                                |
@@ -166,7 +165,7 @@ DELETE /projects/:id/freeze_periods/:freeze_period_id
 
 | Attribute     | Type           | Required | Description                                                                         |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `freeze_period_id`    | integer         | yes      | The ID of the freeze period.                                     |
 
 Example request:
diff --git a/doc/api/geo_nodes.md b/doc/api/geo_nodes.md
index 175ee20e7cf25e0600ea480d8d09bf233941649c..06353b58c4b0015d85ae3f7df771bb8f947336b0 100644
--- a/doc/api/geo_nodes.md
+++ b/doc/api/geo_nodes.md
@@ -2,10 +2,9 @@
 stage: Systems
 group: Geo
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Geo Nodes API (deprecated)
 ---
 
-# Geo Nodes API (deprecated)
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/geo_sites.md b/doc/api/geo_sites.md
index a72709cbd55b94532cfb29668011a6fcd4e53561..7055799c991dd1867c40707d96e20d8a8d8e0c0d 100644
--- a/doc/api/geo_sites.md
+++ b/doc/api/geo_sites.md
@@ -2,10 +2,9 @@
 stage: Systems
 group: Geo
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Geo sites API
 ---
 
-# Geo sites API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/get_started/get_started_extending.md b/doc/api/get_started/get_started_extending.md
index 25f40bc69cb9a4caa61f5252c28ab641ca815e86..b75e3bb9aa1ae39e5d0755de118602534e1775d3 100644
--- a/doc/api/get_started/get_started_extending.md
+++ b/doc/api/get_started/get_started_extending.md
@@ -2,10 +2,9 @@
 stage: none
 group: none
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Get started extending GitLab
 ---
 
-# Get started extending GitLab
-
 Interact programmatically with GitLab.
 Automate tasks, integrate with other tools, and create custom workflows.
 GitLab also supports plugins and custom hooks.
diff --git a/doc/api/google_cloud_integration.md b/doc/api/google_cloud_integration.md
index 9eae3ca4e600d1bd454975ef001ad9ddb6bfe864..0d34e29893cf8d92e876f2ab85ad2d1be551f59a 100644
--- a/doc/api/google_cloud_integration.md
+++ b/doc/api/google_cloud_integration.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Google Cloud integration API
 ---
 
-# Google Cloud integration API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com
diff --git a/doc/api/graphql/index.md b/doc/api/graphql/_index.md
similarity index 99%
rename from doc/api/graphql/index.md
rename to doc/api/graphql/_index.md
index 78f2abd907ba555fe8f17b3f58b2c573189a69c6..e5ba3f1eac8363fc6dcb132264687c46109c5ea8 100644
--- a/doc/api/graphql/index.md
+++ b/doc/api/graphql/_index.md
@@ -3,10 +3,9 @@ stage: Foundations
 group: Import and Integrate
 description: Programmatic interaction with GitLab.
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: GraphQL API
 ---
 
-# GraphQL API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/assign_gitlab_duo_seats.md b/doc/api/graphql/assign_gitlab_duo_seats.md
index da526733267e86100708e87b868542766911cc22..4fa70820c1dd41f874f0fe9ae3f8e484eaf2c7aa 100644
--- a/doc/api/graphql/assign_gitlab_duo_seats.md
+++ b/doc/api/graphql/assign_gitlab_duo_seats.md
@@ -2,10 +2,9 @@
 stage: Fulfillment
 group: Provision
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Assign GitLab Duo seats by using GraphQL
 ---
 
-# Assign GitLab Duo seats by using GraphQL
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com
diff --git a/doc/api/graphql/audit_event_streaming_groups.md b/doc/api/graphql/audit_event_streaming_groups.md
index 219f634c4d8996e641bf0df15915649f6a468b22..87bbf7b46932374de7bbcea1ab1ef058a221add0 100644
--- a/doc/api/graphql/audit_event_streaming_groups.md
+++ b/doc/api/graphql/audit_event_streaming_groups.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Compliance
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Audit event streaming GraphQL API for top-level groups
 ---
 
-# Audit event streaming GraphQL API for top-level groups
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/audit_event_streaming_instances.md b/doc/api/graphql/audit_event_streaming_instances.md
index 8aa9213d616da7a4336759dea0dd14e59a820dd6..3870b8bb720992393df5ddce737e2f1bc9c1d03b 100644
--- a/doc/api/graphql/audit_event_streaming_instances.md
+++ b/doc/api/graphql/audit_event_streaming_instances.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Compliance
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Audit event streaming GraphQL API for instances
 ---
 
-# Audit event streaming GraphQL API for instances
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/audit_report.md b/doc/api/graphql/audit_report.md
index 249eefdad7e37d47e123d833d269e11fec159229..2f18add0515ad064ded0fbdf17017f55981759b7 100644
--- a/doc/api/graphql/audit_report.md
+++ b/doc/api/graphql/audit_report.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Compliance
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Create an audit report by using GraphQL
 ---
 
-# Create an audit report by using GraphQL
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/branch_rules.md b/doc/api/graphql/branch_rules.md
index 64bd28c251b66ca1363ada384914ab64da429ba4..924405a55ec2421aa919f189fd9e1be9111ea015 100644
--- a/doc/api/graphql/branch_rules.md
+++ b/doc/api/graphql/branch_rules.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: List branch rules for a project by using GraphQL
 ---
 
-# List branch rules for a project by using GraphQL
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/custom_emoji.md b/doc/api/graphql/custom_emoji.md
index 3a89713beb706d964f69a4c886291e8c5fe245ba..df3fb890eaadea13e516dd8a33592aacb899950b 100644
--- a/doc/api/graphql/custom_emoji.md
+++ b/doc/api/graphql/custom_emoji.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Use custom emoji with GraphQL
 ---
 
-# Use custom emoji with GraphQL
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -40,7 +39,7 @@ The query accepts these attributes:
 
 | Attribute    | Type           | Required               | Description |
 | :----------- | :------------- | :--------------------- | :---------- |
-| `group_path` | integer/string | Yes | ID or [URL-encoded path of the top-level group](../rest/index.md#namespaced-paths). |
+| `group_path` | integer/string | Yes | ID or [URL-encoded path of the top-level group](../rest/_index.md#namespaced-paths). |
 | `name`       | string         | Yes | Name of the custom emoji. |
 | `file`       | string         | Yes | URL of the custom emoji image. |
 
diff --git a/doc/api/graphql/epic_work_items_api_migration_guide.md b/doc/api/graphql/epic_work_items_api_migration_guide.md
index 5c72c3aa6e67adf6097bc0ff314ca3ccfeed28c0..d999bb5dd8de53afa0557fe5beb61721ed46615c 100644
--- a/doc/api/graphql/epic_work_items_api_migration_guide.md
+++ b/doc/api/graphql/epic_work_items_api_migration_guide.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Product Planning
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Migrate epic APIs to work items
 ---
 
-# Migrate epic APIs to work items
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/examples.md b/doc/api/graphql/examples.md
index 2b511ff0f352f6bc1926a48559a2d3f6ab155bad..dc50907fa4437761a5211bf7dd5d7a2b9d47db05 100644
--- a/doc/api/graphql/examples.md
+++ b/doc/api/graphql/examples.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: GraphQL examples
 ---
 
-# GraphQL examples
-
 GraphQL examples are available for you to test and modify.
 
 - [Audit event streaming for instances](audit_event_streaming_instances.md)
diff --git a/doc/api/graphql/getting_started.md b/doc/api/graphql/getting_started.md
index 52d95535dfec731f524474059aca7445ea48a0df..387eb90bc237d51da82cbf1e9ec1e3f7e728eb3a 100644
--- a/doc/api/graphql/getting_started.md
+++ b/doc/api/graphql/getting_started.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Run GraphQL API queries and mutations
 ---
 
-# Run GraphQL API queries and mutations
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -46,7 +45,7 @@ You can run GraphQL queries in a `curl` request on the command line on your
 local computer. The requests `POST` to `/api/graphql`
 with the query as the payload. You can authorize your request by generating a
 [personal access token](../../user/profile/personal_access_tokens.md) to use as
-a bearer token. Read more about [GraphQL Authentication](index.md#authentication).
+a bearer token. Read more about [GraphQL Authentication](_index.md#authentication).
 
 Example:
 
@@ -104,7 +103,7 @@ NOTE:
 In the GitLab GraphQL API, `id` refers to a
 [Global ID](https://graphql.org/learn/global-object-identification/),
 which is an object identifier in the format of `"gid://gitlab/Issue/123"`.
-For more information, see [Global IDs](index.md#global-ids).
+For more information, see [Global IDs](_index.md#global-ids).
 
 [GitLab GraphQL Schema](reference/_index.md) outlines which objects and fields are
 available for clients to query and their corresponding data types.
@@ -171,7 +170,7 @@ More about queries:
 
 If you've signed in to GitLab and use [GraphiQL](#graphiql), all queries are performed as
 you, the authenticated user. For more information, read about
-[GraphQL Authentication](index.md#authentication).
+[GraphQL Authentication](_index.md#authentication).
 
 ### Mutations
 
@@ -348,7 +347,7 @@ More about introspection:
 
 ### Query complexity
 
-The calculated [complexity score and limit](index.md#maximum-query-complexity) for a query can be revealed to clients by
+The calculated [complexity score and limit](_index.md#maximum-query-complexity) for a query can be revealed to clients by
 querying for `queryComplexity`.
 
 ```graphql
diff --git a/doc/api/graphql/reference/_index.md b/doc/api/graphql/reference/_index.md
index a56622dc9936c20d17dde13a2fe2ee4f380f3373..45b56cd8763ea2f29b1f84845cc9c6a359a74604 100644
--- a/doc/api/graphql/reference/_index.md
+++ b/doc/api/graphql/reference/_index.md
@@ -17,14 +17,14 @@ title: GraphQL API resources
 
 This documentation is self-generated based on GitLab current GraphQL schema.
 
-The API can be explored using the [interactive GraphQL explorer](../index.md#interactive-graphql-explorer). Developers can also [generate a machine-readable GraphQL schema in IDL and JSON formats](../../../development/rake_tasks.md#update-machine-readable-schema-files).
+The API can be explored using the [interactive GraphQL explorer](../_index.md#interactive-graphql-explorer). Developers can also [generate a machine-readable GraphQL schema in IDL and JSON formats](../../../development/rake_tasks.md#update-machine-readable-schema-files).
 
 Each table below documents a GraphQL type. Types match loosely to models, but not all
 fields and methods on a model are available via GraphQL.
 
 WARNING:
 Fields that are deprecated are marked with **{warning-solid}**.
-Items (fields, enums, etc) that have been removed according to our [deprecation process](../index.md#deprecation-and-removal-process) can be found
+Items (fields, enums, etc) that have been removed according to our [deprecation process](../_index.md#deprecation-and-removal-process) can be found
 in [Removed Items](../removed_items.md).
 
 <!-- vale off -->
diff --git a/doc/api/graphql/removed_items.md b/doc/api/graphql/removed_items.md
index 1e268635fa2f672e63ccd197112c056bc17558ea..04e0f58e76da20b3442f2cded5e880d725269ed2 100644
--- a/doc/api/graphql/removed_items.md
+++ b/doc/api/graphql/removed_items.md
@@ -2,17 +2,16 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: GraphQL API removed items
 ---
 
-# GraphQL API removed items
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
 
 GraphQL is a versionless API, unlike the REST API.
 Occasionally, items have to be updated or removed from the GraphQL API.
-According to our [process for removing items](index.md#deprecation-and-removal-process), here are the items that have been removed.
+According to our [process for removing items](_index.md#deprecation-and-removal-process), here are the items that have been removed.
 
 For deprecations, see the [Deprecations by version page](../../update/deprecations.md).
 
diff --git a/doc/api/graphql/sample_issue_boards.md b/doc/api/graphql/sample_issue_boards.md
index ea774e1e26a5b2a9c42ca4ba209e6ff767aafab9..c8aaaf89d0d7b821ee78c98ea586160abc839cff 100644
--- a/doc/api/graphql/sample_issue_boards.md
+++ b/doc/api/graphql/sample_issue_boards.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Identify issue boards by using GraphQL
 ---
 
-# Identify issue boards by using GraphQL
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/graphql/users_example.md b/doc/api/graphql/users_example.md
index ee744188bbf9b8f4f0e83b7087d1736dc3e1a442..aa985b673f3b18a5498d2f33b6c4458f1c212dd8 100644
--- a/doc/api/graphql/users_example.md
+++ b/doc/api/graphql/users_example.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Query users by using GraphQL
 ---
 
-# Query users by using GraphQL
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/group_access_tokens.md b/doc/api/group_access_tokens.md
index d841547fc41a22c2e2e0828d5198828b8dc56f19..5bda7b86b7df00081300bb81a94eea75c44eb323 100644
--- a/doc/api/group_access_tokens.md
+++ b/doc/api/group_access_tokens.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group access tokens API
 ---
 
-# Group access tokens API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ GET /groups/:id/access_tokens?state=inactive
 
 | Attribute | Type              | required | Description |
 | --------- | ----------------- | -------- | ----------- |
-| `id`      | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a group. |
+| `id`      | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a group. |
 | `state`   | string            | No       | If defined, only returns tokens with the specified state. Possible values: `active` and `inactive`. |
 
 ```shell
@@ -79,7 +78,7 @@ GET /groups/:id/access_tokens/:token_id
 
 | Attribute  | Type              | required | Description |
 | ---------- | ----------------- | -------- | ----------- |
-| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a group. |
+| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a group. |
 | `token_id` | integer or string | yes      | ID of a group access token or the keyword `self`. |
 
 ```shell
@@ -120,7 +119,7 @@ POST /groups/:id/access_tokens
 
 | Attribute      | Type              | required | Description |
 | -------------- | ----------------- | -------- | ----------- |
-| `id`           | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a group. |
+| `id`           | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a group. |
 | `name`         | String            | yes      | Name of the token. |
 | `scopes`       | `Array[String]`   | yes      | List of [scopes](../user/group/settings/group_access_tokens.md#scopes-for-a-group-access-token) available to the token. |
 | `access_level` | Integer           | no       | [Access level](../development/permissions/predefined_roles.md#members) for the token. Possible values: `10` (Guest), `15` (Planner), `20` (Reporter), `30` (Developer), `40` (Maintainer), and `50` (Owner). Default value: `40`. |
@@ -171,7 +170,7 @@ POST /groups/:id/access_tokens/:token_id/rotate
 
 | Attribute    | Type              | required | Description |
 | ------------ | ----------------- | -------- | ----------- |
-| `id`         | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a group. |
+| `id`         | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a group. |
 | `token_id`   | integer or string | yes      | ID of a group access token or the keyword `self`. |
 | `expires_at` | date              | no       | Expiration date of the access token in ISO format (`YYYY-MM-DD`). The date must be one year or less from the rotation date. If undefined, the token expires after one week. |
 
@@ -240,7 +239,7 @@ DELETE /groups/:id/access_tokens/:token_id
 
 | Attribute  | Type              | required | Description |
 | ---------- | ----------------- | -------- | ----------- |
-| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a group. |
+| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a group. |
 | `token_id` | integer           | yes      | ID of a group access token. |
 
 ```shell
diff --git a/doc/api/group_activity_analytics.md b/doc/api/group_activity_analytics.md
index 5a4dbc890d28da9f7c8b2e1ee7cfcefca4145aac..1314841cdf1bd410571471954e1a0cf01e729cf6 100644
--- a/doc/api/group_activity_analytics.md
+++ b/doc/api/group_activity_analytics.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Optimize
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group Activity Analytics API
 ---
 
-# Group Activity Analytics API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/group_badges.md b/doc/api/group_badges.md
index 2f9d08da5b2904c4486d2b208cbaa38fee909f52..b6902ffa70c5c45bb30376df4916912387ed22f9 100644
--- a/doc/api/group_badges.md
+++ b/doc/api/group_badges.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group badges API
 ---
 
-# Group badges API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -43,7 +42,7 @@ GET /groups/:id/badges
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `name`    | string         | no  | Name of the badges to return (case-sensitive). |
 
 ```shell
@@ -76,7 +75,7 @@ GET /groups/:id/badges/:badge_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `badge_id` | integer | yes   | The badge ID |
 
 ```shell
@@ -107,7 +106,7 @@ POST /groups/:id/badges
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `link_url` | string         | yes | URL of the badge link |
 | `image_url` | string | yes | URL of the badge image |
 | `name` | string | no | Name of the badge |
@@ -142,7 +141,7 @@ PUT /groups/:id/badges/:badge_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `badge_id` | integer | yes   | The badge ID |
 | `link_url` | string         | no | URL of the badge link |
 | `image_url` | string | no | URL of the badge image |
@@ -177,7 +176,7 @@ DELETE /groups/:id/badges/:badge_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `badge_id` | integer | yes   | The badge ID |
 
 ```shell
@@ -194,7 +193,7 @@ GET /groups/:id/badges/render
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `link_url` | string         | yes | URL of the badge link|
 | `image_url` | string | yes | URL of the badge image |
 
diff --git a/doc/api/group_boards.md b/doc/api/group_boards.md
index c4a9eb0903e3ed595c4ed8bb71e8d9b84d2c0b4f..694d099e403ace0ec7c712043b1b89cf07e50bf1 100644
--- a/doc/api/group_boards.md
+++ b/doc/api/group_boards.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group issue boards API
 ---
 
-# Group issue boards API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -25,7 +24,7 @@ GET /groups/:id/boards
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/boards"
@@ -142,7 +141,7 @@ GET /groups/:id/boards/:board_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 
 ```shell
@@ -260,7 +259,7 @@ POST /groups/:id/boards
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the new board. |
 
 ```shell
@@ -297,7 +296,7 @@ PUT /groups/:id/boards/:board_id
 
 | Attribute                    | Type           | Required | Description |
 | ---------------------------- | -------------- | -------- | ----------- |
-| `id`                         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id`                   | integer        | yes      | The ID of a board. |
 | `name`                       | string         | no       | The new name of the board. |
 | `hide_backlog_list`          | boolean        | no       | Hide the Open list. |
@@ -369,7 +368,7 @@ DELETE /groups/:id/boards/:board_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 
 ```shell
@@ -387,7 +386,7 @@ GET /groups/:id/boards/:board_id/lists
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 
 ```shell
@@ -438,7 +437,7 @@ GET /groups/:id/boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `list_id` | integer | yes | The ID of a board's list. |
 
@@ -470,7 +469,7 @@ POST /groups/:id/boards/:board_id/lists
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `label_id` | integer | yes | The ID of a label. |
 
@@ -511,7 +510,7 @@ PUT /groups/:id/boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`            | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `list_id` | integer | yes | The ID of a board's list. |
 | `position` | integer | yes | The position of the list. |
@@ -544,7 +543,7 @@ DELETE /groups/:id/boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `board_id` | integer | yes | The ID of a board. |
 | `list_id` | integer | yes | The ID of a board's list. |
 
diff --git a/doc/api/group_clusters.md b/doc/api/group_clusters.md
index fe3533dca6ebb2dc92eab264c8141063e8b8879b..7d72a91c26aeb3a8f42de92ddfa8a3c087c6cf3c 100644
--- a/doc/api/group_clusters.md
+++ b/doc/api/group_clusters.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group clusters API (certificate-based) (deprecated)
 ---
 
-# Group clusters API (certificate-based) (deprecated)
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -32,7 +31,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description                                                                   |
 | --------- | -------------- | -------- | ----------------------------------------------------------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 
 Example request:
 
@@ -101,7 +100,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description                                                                   |
 | ------------ | -------------- | -------- | ----------------------------------------------------------------------------- |
-| `id`         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `cluster_id` | integer        | yes      | The ID of the cluster                                                         |
 
 Example request:
@@ -170,7 +169,7 @@ Parameters:
 
 | Attribute                                            | Type           | Required | Description                                                                                         |
 | ---------------------------------------------------- | -------------- | -------- | --------------------------------------------------------------------------------------------------- |
-| `id`                                                 | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                       |
+| `id`                                                 | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                       |
 | `name`                                               | string         | yes      | The name of the cluster                                                                             |
 | `domain`                                             | string         | no       | The [base domain](../user/group/clusters/index.md#base-domain) of the cluster                       |
 | `management_project_id`                              | integer        | no       | The ID of the [management project](../user/clusters/management_project.md) for the cluster          |
@@ -241,7 +240,7 @@ Parameters:
 
 | Attribute                                 | Type           | Required | Description                                                                                |
 | ----------------------------------------- | -------------- | -------- | ------------------------------------------------------------------------------------------ |
-| `id`                                      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)              |
+| `id`                                      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)              |
 | `cluster_id`                              | integer        | yes      | The ID of the cluster                                                                      |
 | `name`                                    | string         | no       | The name of the cluster                                                                    |
 | `domain`                                  | string         | no       | The [base domain](../user/group/clusters/index.md#base-domain) of the cluster              |
@@ -326,7 +325,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description                                                                   |
 | ------------ | -------------- | -------- | ----------------------------------------------------------------------------- |
-| `id`         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `cluster_id` | integer        | yes      | The ID of the cluster                                                         |
 
 Example request:
diff --git a/doc/api/group_enterprise_users.md b/doc/api/group_enterprise_users.md
index ee71d3ba47ab8fab23f7aff55607576de65e9c2d..24241817c59739d40ee0e1ded2c7ff20d7ab8fc0 100644
--- a/doc/api/group_enterprise_users.md
+++ b/doc/api/group_enterprise_users.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group enterprise users API
 ---
 
-# Group enterprise users API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com
@@ -24,7 +23,7 @@ Prerequisites:
 
 Lists all enterprise users for a given top-level group.
 
-Use the `page` and `per_page` [pagination parameters](rest/index.md#offset-based-pagination) to filter the results.
+Use the `page` and `per_page` [pagination parameters](rest/_index.md#offset-based-pagination) to filter the results.
 
 ```plaintext
 GET /groups/:id/enterprise_users
@@ -34,7 +33,7 @@ Supported attributes:
 
 | Attribute        | Type           | Required | Description |
 |:-----------------|:---------------|:---------|:------------|
-| `id`             | integer/string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a top-level group. |
+| `id`             | integer/string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a top-level group. |
 | `username`       | string         | no       | Return a user with a given username. |
 | `search`         | string         | no       | Return users with a matching name, email, or username. Use partial values to increase results. |
 | `active`         | boolean        | no       | Return only active users. |
@@ -125,7 +124,7 @@ Supported attributes:
 
 | Attribute        | Type           | Required | Description |
 |:-----------------|:---------------|:---------|:------------|
-| `id`             | integer/string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a top-level group. |
+| `id`             | integer/string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a top-level group. |
 | `user_id`        | integer        | yes      | ID of user account. |
 
 Example request:
@@ -207,7 +206,7 @@ Supported attributes:
 
 | Attribute        | Type           | Required | Description |
 |:-----------------|:---------------|:---------|:------------|
-| `id`             | integer/string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a top-level group. |
+| `id`             | integer/string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a top-level group. |
 | `user_id`        | integer        | yes      | ID of user account. |
 
 Example request:
diff --git a/doc/api/group_epic_boards.md b/doc/api/group_epic_boards.md
index f8a92264f8f83254a362b3709471a3f75d90c1b1..b6d75fd3ccbf697f9c152237aae6ed5f0c24c22a 100644
--- a/doc/api/group_epic_boards.md
+++ b/doc/api/group_epic_boards.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Product Planning
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group epic boards API
 ---
 
-# Group epic boards API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ GET /groups/:id/epic_boards
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) accessible by the authenticated user |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) accessible by the authenticated user |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/epic_boards"
@@ -110,7 +109,7 @@ GET /groups/:id/epic_boards/:board_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) accessible by the authenticated user |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) accessible by the authenticated user |
 | `board_id` | integer | yes | The ID of an epic board |
 
 ```shell
@@ -193,7 +192,7 @@ GET /groups/:id/epic_boards/:board_id/lists
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) accessible by the authenticated user |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) accessible by the authenticated user |
 | `board_id` | integer | yes | The ID of an epic board |
 
 ```shell
@@ -252,7 +251,7 @@ GET /groups/:id/epic_boards/:board_id/lists/:list_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) accessible by the authenticated user |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) accessible by the authenticated user |
 | `board_id` | integer | yes | The ID of an epic board |
 | `list_id` | integer | yes | The ID of an epic board's list |
 
diff --git a/doc/api/group_import_export.md b/doc/api/group_import_export.md
index 874a4a3481b60f1f94829f9cf66b9807f2a623b9..9fd2278fd0790d3bc49d003c7e20bf3a26c5da9c 100644
--- a/doc/api/group_import_export.md
+++ b/doc/api/group_import_export.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group import and export API
 ---
 
-# Group import and export API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/group_iterations.md b/doc/api/group_iterations.md
index 7159afb64d9ca0cbc74cf0b43760996f1020549b..5760df16253cb7e877656783be3e9091b147d428 100644
--- a/doc/api/group_iterations.md
+++ b/doc/api/group_iterations.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group iterations API
 ---
 
-# Group iterations API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/group_labels.md b/doc/api/group_labels.md
index 6f42958673ce438ddd6ecf06aef2a4023a81c53d..2045a41c0af8447beaf53c3ba852ddb3e5998ba4 100644
--- a/doc/api/group_labels.md
+++ b/doc/api/group_labels.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group labels API
 ---
 
-# Group labels API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -24,7 +23,7 @@ GET /groups/:id/labels
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                  |
 | ---------     | ----           | -------- | -----------                                                                                                                                                                  |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).                                                               |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).                                                               |
 | `with_counts` | boolean        | no       | Whether or not to include issue and merge request counts. Defaults to `false`. |
 | `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
 | `include_descendant_groups` | boolean | no | Include descendant groups. Defaults to `false`. |
@@ -76,7 +75,7 @@ GET /groups/:id/labels/:label_id
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                  |
 | ---------     | ----           | -------- | -----------                                                                                                                                                                  |
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).                                                               |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).                                                               |
 | `label_id` | integer or string | yes | The ID or title of a group's label. |
 | `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
 | `include_descendant_groups` | boolean | no | Include descendant groups. Defaults to `false`. |
@@ -113,7 +112,7 @@ POST /groups/:id/labels
 
 | Attribute     | Type    | Required | Description                  |
 | ------------- | ------- | -------- | ---------------------------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `name`        | string  | yes      | The name of the label        |
 | `color`       | string  | yes      | The color of the label given in 6-digit hex notation with leading '#' sign (for example, #FFAABB) or one of the [CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords) |
 | `description` | string  | no       | The description of the label, |
@@ -151,7 +150,7 @@ PUT /groups/:id/labels/:label_id
 
 | Attribute     | Type    | Required | Description                  |
 | ------------- | ------- | -------- | ---------------------------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes | The ID or title of a group's label. |
 | `new_name`    | string  | no      | The new name of the label        |
 | `color`       | string  | no      | The color of the label given in 6-digit hex notation with leading '#' sign (for example, #FFAABB) or one of the [CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords) |
@@ -192,7 +191,7 @@ DELETE /groups/:id/labels/:label_id
 
 | Attribute | Type    | Required | Description           |
 | --------- | ------- | -------- | --------------------- |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes | The ID or title of a group's label. |
 
 ```shell
@@ -213,7 +212,7 @@ POST /groups/:id/labels/:label_id/subscribe
 
 | Attribute  | Type              | Required | Description                          |
 | ---------- | ----------------- | -------- | ------------------------------------ |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes      | The ID or title of a group's label. |
 
 ```shell
@@ -249,7 +248,7 @@ POST /groups/:id/labels/:label_id/unsubscribe
 
 | Attribute  | Type              | Required | Description                          |
 | ---------- | ----------------- | -------- | ------------------------------------ |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes      | The ID or title of a group's label. |
 
 ```shell
diff --git a/doc/api/group_ldap_links.md b/doc/api/group_ldap_links.md
index 59de547092f9fc339c355d18f1c438f58c49f7f4..394d0f62bb7c5c26f5646dc071db9cf707b7fa82 100644
--- a/doc/api/group_ldap_links.md
+++ b/doc/api/group_ldap_links.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: LDAP group links
 ---
 
-# LDAP group links
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed
@@ -24,7 +23,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -65,7 +64,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `group_access` | integer   | yes      | [Role (`access_level`)](members.md#roles) for members of the LDAP group. |
 | `provider` | string        | yes      | LDAP provider ID for the LDAP group link. |
 | `cn`      | string         | yes/no   | The CN of an LDAP group. Provide either a `cn` or a `filter`, but not both. |
@@ -106,7 +105,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `provider` | string        | yes      | LDAP provider ID for the LDAP group link. |
 | `cn`      | string         | yes/no   | The CN of an LDAP group. Provide either a `cn` or a `filter`, but not both. |
 | `filter`  | string         | yes/no   | The LDAP filter for the group. Provide either a `cn` or a `filter`, but not both. |
@@ -136,7 +135,7 @@ DELETE /groups/:id/ldap_group_links/:cn
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `cn`      | string         | yes      | The CN of an LDAP group |
 
 Delete an LDAP group link for a specific LDAP provider:
@@ -147,6 +146,6 @@ DELETE /groups/:id/ldap_group_links/:provider/:cn
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `cn`      | string         | yes      | The CN of an LDAP group |
 | `provider` | string        | yes      | LDAP provider for the LDAP group link |
diff --git a/doc/api/group_level_variables.md b/doc/api/group_level_variables.md
index 0d76f04542568c3fb959b0edb3b04f3e48d8c9f7..ac812852b99c7246aa2d3a305651578d6b69b813 100644
--- a/doc/api/group_level_variables.md
+++ b/doc/api/group_level_variables.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Authoring
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group-level Variables API
 ---
 
-# Group-level Variables API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -20,7 +19,7 @@ GET /groups/:id/variables
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/variables"
@@ -66,7 +65,7 @@ GET /groups/:id/variables/:key
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `key`     | string         | Yes      | The `key` of a variable |
 | `filter`  | hash           | No       | Available filters: `[environment_scope]`. See the [`filter` parameter details](#the-filter-parameter). |
 
@@ -100,7 +99,7 @@ POST /groups/:id/variables
 
 | Attribute                             | Type           | Required | Description |
 |---------------------------------------|----------------|----------|-------------|
-| `id`                                  | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                                  | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `key`                                 | string         | Yes      | The `key` of a variable; must have no more than 255 characters; only `A-Z`, `a-z`, `0-9`, and `_` are allowed. |
 | `value`                               | string         | Yes      | The `value` of a variable. |
 | `description`                         | string         | No       | The `description` of the variable; must have no more than 255 characters. Default: `null`. |
@@ -143,7 +142,7 @@ PUT /groups/:id/variables/:key
 
 | Attribute                             | Type           | Required | Description |
 |---------------------------------------|----------------|----------|-------------|
-| `id`                                  | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                                  | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `key`                                 | string         | Yes      | The `key` of a variable |
 | `value`                               | string         | Yes      | The `value` of a variable |
 | `description`                         | string         | No       | The description of the variable. Default: `null`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/409641) in GitLab 16.2. |
@@ -186,7 +185,7 @@ DELETE /groups/:id/variables/:key
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | The ID of a group or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `key`     | string         | Yes      | The `key` of a variable |
 | `filter`  | hash           | No       | Available filters: `[environment_scope]`. See the [`filter` parameter details](#the-filter-parameter). |
 
diff --git a/doc/api/group_markdown_uploads.md b/doc/api/group_markdown_uploads.md
index d34a632204b430b37b3c18e144680977f5229301..e0cccb4565657749eeb1126175ed4a98119c421e 100644
--- a/doc/api/group_markdown_uploads.md
+++ b/doc/api/group_markdown_uploads.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group Markdown uploads API
 ---
 
-# Group Markdown uploads API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ GET /groups/:id/uploads
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -74,7 +73,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |-------------|-------------------|----------|-------------|
-| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `upload_id` | integer           | Yes      | The ID of the upload. |
 
 Example request:
@@ -99,7 +98,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |-------------|-------------------|----------|-------------|
-| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `secret`    | string            | Yes      | The 32-character secret of the upload. |
 | `filename`  | string            | Yes      | The filename of the upload. |
 
@@ -125,7 +124,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |-------------|-------------------|----------|-------------|
-| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `upload_id` | integer           | Yes      | The ID of the upload. |
 
 Example request:
@@ -150,7 +149,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |-------------|-------------------|----------|-------------|
-| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `secret`    | string            | Yes      | The 32-character secret of the upload. |
 | `filename`  | string            | Yes      | The filename of the upload. |
 
diff --git a/doc/api/group_milestones.md b/doc/api/group_milestones.md
index 6237d8a8e63dc29a44effeb384c9d0095362d06f..7f0654a701917a7b8567e473351a6cf2e0dfd3e1 100644
--- a/doc/api/group_milestones.md
+++ b/doc/api/group_milestones.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group milestones API
 ---
 
-# Group milestones API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -37,7 +36,7 @@ Parameters:
 
 | Attribute                   | Type   | Required | Description |
 | ---------                   | ------ | -------- | ----------- |
-| `id`                        | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                        | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `iids[]`                    | integer array | no | Return only the milestones having the given `iid`. Ignored if `include_ancestors` is `true`. |
 | `state`                     | string | no | Return only `active` or `closed` milestones. |
 | `title`                     | string | no | Return only the milestones having the given `title` (case-sensitive). |
@@ -89,7 +88,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer | yes | The ID of the group milestone |
 
 ## Create new milestone
@@ -104,7 +103,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `title` | string | yes | The title of a milestone |
 | `description` | string | no | The description of the milestone |
 | `due_date` | date | no | The due date of the milestone, in ISO 8601 format (`YYYY-MM-DD`) |
@@ -122,7 +121,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer | yes | The ID of a group milestone |
 | `title` | string | no | The title of a milestone |
 | `description` | string | no | The description of a milestone |
@@ -142,7 +141,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer | yes | The ID of the group's milestone |
 
 ## Get all issues assigned to a single milestone
@@ -157,7 +156,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer | yes | The ID of a group milestone |
 
 Currently, this API endpoint doesn't return issues from any subgroups.
@@ -177,7 +176,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer | yes | The ID of a group milestone |
 
 ## Get all burndown chart events for a single milestone
@@ -196,5 +195,5 @@ Parameters:
 
 | Attribute | Type   | Required | Description |
 | --------- | ------ | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer | yes | The ID of a group milestone |
diff --git a/doc/api/group_protected_branches.md b/doc/api/group_protected_branches.md
index a1f3a8dc1089ac3154f3c9efa54f921619d0c244..b942597c3ebc8eb10eca22a13cafcd269ed2d372 100644
--- a/doc/api/group_protected_branches.md
+++ b/doc/api/group_protected_branches.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group-level protected branches API
 ---
 
-# Group-level protected branches API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed
@@ -43,7 +42,7 @@ GET /groups/:id/protected_branches
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `search` | string | no | Name or part of the name of protected branches to be searched for. |
 
 ```shell
@@ -117,7 +116,7 @@ GET /groups/:id/protected_branches/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the branch or wildcard. |
 
 ```shell
@@ -170,7 +169,7 @@ curl --request POST \
 
 | Attribute                                    | Type | Required | Description |
 | -------------------------------------------- | ---- | -------- | ----------- |
-| `id`                                         | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                                         | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `name`                                       | string         | yes | The name of the branch or wildcard. |
 | `allow_force_push`                           | boolean        | no  | Allow all users with push access to force push. Default: `false`. |
 | `allowed_to_merge`                           | array          | no  | Array of access levels allowed to merge, with each described by a hash of the form `{user_id: integer}`, `{group_id: integer}`, or `{access_level: integer}`. |
@@ -352,7 +351,7 @@ curl --request DELETE \
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the branch. |
 
 Example response:
@@ -388,7 +387,7 @@ curl --request PATCH \
 
 | Attribute                                    | Type           | Required | Description                                                                                                                          |
 | -------------------------------------------- | ---- | -------- | ----------- |
-| `id`                                         | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).                       |
+| `id`                                         | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).                       |
 | `name`                                       | string         | yes      | The name of the branch.                                                                                                               |
 | `allow_force_push`                           | boolean        | no       | When enabled, members who can push to this branch can also force push.                                                               |
 | `allowed_to_push`                            | array          | no       | Array of push access levels, with each described by a hash.                                                                          |
diff --git a/doc/api/group_protected_environments.md b/doc/api/group_protected_environments.md
index 1625e8a884cb1f1dbfc0ecf94707d71d6487cc1b..0962fd247cce63fdccdf6b31fef2034578c44883 100644
--- a/doc/api/group_protected_environments.md
+++ b/doc/api/group_protected_environments.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group-level protected environments API
 ---
 
-# Group-level protected environments API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -37,7 +36,7 @@ GET /groups/:id/protected_environments
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/protected_environments/"
@@ -73,7 +72,7 @@ GET /groups/:id/protected_environments/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `name`    | string | yes    | The deployment tier of the protected environment. One of `production`, `staging`, `testing`, `development`, or `other`. Read more about [deployment tiers](../ci/environments/index.md#deployment-tier-of-environments).|
 
 ```shell
@@ -108,7 +107,7 @@ POST /groups/:id/protected_environments
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `name`    | string | yes    | The deployment tier of the protected environment. One of `production`, `staging`, `testing`, `development`, or `other`. Read more about [deployment tiers](../ci/environments/index.md#deployment-tier-of-environments).|
 | `deploy_access_levels`          | array          | yes | Array of access levels allowed to deploy, with each described by a hash. One of `user_id`, `group_id` or `access_level`. They take the form of `{user_id: integer}`, `{group_id: integer}` or `{access_level: integer}` respectively. |
 | `approval_rules`                | array          | no  | Array of access levels allowed to approve, with each described by a hash. One of `user_id`, `group_id` or `access_level`. They take the form of `{user_id: integer}`, `{group_id: integer}` or `{access_level: integer}` respectively. You can also specify the number of required approvals from the specified entity with `required_approvals` field. See [Multiple approval rules](../ci/environments/deployment_approvals.md#add-multiple-approval-rules) for more information. |
@@ -163,7 +162,7 @@ PUT /groups/:id/protected_environments/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `name`    | string | yes    | The deployment tier of the protected environment. One of `production`, `staging`, `testing`, `development`, or `other`. Read more about [deployment tiers](../ci/environments/index.md#deployment-tier-of-environments).|
 | `deploy_access_levels`          | array          | no | Array of access levels allowed to deploy, with each described by a hash. One of `user_id`, `group_id` or `access_level`. They take the form of `{user_id: integer}`, `{group_id: integer}` or `{access_level: integer}` respectively. |
 | `required_approval_count` | integer        | no       | The number of approvals required to deploy to this environment. |
@@ -329,7 +328,7 @@ DELETE /groups/:id/protected_environments/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) maintained by the authenticated user. |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) maintained by the authenticated user. |
 | `name`    | string | yes    | The deployment tier of the protected environment. One of `production`, `staging`, `testing`, `development`, or `other`. Read more about [deployment tiers](../ci/environments/index.md#deployment-tier-of-environments).|
 
 ```shell
diff --git a/doc/api/group_push_rules.md b/doc/api/group_push_rules.md
index c4fa3f33338a569cc1dc3914b108398130856aea..abbff99e3509268075ec76df8be97d7dc825549b 100644
--- a/doc/api/group_push_rules.md
+++ b/doc/api/group_push_rules.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Use push rules to control the content and format of Git commits your repository will accept. Set standards for commit messages, and block secrets or credentials from being added accidentally."
+title: Group push rules API
 ---
 
-# Group push rules API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -26,7 +25,7 @@ Supported attributes:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID of the group or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID of the group or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -72,7 +71,7 @@ Supported attributes:
 
 | Attribute                                     | Type           | Required | Description |
 | --------------------------------------------- | -------------- | -------- | ----------- |
-| `id`                                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `deny_delete_tag`                             | boolean        | no       | Deny deleting a tag. |
 | `member_check`                                | boolean        | no       | Allow only GitLab users to author commits. |
 | `prevent_secrets`                             | boolean        | no       | Reject files that are likely to [contain secrets](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/checks/files_denylist.yml). |
@@ -131,7 +130,7 @@ PUT /groups/:id/push_rule
 
 | Attribute                                     | Type           | Required | Description |
 | --------------------------------------------- | -------------- | -------- | ----------- |
-| `id`                                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `deny_delete_tag`                             | boolean        | no       | Deny deleting a tag. |
 | `member_check`                                | boolean        | no       | Allow only GitLab users to author commits. |
 | `prevent_secrets`                             | boolean        | no       | Reject files that are likely to [contain secrets](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/checks/files_denylist.yml). |
@@ -190,7 +189,7 @@ Supported attributes:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
diff --git a/doc/api/group_relations_export.md b/doc/api/group_relations_export.md
index ced39f91b45031ea38555efe189818feb40db604..3e41024a6d62986da0db4aba4e27458b31e4cde3 100644
--- a/doc/api/group_relations_export.md
+++ b/doc/api/group_relations_export.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group relations export API
 ---
 
-# Group relations export API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/group_releases.md b/doc/api/group_releases.md
index a686d92014563fba1b8dd4b61bd68bb9c0e3b426..b0cfc6b67294fb0b97e83070a7a55ab656d7dd6e 100644
--- a/doc/api/group_releases.md
+++ b/doc/api/group_releases.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group releases API
 ---
 
-# Group releases API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -16,7 +15,7 @@ DETAILS:
 Review your groups' [releases](../user/project/releases/index.md) with the REST API.
 
 NOTE:
-For more information about the project releases API, see [Releases API](releases/index.md).
+For more information about the project releases API, see [Releases API](releases/_index.md).
 
 ## List group releases
 
@@ -31,7 +30,7 @@ Parameters:
 
 | Attribute           | Type           | Required | Description                                                                                                   |
 |---------------------|----------------|----------|---------------------------------------------------------------------------------------------------------------|
-| `id`                | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `sort`              | string         | no       | The direction of the order. Either `desc` (default) for descending order or `asc` for ascending order.        |
 | `simple`            | boolean        | no       | Return only limited fields for each release.                                                                  |
 
diff --git a/doc/api/group_repository_storage_moves.md b/doc/api/group_repository_storage_moves.md
index df47aec31cac7f2a0c6d33d16dadfcae87d327db..1a35838977450dad0200194ad44ac6ed2ce0abfe 100644
--- a/doc/api/group_repository_storage_moves.md
+++ b/doc/api/group_repository_storage_moves.md
@@ -3,10 +3,9 @@ stage: Create
 group: Remote Development
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for moving the storage for repositories in a GitLab group."
+title: Group repository storage moves API
 ---
 
-# Group repository storage moves API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
@@ -50,7 +49,7 @@ GET /group_repository_storage_moves
 ```
 
 By default, `GET` requests return 20 results at a time, because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 Example request:
 
@@ -87,7 +86,7 @@ GET /groups/:group_id/repository_storage_moves
 ```
 
 By default, `GET` requests return 20 results at a time, because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 Supported attributes:
 
diff --git a/doc/api/group_security_settings.md b/doc/api/group_security_settings.md
index 46a23e1d7ddb28e1f63c07a108c915685951e64b..33d225216641dc4c2f01d34550aeddf29f17971a 100644
--- a/doc/api/group_security_settings.md
+++ b/doc/api/group_security_settings.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Platform Management
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Group security settings API
 ---
 
-# Group security settings API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ Prerequisites:
 
 | Attribute           | Type              | Required   | Description                                                                                                                  |
 | ------------------- | ----------------- | ---------- | -----------------------------------------------------------------------------------------------------------------------------|
-| `id`                | integer or string | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) which the authenticated user is a member of  |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) which the authenticated user is a member of  |
 | `secret_push_protection_enabled`        | boolean | yes        | Whether secret push protection is enabled for the group. |
 | `projects_to_exclude`        | array of integers | no        | The IDs of projects to exclude from the feature.  |
 
diff --git a/doc/api/group_service_accounts.md b/doc/api/group_service_accounts.md
index f5a28e59d62b1b4fec0dfb8f002885e0fb6cc20a..d95b5a79bf21b26b5306050f9cdbacc08171875d 100644
--- a/doc/api/group_service_accounts.md
+++ b/doc/api/group_service_accounts.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group service accounts API
 ---
 
-# Group service accounts API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -22,7 +21,7 @@ Prerequisites:
 
 Lists all service account users in a specified top-level group.
 
-Use the `page` and `per_page` [pagination parameters](rest/index.md#offset-based-pagination) to filter the results.
+Use the `page` and `per_page` [pagination parameters](rest/_index.md#offset-based-pagination) to filter the results.
 
 ```plaintext
 GET /groups/:id/service_accounts
@@ -32,7 +31,7 @@ Parameters:
 
 | Attribute    | Type     | Required   | Description                                                     |
 |:-------------|:---------|:-----------|:----------------------------------------------------------------|
-| `id`         | integer/string | yes  | The ID or [URL-encoded path of the target group](rest/index.md#namespaced-paths). |
+| `id`         | integer/string | yes  | The ID or [URL-encoded path of the target group](rest/_index.md#namespaced-paths). |
 | `order_by`   | string   | no         | Orders list of users by `username` or `id`. Default is `id`.    |
 | `sort`       | string   | no         | Specifies sorting by `asc` or `desc`. Default is `desc`.        |
 
@@ -78,7 +77,7 @@ Supported attributes:
 
 | Attribute  | Type           | Required | Description                                                                   |
 |:-----------|:---------------|:---------|:------------------------------------------------------------------------------|
-| `id`       | integer/string | yes | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a top-level group.     |
+| `id`       | integer/string | yes | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a top-level group.     |
 | `name`     | string         | no  | User account name. If not specified, uses `Service account user`.                  |
 | `username` | string         | no  | User account username. If not specified, generates a name prepended with `service_account_`. |
 
@@ -115,7 +114,7 @@ Parameters:
 
 | Attribute                  | Type           | Required                  | Description                                                                    |
 |:---------------------------|:---------------|:--------------------------|:-------------------------------------------------------------------------------|
-| `id`          | integer/string | yes  | The ID or [URL-encoded path of the target group](rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes  | The ID or [URL-encoded path of the target group](rest/_index.md#namespaced-paths). |
 | `user_id`     | integer | yes      | The ID of a service account user.                            |
 | `hard_delete` | boolean | no       | If true, contributions that would usually be [moved to a Ghost User](../user/profile/account/delete_account.md#associated-records) are instead deleted, as well as groups owned solely by this service account user. |
 
@@ -142,7 +141,7 @@ Parameters:
 
 | Attribute | Type            | Required | Description |
 | --------- | --------------- | -------- | ----------- |
-| `id`      | integer/string | yes  | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a top-level group. |
+| `id`      | integer/string | yes  | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a top-level group. |
 | `user_id` | integer | yes      | ID of service account user.                            |
 | `name`    | string  | yes      | Name of personal access token. |
 | `scopes`  | array   | yes      | Array of approved scopes. For a list of possible values, see [Personal access token scopes](../user/profile/personal_access_tokens.md#personal-access-token-scopes). |
@@ -188,7 +187,7 @@ Parameters:
 
 | Attribute    | Type            | Required | Description |
 | ------------ | --------------- | -------- | ----------- |
-| `id`         | integer/string | yes  | The ID or [URL-encoded path of the target group](rest/index.md#namespaced-paths). |
+| `id`         | integer/string | yes  | The ID or [URL-encoded path of the target group](rest/_index.md#namespaced-paths). |
 | `user_id`    | integer | yes      | The ID of the service account user.                            |
 | `token_id`   | integer | yes      | The ID of the token. |
 | `expires_at` | date   | no        | Expiration date of the access token in ISO format (`YYYY-MM-DD`). [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/505671) in GitLab 17.9. If undefined, the token expires after one week. |
diff --git a/doc/api/group_ssh_certificates.md b/doc/api/group_ssh_certificates.md
index f65b0f8d80301091747a2bf7c2698cc8163beb56..18df2af0da0b95c4a2b14438ef34364e868068a5 100644
--- a/doc/api/group_ssh_certificates.md
+++ b/doc/api/group_ssh_certificates.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group SSH certificates API
 ---
 
-# Group SSH certificates API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com
@@ -31,7 +30,7 @@ Parameters:
 | `id`      | integer | Yes       | The ID of the group. |
 
 By default, `GET` requests return 20 results at a time because the API results are paginated.
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 Example request:
 
diff --git a/doc/api/group_webhooks.md b/doc/api/group_webhooks.md
index 6d4818542d587cf30651134f465dd7ac03179ddd..e06836af57d5c4d7da5075f1f313b709c0a42850 100644
--- a/doc/api/group_webhooks.md
+++ b/doc/api/group_webhooks.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group webhooks API
 ---
 
-# Group webhooks API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -29,7 +28,7 @@ Supported attributes:
 
 | Attribute | Type            | Required | Description |
 | --------- | --------------- | -------- | ----------- |
-| `id`      | integer/string  | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string  | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -96,7 +95,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer        | yes      | The ID of a group hook. |
 
 Example request:
@@ -161,7 +160,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description                                                                                                                                                                                 |
 |-----------|-------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).                                                                                                          |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).                                                                                                          |
 | `hook_id` | integer           | Yes      | The ID of a project hook.                                                                                                                                                                   |
 | `status` | integer or string | No | The response status code of the events, for example: `200` or `500`. You can search by status category: `successful` (200-299), `client_failure` (400-499), and `server_failure` (500-599). |
 | `page`             | integer | No | Page to retrieve. Defaults to `1`.                                                                                                                                                          |
@@ -442,7 +441,7 @@ Supported attributes:
 
 | Attribute | Type             | Required | Description             |
 |-----------|------------------|----------|-------------------------|
-| `id`      | integer/string   | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string   | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer          | Yes      | The ID of a group hook. |
 | `hook_event_id`      | integer | Yes      | The ID of a hook event. |
 
@@ -472,7 +471,7 @@ Supported attributes:
 
 | Attribute                    | Type           | Required | Description |
 | -----------------------------| -------------- |----------| ----------- |
-| `id`                         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                         | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `url`                        | string         | yes      | The hook URL. |
 | `name`                       | string         | no       | Name of the hook ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/460887) in GitLab 17.1). |
 | `description`                | string         | no       | Description of the hook ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/460887) in GitLab 17.1). |
@@ -558,7 +557,7 @@ Supported attributes:
 
 | Attribute                    | Type           | Required | Description |
 | ---------------------------- | -------------- | -------- | ----------- |
-| `id`                         | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                         | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id`                    | integer        | yes      | The ID of the group hook. |
 | `url`                        | string         | yes      | The hook URL. |
 | `name`                       | string         | no       | Name of the hook ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/460887) in GitLab 17.1). |
@@ -652,7 +651,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer        | yes      | The ID of the group hook. |
 
 Example request:
@@ -681,7 +680,7 @@ POST /groups/:id/hooks/:hook_id/test/:trigger
 | Attribute | Type              | Required | Description                                                                                                                                                                                                                                                |
 |-----------|-------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | `hook_id` | integer           | Yes      | The ID of the group hook.                                                                                                                                                                                                                                  |
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).                                                                                                                                                                           |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).                                                                                                                                                                           |
 | `trigger` | string            | Yes      | One of `push_events`, `tag_push_events`, `issues_events`, `confidential_issues_events`, `note_events`, `merge_requests_events`, `job_events`, `pipeline_events`, `wiki_page_events`, `releases_events`, `emoji_events`, or `resource_access_token_events`. |
 
 Example request:
@@ -710,7 +709,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | The ID of the group hook. |
 | `key`     | string            | Yes      | The key of the custom header. |
 | `value`   | string            | Yes      | The value of the custom header. |
@@ -737,7 +736,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | The ID of the group hook. |
 | `key`     | string            | Yes      | The key of the custom header. |
 
@@ -761,7 +760,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | The ID of the group hook. |
 | `key`     | string            | Yes      | The key of the URL variable. |
 | `value`   | string            | Yes      | The value of the URL variable. |
@@ -786,7 +785,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | The ID of the group hook. |
 | `key`     | string            | Yes      | The key of the URL variable. |
 
diff --git a/doc/api/group_wikis.md b/doc/api/group_wikis.md
index ff293205b6f463ba6a657eefc3099ec5ff56698c..7d9594243f2b432f65f10a929f3c4bd3b69363b4 100644
--- a/doc/api/group_wikis.md
+++ b/doc/api/group_wikis.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Knowledge
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Group wikis API
 ---
 
-# Group wikis API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -23,7 +22,7 @@ GET /groups/:id/wikis
 
 | Attribute      | Type           | Required | Description |
 | -------------- | -------------- | -------- | ----------- |
-| `id`           | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `with_content` | boolean        | No       | Include pages' content. |
 
 ```shell
@@ -67,7 +66,7 @@ GET /groups/:id/wikis/:slug
 
 | Attribute     | Type           | Required | Description |
 | ------------- | -------------- | -------- | ----------- |
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `slug`        | string         | Yes      | URL-encoded slug (a unique string) of the wiki page, such as `dir%2Fpage_name`. |
 | `render_html` | boolean        | No       | Return the rendered HTML of the wiki page. |
 | `version`     | string         | No       | Wiki page version SHA. |
@@ -98,7 +97,7 @@ POST /projects/:id/wikis
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `content` | string         | Yes      | The content of the wiki page. |
 | `title`   | string         | Yes      | The title of the wiki page. |
 | `format`  | string         | No       | The format of the wiki page. Available formats are: `markdown` (default), `rdoc`, `asciidoc`, and `org`. |
@@ -131,7 +130,7 @@ PUT /groups/:id/wikis/:slug
 
 | Attribute | Type           | Required                           | Description |
 | --------- | -------------- | ---------------------------------- | ----------- |
-| `id`      | integer/string | Yes                                | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes                                | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `content` | string         | Yes, if `title` is not provided   | The content of the wiki page. |
 | `title`   | string         | Yes, if `content` is not provided | The title of the wiki page. |
 | `format`  | string         | No                                 | The format of the wiki page. Available formats are `markdown` (default), `rdoc`, `asciidoc`, and `org`. |
@@ -165,7 +164,7 @@ DELETE /groups/:id/wikis/:slug
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `slug`    | string         | Yes      | URL-encoded slug (a unique string) of the wiki page, such as `dir%2Fpage_name`. |
 
 ```shell
@@ -185,7 +184,7 @@ POST /groups/:id/wikis/attachments
 
 | Attribute     | Type           | Required | Description |
 | ------------- | -------------- | -------- | ----------- |
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `file`        | string         | Yes      | The attachment to be uploaded. |
 | `branch`      | string         | No       | The name of the branch. Defaults to the wiki repository default branch. |
 
diff --git a/doc/api/groups.md b/doc/api/groups.md
index 2d3836c12f710fee60bf4ae1c55efa1a7499d0c4..71f79b3399ac98d3c12840b2bb6e3700ca90e311 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Groups API
 ---
 
-# Groups API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -29,7 +28,7 @@ Parameters:
 
 | Attribute                | Type           | Required | Description |
 |--------------------------|----------------|----------|-------------|
-| `id`                     | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                     | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `with_custom_attributes` | boolean        | no       | Include [custom attributes](custom_attributes.md) in response (administrators only). |
 | `with_projects`          | boolean        | no       | Include details from projects that belong to the specified group (defaults to `true`). (Deprecated, [scheduled for removal in API v5](https://gitlab.com/gitlab-org/gitlab/-/issues/213797). To get the details of all projects in a group, use the [list a group's projects endpoint](#list-projects).) |
 
@@ -282,9 +281,9 @@ List groups.
 Get a list of visible groups for the authenticated user. When accessed without
 authentication, only public groups are returned.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
-When accessed without authentication, this endpoint also supports [keyset pagination](rest/index.md#keyset-based-pagination):
+When accessed without authentication, this endpoint also supports [keyset pagination](rest/_index.md#keyset-based-pagination):
 
 - When requesting consecutive pages of results, you should use keyset pagination.
 - Beyond a specific offset limit (specified by [max offset allowed by the REST API for offset-based pagination](../administration/instance_limits.md#max-offset-allowed-by-the-rest-api-for-offset-based-pagination)), offset pagination is unavailable.
@@ -496,7 +495,7 @@ List details of the group.
 
 Get a list of projects in this group. When accessed without authentication, only public projects are returned.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 ```plaintext
 GET /groups/:id/projects
@@ -506,7 +505,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description |
 |-------------------------------|----------------|----------|-------------|
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `archived`                    | boolean        | no       | Limit by archived status |
 | `visibility`                  | string         | no       | Limit by visibility `public`, `internal`, or `private` |
 | `order_by`                    | string         | no       | Return projects ordered by `id`, `name`, `path`, `created_at`, `updated_at`, `similarity` <sup>1</sup>, `star_count` or `last_activity_at` fields. Default is `created_at` |
@@ -582,7 +581,7 @@ To distinguish between a project in the group and a project shared to the group,
 
 Get a list of projects shared to this group. When accessed without authentication, only public shared projects are returned.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 ```plaintext
 GET /groups/:id/projects/shared
@@ -592,7 +591,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description |
 | ----------------------------- | -------------- | -------- | ----------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `archived`                    | boolean        | no       | Limit by archived status |
 | `visibility`                  | string         | no       | Limit by visibility `public`, `internal`, or `private` |
 | `order_by`                    | string         | no       | Return projects ordered by `id`, `name`, `path`, `created_at`, `updated_at`, `star_count` or `last_activity_at` fields. Default is `created_at` |
@@ -733,7 +732,7 @@ Parameters:
 
 | Attribute        | Type           | Required | Description |
 |:-----------------|:---------------|:---------|:------------|
-| `id`             | integer/string | yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`             | integer/string | yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `username`       | string         | no       | Return single user with a specific username |
 | `search`         | string         | no       | Search users by name, email, username |
 | `active`         | boolean        | no       | Return only active users |
@@ -819,7 +818,7 @@ Parameters:
 
 | Attribute                  | Type           | Required              | Description |
 |:---------------------------|:---------------|:----------------------|:------------|
-| `id`                       | integer/string | yes                   | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                       | integer/string | yes                   | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `include_saml_users`       | boolean        | yes (see description) | Include users with a SAML identity. Either this value or `include_service_accounts` must be `true`. |
 | `include_service_accounts` | boolean        | yes (see description) | Include service account users. Either this value or `include_saml_users` must be `true`. |
 | `search`                   | string         | no                    | Search users by name, email, username. |
@@ -880,7 +879,7 @@ Example response:
 
 Get a list of visible direct subgroups in this group.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 If you request this list as:
 
@@ -892,7 +891,7 @@ Parameters:
 
 | Attribute                | Type              | Required | Description |
 | ------------------------ | ----------------- | -------- | ----------- |
-| `id`                     | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) of the immediate parent group |
+| `id`                     | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) of the immediate parent group |
 | `skip_groups`            | array of integers | no       | Skip the group IDs passed |
 | `all_available`          | boolean           | no       | Show all the groups you have access to (defaults to `false` for authenticated users, `true` for administrators); Attributes `owned` and `min_access_level` have precedence |
 | `search`                 | string            | no       | Return the list of authorized groups matching the search criteria. Only subgroup short paths are searched (not full paths) |
@@ -963,13 +962,13 @@ Users of [GitLab Premium or Ultimate](https://about.gitlab.com/pricing/) also se
 Get a list of visible descendant groups of this group.
 When accessed without authentication, only public groups are returned.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 Parameters:
 
 | Attribute                | Type              | Required | Description |
 | ------------------------ | ----------------- | -------- | ----------- |
-| `id`                     | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) of the immediate parent group |
+| `id`                     | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) of the immediate parent group |
 | `skip_groups`            | array of integers | no       | Skip the group IDs passed |
 | `all_available`          | boolean           | no       | Show all the groups you have access to (defaults to `false` for authenticated users, `true` for administrators). Attributes `owned` and `min_access_level` have precedence |
 | `search`                 | string            | no       | Return the list of authorized groups matching the search criteria. Only descendant group short paths are searched (not full paths) |
@@ -1078,13 +1077,13 @@ Users of [GitLab Premium or Ultimate](https://about.gitlab.com/pricing/) also se
 
 Get a list of groups where the given group has been invited. When accessed without authentication, only public shared groups are returned.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 Parameters:
 
 | Attribute                             | Type              | Required | Description |
 | ------------------------------------- | ----------------- | -------- | ---------- |
-| `id`                                  | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                                  | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `skip_groups`                         | array of integers | no       | Skip the specified group IDs |
 | `search`                              | string            | no       | Return the list of authorized groups matching the search criteria |
 | `order_by`                            | string            | no       | Order groups by `name`, `path`, `id`, or `similarity`. Default is `name` |
@@ -1157,13 +1156,13 @@ Example response:
 Get a list of invited groups in the given group. When accessed without authentication, only public invited groups are returned.
 This endpoint is rate-limited to 60 requests per minute per user (for authenticated users) or IP (for unauthenticated users).
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 Parameters:
 
 | Attribute                             | Type              | Required | Description |
 | ------------------------------------- | ----------------- | -------- | ---------- |
-| `id`                                  | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                                  | integer/string    | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `search`                              | string            | no       | Return the list of authorized groups matching the search criteria |
 | `min_access_level`                    | integer           | no       | Limit to groups where current user has at least the specified [role (`access_level`)](members.md#roles) |
 | `relation`                            | array of strings  | no       | Filter the groups by relation (direct or inherited) |
@@ -1574,7 +1573,7 @@ Parameters:
 
 | Attribute            | Type           | Required | Description |
 |----------------------|----------------|----------|-------------|
-| `id`                 | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                 | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `permanently_remove` | boolean/string | no       | Immediately deletes a subgroup if it is marked for deletion. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/368276) in GitLab 15.4. Premium and Ultimate only. |
 | `full_path`          | string         | no       | Full path of subgroup to use with `permanently_remove`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/368276) in GitLab 15.4. To find the subgroup path, see the [group details](groups.md#get-a-single-group). Premium and Ultimate only. |
 
@@ -1599,7 +1598,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 
 ### Revoke a token
 
@@ -1633,7 +1632,7 @@ POST /groups/:id/tokens/revoke
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `token`   | string            | Yes      | The plaintext token. |
 
 If successful, returns [`200 OK`](rest/troubleshooting.md#status-codes) and
@@ -1683,7 +1682,7 @@ POST /groups/:id/share
 
 | Attribute      | Type           | Required | Description |
 |----------------|----------------|----------|-------------|
-| `id`           | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`           | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `group_id`     | integer        | yes      | The ID of the group to share with |
 | `group_access` | integer        | yes      | The [role (`access_level`)](members.md#roles) to grant the group |
 | `expires_at`   | string         | no       | Share expiration date in ISO 8601 format: 2016-09-26 |
@@ -1698,7 +1697,7 @@ DELETE /groups/:id/share/:group_id
 
 | Attribute  | Type           | Required | Description |
 |------------|----------------|----------|-------------|
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `group_id` | integer        | yes      | The ID of the group to share with |
 
 ### Transfer a project to a group
@@ -1714,8 +1713,8 @@ Parameters:
 
 | Attribute    | Type           | Required | Description |
 | ------------ | -------------- | -------- | ----------- |
-| `id`         | integer/string | yes      | The ID or [URL-encoded path of the target group](rest/index.md#namespaced-paths) |
-| `project_id` | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer/string | yes      | The ID or [URL-encoded path of the target group](rest/_index.md#namespaced-paths) |
+| `project_id` | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -1758,7 +1757,7 @@ GET /groups/:id/transfer_locations
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group to be transferred](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the group to be transferred](rest/_index.md#namespaced-paths). |
 | `search`  | string            | No       | The group names to search for. |
 
 Example request:
diff --git a/doc/api/import.md b/doc/api/import.md
index e729861ffaf7947ba2237e1dfa8979742bc11e32..fc5422b6f1e8b466839bd10859ccc6a76362c269 100644
--- a/doc/api/import.md
+++ b/doc/api/import.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Import API
 ---
 
-# Import API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/instance_clusters.md b/doc/api/instance_clusters.md
index aa39161ae811784569d035fc8b0dae3d853d23b3..6cb17e1b019f761b25c36adf170d71aaee910b3a 100644
--- a/doc/api/instance_clusters.md
+++ b/doc/api/instance_clusters.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Instance clusters API (certificate-based) (deprecated)
 ---
 
-# Instance clusters API (certificate-based) (deprecated)
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/instance_level_ci_variables.md b/doc/api/instance_level_ci_variables.md
index 79d4fc772cf22c55c6a38ea041d3cf3bbbf55c46..c7a449566ebb02ebe4cec5ae73d382be54afc021 100644
--- a/doc/api/instance_level_ci_variables.md
+++ b/doc/api/instance_level_ci_variables.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Authoring
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Instance-level CI/CD variables API
 ---
 
-# Instance-level CI/CD variables API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/integrations.md b/doc/api/integrations.md
index 4abdd39de9b1e9254c3a77a2920e962f2670f0ae..58338c8d00969c304bac20e9a00d8f2b7390e3b6 100644
--- a/doc/api/integrations.md
+++ b/doc/api/integrations.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Integrations API
 ---
 
-# Integrations API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/invitations.md b/doc/api/invitations.md
index 91f7e51c1482a05450579a0f2cd1cd9bdf66f0f3..14b82990f291e57db255eb96769f0fbf8d5cb473 100644
--- a/doc/api/invitations.md
+++ b/doc/api/invitations.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Invitations API
 ---
 
-# Invitations API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -38,7 +37,7 @@ POST /projects/:id/invitations
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths) |
 | `email` | string | yes (if `user_id` isn't provided) | The email of the new member or multiple emails separated by commas. |
 | `user_id`   | integer/string | yes (if `email` isn't provided) | The ID of the new member or multiple IDs separated by commas. |
 | `access_level` | integer | yes | A valid access level |
@@ -105,7 +104,7 @@ GET /projects/:id/invitations
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths) |
 | `page`    | integer | no   | Page to retrieve                      |
 | `per_page`| integer | no   | Number of member invitations to return per page |
 | `query`   | string  | no   | A query string to search for invited members by invite email. Query text must match email address exactly. When empty, returns all invitations. |
@@ -142,7 +141,7 @@ PUT /projects/:id/invitations/:email
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `email`   | string | yes    | The email address the invitation was previously sent to. |
 | `access_level` | integer | no | A valid access level (defaults: `30`, the Developer role). |
 | `expires_at` | string | no | A date string in ISO 8601 format (`YYYY-MM-DDTHH:MM:SSZ`). |
@@ -172,7 +171,7 @@ DELETE /projects/:id/invitations/:email
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths) |
 | `email`   | string | yes    | The email address to which the invitation was previously sent |
 
 ```shell
diff --git a/doc/api/issue_links.md b/doc/api/issue_links.md
index f0b03ccac991afbdd1a1411176498370eb6a071d..aebbe9c3a1a0cb6b8c5bc2b59980c1ffd1dae845 100644
--- a/doc/api/issue_links.md
+++ b/doc/api/issue_links.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Issue links API
 ---
 
-# Issue links API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -26,7 +25,7 @@ Parameters:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)  |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)  |
 | `issue_iid` | integer | yes      | The internal ID of a project's issue |
 
 ```json
@@ -81,7 +80,7 @@ Supported attributes:
 
 | Attribute       | Type           | Required               | Description                                                                 |
 |-----------------|----------------|------------------------|-----------------------------------------------------------------------------|
-| `id`            | integer/string | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | Yes | Internal ID of a project's issue.                                           |
 | `issue_link_id` | integer/string | Yes | ID of an issue relationship.                                                |
 
@@ -178,9 +177,9 @@ POST /projects/:id/issues/:issue_iid/links
 
 | Attribute           | Type           | Required | Description                          |
 |---------------------|----------------|----------|--------------------------------------|
-| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid`         | integer        | yes      | The internal ID of a project's issue |
-| `target_project_id` | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) of a target project  |
+| `target_project_id` | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) of a target project  |
 | `target_issue_iid`  | integer/string | yes      | The internal ID of a target project's issue |
 | `link_type`         | string         | no       | The type of the relation (`relates_to`, `blocks`, `is_blocked_by`), defaults to `relates_to`). |
 
@@ -266,7 +265,7 @@ DELETE /projects/:id/issues/:issue_iid/links/:issue_link_id
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)  |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)  |
 | `issue_iid` | integer | yes      | The internal ID of a project's issue |
 | `issue_link_id` | integer/string | yes      | The ID of an issue relationship |
 | `link_type` | string  | no | The type of the relation (`relates_to`, `blocks`, `is_blocked_by`), defaults to `relates_to` |
diff --git a/doc/api/issues.md b/doc/api/issues.md
index 6d3cd7c51c490ebea8eacfd43f55a9ee400b3c4d..a503036fc0e72e22c7f1c78f12ec72e1873ffc5b 100644
--- a/doc/api/issues.md
+++ b/doc/api/issues.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Issues API
 ---
 
-# Issues API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -19,7 +18,7 @@ request on that project results in a `404` status code.
 
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 NOTE:
 The `references.relative` attribute is relative to the group or project of the issue being requested.
@@ -286,7 +285,7 @@ Supported attributes:
 
 | Attribute           | Type             | Required   | Description                                                                                                                   |
 | ------------------- | ---------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer/string   | Yes        | The global ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).                 |
+| `id`                | integer/string   | Yes        | The global ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).                 |
 | `assignee_id`       | integer          | No         | Return issues assigned to the given user `id`. Mutually exclusive with `assignee_username`. `None` returns unassigned issues. `Any` returns issues with an assignee. |
 | `assignee_username` | string array     | No         | Return issues assigned to the given `username`. Similar to `assignee_id` and mutually exclusive with `assignee_id`. In GitLab CE, the `assignee_username` array should only contain a single value. Otherwise, an invalid parameter error is returned. |
 | `author_id`         | integer          | No         | Return issues created by the given user `id`. Mutually exclusive with `author_username`. Combine with `scope=all` or `scope=assigned_to_me`. |
@@ -493,7 +492,7 @@ Supported attributes:
 
 | Attribute           | Type             | Required   | Description                                                                                                                   |
 | ------------------- | ---------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer/string   | Yes        | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).               |
+| `id`                | integer/string   | Yes        | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).               |
 | `assignee_id`       | integer          | No         | Return issues assigned to the given user `id`. Mutually exclusive with `assignee_username`. `None` returns unassigned issues. `Any` returns issues with an assignee. |
 | `assignee_username` | string array     | No         | Return issues assigned to the given `username`. Similar to `assignee_id` and mutually exclusive with `assignee_id`. In GitLab CE, the `assignee_username` array should only contain a single value. Otherwise, an invalid parameter error is returned. |
 | `author_id`         | integer          | No         | Return issues created by the given user `id`. Mutually exclusive with `author_username`. Combine with `scope=all` or `scope=assigned_to_me`. |
@@ -865,7 +864,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -1027,7 +1026,7 @@ Supported attributes:
 
 | Attribute                                 | Type           | Required | Description  |
 |-------------------------------------------|----------------|----------|--------------|
-| `id`                                      | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                      | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `assignee_id`                             | integer        | No       | The ID of the user to assign the issue to. Only appears on GitLab Free. |
 | `assignee_ids`                            | integer array  | No       | The IDs of the users to assign the issue to. Premium and Ultimate only.|
 | `confidential`                            | boolean        | No       | Set an issue to be confidential. Default is `false`.  |
@@ -1199,7 +1198,7 @@ Supported attributes:
 
 | Attribute      | Type    | Required | Description                                                                                                |
 |----------------|---------|----------|------------------------------------------------------------------------------------------------------------|
-| `id`           | integer/string | Yes | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | Yes | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`    | integer | Yes      | The internal ID of a project's issue.                                                                       |
 | `add_labels`   | string  | No       | Comma-separated label names to add to an issue. If a label does not already exist, this creates a new project label and assigns it to the issue. |
 | `assignee_ids` | integer array | No | The ID of the users to assign the issue to. Set to `0` or provide an empty value to unassign all assignees. |
@@ -1361,7 +1360,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -1386,7 +1385,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of the project's issue. |
 | `move_after_id` | integer | No | The global ID of a project's issue that should be placed after this issue. |
 | `move_before_id` | integer | No | The global ID of a project's issue that should be placed before this issue. |
@@ -1416,7 +1415,7 @@ Supported attributes:
 
 | Attribute       | Type    | Required | Description                          |
 |-----------------|---------|----------|--------------------------------------|
-| `id`            | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`            | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid`     | integer | Yes      | The internal ID of a project's issue. |
 | `to_project_id` | integer | Yes      | The ID of the new project.            |
 
@@ -1570,7 +1569,7 @@ Supported attributes:
 
 | Attribute       | Type           | Required               | Description                       |
 | --------------- | -------------- | ---------------------- | --------------------------------- |
-| `id`            | integer/string | Yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | Yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid`     | integer        | Yes | Internal ID of a project's issue. |
 | `to_project_id` | integer        | Yes | ID of the new project.            |
 | `with_notes`    | boolean        | No | Clone the issue with [notes](notes.md). Default is `false`. |
@@ -1688,7 +1687,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -1837,7 +1836,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -1917,7 +1916,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2047,7 +2046,7 @@ Supported attributes:
 
 | Attribute   | Type           | Required | Description |
 | :---------- | :------------- | :------- | :---------- |
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer        | Yes      | The internal ID of a project's issue. |
 | `body`      | String         | Yes      | The content of a note. Must contain `/promote` at the start of a new line. If the note only contains `/promote`, promotes the issue, but doesn't add a comment. Otherwise, the other lines form a comment.|
 
@@ -2106,7 +2105,7 @@ Supported attributes:
 | Attribute   | Type    | Required | Description                              |
 |-------------|---------|----------|------------------------------------------|
 | `duration`  | string  | Yes      | The duration in human-readable format. For example: `3h30m`. |
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).      |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).      |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue.     |
 
 Example request:
@@ -2140,7 +2139,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2175,7 +2174,7 @@ Supported attributes:
 | Attribute   | Type    | Required | Description                              |
 |-------------|---------|----------|------------------------------------------|
 | `duration`  | string  | Yes      | The duration in human-readable format. For example: `3h30m` |
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue.    |
 | `summary`   | string  | No       | A summary of how the time was spent.  |
 
@@ -2210,7 +2209,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2247,7 +2246,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2287,7 +2286,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2452,7 +2451,7 @@ Supported attributes:
 
 | Attribute   | Type           | Required | Description                        |
 | ----------- | ---------------| -------- | ---------------------------------- |
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `issue_iid` | integer        | Yes      | The internal ID of a project issue. |
 
 Example request:
@@ -2536,7 +2535,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2588,7 +2587,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2633,7 +2632,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 | `file` | file | Yes      | The image file to be uploaded. |
 | `url` | string | No      | The URL to view more metric information. |
@@ -2676,7 +2675,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 
 Example request:
@@ -2721,7 +2720,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 | `image_id` | integer | Yes      | The ID of the image. |
 | `url` | string | No      | The URL to view more metric information. |
@@ -2764,7 +2763,7 @@ Supported attributes:
 
 | Attribute   | Type    | Required | Description                          |
 |-------------|---------|----------|--------------------------------------|
-| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).  |
+| `id`        | integer/string | Yes      | The global ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).  |
 | `issue_iid` | integer | Yes      | The internal ID of a project's issue. |
 | `image_id` | integer | Yes      | The ID of the image. |
 
diff --git a/doc/api/issues_statistics.md b/doc/api/issues_statistics.md
index 7f6276c9c68b562fb417ea04bd80ae36c12fd391..dd577d3a8c8e1bb9c6f8d4d688244b88c2f246f4 100644
--- a/doc/api/issues_statistics.md
+++ b/doc/api/issues_statistics.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Issues statistics API
 ---
 
-# Issues statistics API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -95,7 +94,7 @@ GET /groups/:id/issues_statistics?confidential=true
 
 | Attribute           | Type             | Required   | Description                                                                                                                   |
 | ------------------- | ---------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                 |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                 |
 | `labels`            | string           | no         | Comma-separated list of label names, issues must have all labels to be returned. `None` lists all issues with no labels. `Any` lists all issues with at least one label. |
 | `iids[]`            | integer array    | no         | Return only the issues having the given `iid`                                                                                 |
 | `milestone`         | string           | no         | The milestone title. `None` lists all issues with no milestone. `Any` lists all issues that have an assigned milestone.       |
@@ -151,7 +150,7 @@ GET /projects/:id/issues_statistics?confidential=true
 
 | Attribute           | Type             | Required   | Description                                                                                                                   |
 | ------------------- | ---------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)               |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)               |
 | `iids[]`            | integer array    | no         | Return only the milestone having the given `iid`                                                                              |
 | `labels`            | string           | no         | Comma-separated list of label names, issues must have all labels to be returned. `None` lists all issues with no labels. `Any` lists all issues with at least one label. |
 | `milestone`         | string           | no         | The milestone title. `None` lists all issues with no milestone. `Any` lists all issues that have an assigned milestone.       |
diff --git a/doc/api/iterations.md b/doc/api/iterations.md
index a1ddb6d173da02dccd4612bafe70577a50c050bf..f6ad4889403332e9b4ac83b8be09e9a8edda8306 100644
--- a/doc/api/iterations.md
+++ b/doc/api/iterations.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project iterations API
 ---
 
-# Project iterations API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/job_artifacts.md b/doc/api/job_artifacts.md
index 8b6f8858414d0bea1d8904562c48e96dcbdb226c..655747a2ab25b963424b54075703315010730135 100644
--- a/doc/api/job_artifacts.md
+++ b/doc/api/job_artifacts.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Execution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Job Artifacts API
 ---
 
-# Job Artifacts API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -30,7 +29,7 @@ GET /projects/:id/jobs/:job_id/artifacts
 
 | Attribute                     | Type           | Required | Description |
 |-------------------------------|----------------|----------|-------------|
-| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`                      | integer        | Yes      | ID of a job. |
 | `job_token`                   | string         | No       | To be used with [triggers](../ci/jobs/job_artifacts.md#with-a-cicd-job-token) for multi-project pipelines. It should be invoked only in a CI/CD job defined in the `.gitlab-ci.yml` file. The value is always `$CI_JOB_TOKEN`. The job associated with the `$CI_JOB_TOKEN` must be running when this token is used. Premium and Ultimate only. |
 
@@ -107,7 +106,7 @@ Parameters
 
 | Attribute                     | Type           | Required | Description |
 |-------------------------------|----------------|----------|-------------|
-| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job`                         | string         | Yes      | The name of the job. |
 | `ref_name`                    | string         | Yes      | Branch or tag name in repository. HEAD or SHA references are not supported. |
 | `job_token`                   | string         | No       | To be used with [triggers](../ci/jobs/job_artifacts.md#with-a-cicd-job-token) for multi-project pipelines. It should be invoked only in a CI/CD job defined in the `.gitlab-ci.yml` file. The value is always `$CI_JOB_TOKEN`. The job associated with the `$CI_JOB_TOKEN` must be running when this token is used. Premium and Ultimate only. |
@@ -170,7 +169,7 @@ Parameters
 | Attribute                     | Type           | Required | Description |
 |-------------------------------|----------------|----------|-------------|
 | `artifact_path`               | string         | Yes      | Path to a file inside the artifacts archive. |
-| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`                      | integer        | Yes      | The unique job identifier. |
 | `job_token`                   | string         | No       | To be used with [triggers](../ci/jobs/job_artifacts.md#with-a-cicd-job-token) for multi-project pipelines. It should be invoked only in a CI/CD job defined in the `.gitlab-ci.yml` file. The value is always `$CI_JOB_TOKEN`. The job associated with the `$CI_JOB_TOKEN` must be running when this token is used. Premium and Ultimate only. |
 
@@ -223,7 +222,7 @@ Parameters:
 | Attribute                     | Type           | Required | Description |
 |-------------------------------|----------------|----------|-------------|
 | `artifact_path`               | string         | Yes      | Path to a file inside the artifacts archive. |
-| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job`                         | string         | Yes      | The name of the job. |
 | `ref_name`                    | string         | Yes      | Branch or tag name in repository. `HEAD` or `SHA` references are not supported. |
 | `job_token`                   | string         | No       | To be used with [triggers](../ci/jobs/job_artifacts.md#with-a-cicd-job-token) for multi-project pipelines. It should be invoked only in a CI/CD job defined in the `.gitlab-ci.yml` file. The value is always `$CI_JOB_TOKEN`. The job associated with the `$CI_JOB_TOKEN` must be running when this token is used. Premium and Ultimate only. |
@@ -257,7 +256,7 @@ Parameters
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 Example request:
@@ -314,7 +313,7 @@ DELETE /projects/:id/jobs/:job_id/artifacts
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 Example request:
@@ -351,7 +350,7 @@ DELETE /projects/:id/artifacts
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
diff --git a/doc/api/jobs.md b/doc/api/jobs.md
index c983a5a95a051da24e5bcf60aba605a713675bb9..2ae8b9725b8da6b1ab2f94c9d78ba19aeba0557b 100644
--- a/doc/api/jobs.md
+++ b/doc/api/jobs.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Execution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Jobs API
 ---
 
-# Jobs API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -16,10 +15,10 @@ DETAILS:
 
 Get a list of jobs in a project. Jobs are sorted in descending order of their IDs.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination)
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination)
 
 NOTE:
-This endpoint supports both offset-based and [keyset-based](rest/index.md#keyset-based-pagination) pagination, but keyset-based
+This endpoint supports both offset-based and [keyset-based](rest/_index.md#keyset-based-pagination) pagination, but keyset-based
 pagination is strongly recommended when requesting consecutive pages of results.
 
 ```plaintext
@@ -28,7 +27,7 @@ GET /projects/:id/jobs
 
 | Attribute | Type                           | Required | Description |
 |-----------|--------------------------------|----------|-------------|
-| `id`      | integer/string                 | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string                 | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `scope`   | string **or** array of strings | No       | Scope of jobs to show. Either one of or an array of the following: `created`, `pending`, `running`, `failed`, `success`, `canceled`, `skipped`, `waiting_for_resource`, or `manual`. All jobs are returned if `scope` is not provided. |
 
 ```shell
@@ -201,7 +200,7 @@ Example of response
 
 Get a list of jobs for a pipeline.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination)
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination)
 
 This endpoint:
 
@@ -215,7 +214,7 @@ GET /projects/:id/pipelines/:pipeline_id/jobs
 
 | Attribute         | Type                           | Required | Description |
 |-------------------|--------------------------------|----------|-------------|
-| `id`              | integer/string                 | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer/string                 | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `pipeline_id`     | integer                        | Yes      | ID of a pipeline. Can also be obtained in CI jobs via the [predefined CI variable](../ci/variables/predefined_variables.md) `CI_PIPELINE_ID`. |
 | `include_retried` | boolean                        | No       | Include retried jobs in the response. Defaults to `false`. |
 | `scope`           | string **or** array of strings | No       | Scope of jobs to show. Either one of or an array of the following: `created`, `pending`, `running`, `failed`, `success`, `canceled`, `skipped`, `waiting_for_resource`, or `manual`. All jobs are returned if `scope` is not provided. |
@@ -395,7 +394,7 @@ GET /projects/:id/pipelines/:pipeline_id/bridges
 
 | Attribute     | Type                           | Required | Description |
 |---------------|--------------------------------|----------|-------------|
-| `id`          | integer/string                 | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`          | integer/string                 | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `pipeline_id` | integer                        | Yes      | ID of a pipeline. |
 | `scope`       | string **or** array of strings | No       | Scope of jobs to show. Either one of or an array of the following: `created`, `pending`, `running`, `failed`, `success`, `canceled`, `skipped`, `waiting_for_resource`, or `manual`. All jobs are returned if `scope` is not provided. |
 
@@ -637,7 +636,7 @@ GET /projects/:id/jobs/:job_id
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 ```shell
@@ -720,7 +719,7 @@ GET /projects/:id/jobs/:job_id/trace
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 ```shell
@@ -744,7 +743,7 @@ POST /projects/:id/jobs/:job_id/cancel
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 ```shell
@@ -800,7 +799,7 @@ POST /projects/:id/jobs/:job_id/retry
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 ```shell
@@ -861,7 +860,7 @@ Parameters
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`  | integer        | Yes      | ID of a job. |
 
 Example of request
@@ -924,7 +923,7 @@ POST /projects/:id/jobs/:job_id/play
 
 | Attribute                  | Type            | Required | Description |
 |----------------------------|-----------------|----------|-------------|
-| `id`                       | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                       | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `job_id`                   | integer         | Yes      | ID of a job. |
 | `job_variables_attributes` | array of hashes | No       | An array containing the custom variables available to the job. |
 
diff --git a/doc/api/keys.md b/doc/api/keys.md
index eb54b866f6ebfec3f659b8119a7417a8efa16a56..f66d2bd264e41f40e5d2eccf380bbd3f393d9722 100644
--- a/doc/api/keys.md
+++ b/doc/api/keys.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Keys API
 ---
 
-# Keys API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/labels.md b/doc/api/labels.md
index e39a959ddb2184968a1679bcd116c79dc98e18df..e873a52aec9c37759aa90a68b5fef09393758630 100644
--- a/doc/api/labels.md
+++ b/doc/api/labels.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Labels API
 ---
 
-# Labels API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -16,7 +15,7 @@ Interact with [labels](../user/project/labels.md) using the REST API.
 
 Get all labels for a given project.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 ```plaintext
 GET /projects/:id/labels
@@ -24,7 +23,7 @@ GET /projects/:id/labels
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                  |
 | ---------     | -------        | -------- | ---------------------                                                                                                                                                        |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                                              |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                                              |
 | `with_counts` | boolean        | no       | Whether or not to include issue and merge request counts. Defaults to `false`. |
 | `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
 | `search` | string | no | Keyword to filter labels by. |
@@ -120,7 +119,7 @@ GET /projects/:id/labels/:label_id
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                  |
 | ---------     | -------        | -------- | ---------------------                                                                                                                                                        |
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                                              |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                                              |
 | `label_id` | integer or string | yes | The ID or title of a project's label. |
 | `include_ancestor_groups` | boolean | no | Include ancestor groups. Defaults to `true`. |
 
@@ -157,7 +156,7 @@ POST /projects/:id/labels
 
 | Attribute     | Type    | Required | Description                  |
 | ------------- | ------- | -------- | ---------------------------- |
-| `id`      | integer/string    | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string    | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name`        | string  | yes      | The name of the label        |
 | `color`       | string  | yes      | The color of the label given in 6-digit hex notation with leading '#' sign (for example, #FFAABB) or one of the [CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords) |
 | `description` | string  | no       | The description of the label |
@@ -196,7 +195,7 @@ DELETE /projects/:id/labels/:label_id
 
 | Attribute | Type    | Required | Description           |
 | --------- | ------- | -------- | --------------------- |
-| `id`            | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`            | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes | The ID or title of a group's label. |
 
 ```shell
@@ -217,7 +216,7 @@ PUT /projects/:id/labels/:label_id
 
 | Attribute       | Type    | Required                          | Description                      |
 | --------------- | ------- | --------------------------------- | -------------------------------  |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes | The ID or title of a group's label. |
 | `new_name`      | string  | yes if `color` is not provided    | The new name of the label        |
 | `color`         | string  | yes if `new_name` is not provided | The color of the label given in 6-digit hex notation with leading '#' sign (for example, #FFAABB) or one of the [CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords) |
@@ -261,7 +260,7 @@ PUT /projects/:id/labels/:label_id/promote
 
 | Attribute       | Type    | Required                          | Description                      |
 | --------------- | ------- | --------------------------------- | -------------------------------  |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes | The ID or title of a group's label. |
 
 ```shell
@@ -299,7 +298,7 @@ POST /projects/:id/labels/:label_id/subscribe
 
 | Attribute  | Type              | Required | Description                          |
 | ---------- | ----------------- | -------- | ------------------------------------ |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes      | The ID or title of a project's label |
 
 ```shell
@@ -337,7 +336,7 @@ POST /projects/:id/labels/:label_id/unsubscribe
 
 | Attribute  | Type              | Required | Description                          |
 | ---------- | ----------------- | -------- | ------------------------------------ |
-| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string    | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `label_id` | integer or string | yes      | The ID or title of a project's label |
 
 ```shell
diff --git a/doc/api/license.md b/doc/api/license.md
index 69041fc8565e150992a9e48748398de782329eb1..73c0cbf0243d193f1da5e7a71713345abc2acce9 100644
--- a/doc/api/license.md
+++ b/doc/api/license.md
@@ -2,10 +2,9 @@
 stage: Fulfillment
 group: Utilization
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: License
 ---
 
-# License
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/linked_epics.md b/doc/api/linked_epics.md
index c155f834b2fccb47fa3373f6480c536186871c7c..289c103ad91200d2be668adfa3eae133145e4e30 100644
--- a/doc/api/linked_epics.md
+++ b/doc/api/linked_epics.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Product Planning
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Linked epics API
 ---
 
-# Linked epics API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -35,7 +34,7 @@ Supported attributes:
 
 | Attribute  | Type           | Required               | Description                                                               |
 | ---------- | -------------- | ---------------------- | ------------------------------------------------------------------------- |
-| `id`       | integer/string | Yes | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`       | integer/string | Yes | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `created_after` | string | no | Return related epic links created on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`)  |
 | `created_before` | string | no | Return related epic links created on or before the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
 | `updated_after` | string | no | Return related epic links updated on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`)  |
@@ -157,7 +156,7 @@ Supported attributes:
 | Attribute  | Type           | Required               | Description                                                               |
 | ---------- | -------------- | ---------------------- | ------------------------------------------------------------------------- |
 | `epic_iid` | integer        | Yes | Internal ID of a group's epic                                             |
-| `id`       | integer/string | Yes | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`       | integer/string | Yes | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -235,9 +234,9 @@ Supported attributes:
 | Attribute           | Type           | Required                    | Description                           |
 |---------------------|----------------|-----------------------------|---------------------------------------|
 | `epic_iid`          | integer        | Yes      | Internal ID of a group's epic.        |
-| `id`                | integer/string | Yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | Yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `target_epic_iid`   | integer/string | Yes      | Internal ID of a target group's epic. |
-| `target_group_id`   | integer/string | Yes      | ID or [URL-encoded path of the target group](rest/index.md#namespaced-paths). |
+| `target_group_id`   | integer/string | Yes      | ID or [URL-encoded path of the target group](rest/_index.md#namespaced-paths). |
 | `link_type`         | string         | No      | Type of the relation (`relates_to`, `blocks`, `is_blocked_by`), defaults to `relates_to`. |
 
 Example request:
@@ -356,7 +355,7 @@ Supported attributes:
 | Attribute                | Type           | Required                    | Description                           |
 |--------------------------|----------------|-----------------------------|---------------------------------------|
 | `epic_iid`               | integer        | Yes      | Internal ID of a group's epic.        |
-| `id`                     | integer/string | Yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                     | integer/string | Yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `related_epic_link_id`   | integer/string | Yes      | Internal ID of a related epic link. |
 
 Example request:
diff --git a/doc/api/lint.md b/doc/api/lint.md
index 788f02e4fa927aae394e205010fe42fd37b614ab..1294d93db091be1cf9cb4337c3f10df332d70434 100644
--- a/doc/api/lint.md
+++ b/doc/api/lint.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Authoring
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: CI Lint API
 ---
 
-# CI Lint API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/markdown.md b/doc/api/markdown.md
index ac60c2e955f49da44db096653077d3d41025d9fd..1b3b47e0efccbc480536af8b67a471cecd3c0f8b 100644
--- a/doc/api/markdown.md
+++ b/doc/api/markdown.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Knowledge
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Markdown API
 ---
 
-# Markdown API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/member_roles.md b/doc/api/member_roles.md
index 8a0e9c27660c2583f1da6bc5720c47cdbc878df2..b0bb1a3a222f4a567e5be10d2935955aab7be191 100644
--- a/doc/api/member_roles.md
+++ b/doc/api/member_roles.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Member roles API
 ---
 
-# Member roles API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed
@@ -205,7 +204,7 @@ Supported attributes:
 
 | Attribute | Type | Required | Description |
 |:----------|:--------|:---------|:-------------------------------------|
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) of the group |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) of the group |
 
 Example request:
 
@@ -288,7 +287,7 @@ Parameters:
 
 | Attribute | Type                | Required | Description |
 |:----------|:--------|:---------|:-------------------------------------|
-| `id`      | integer/string      | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) of the group. |
+| `id`      | integer/string      | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) of the group. |
 | `admin_cicd_variables` | boolean | no       | Permission to create, read, update, and delete CI/CD variables. |
 | `admin_compliance_framework` | boolean | no       | Permission to administer compliance frameworks. |
 | `admin_group_member` | boolean | no       | Permission to add, remove and assign members in a group. |
@@ -364,7 +363,7 @@ DELETE /groups/:id/member_roles/:member_role_id
 
 | Attribute | Type | Required | Description |
 |:----------|:--------|:---------|:-------------------------------------|
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) of the group. |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) of the group. |
 | `member_role_id` | integer | yes   | The ID of the member role. |
 
 If successful, returns [`204`](rest/troubleshooting.md#status-codes) and an empty response.
diff --git a/doc/api/members.md b/doc/api/members.md
index 1a98f2d363bd0dd2580f0a30f125645e702da862..0de1c023fcde0241af06807a0dde8436c22c70e6 100644
--- a/doc/api/members.md
+++ b/doc/api/members.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Group and project members API
 ---
 
-# Group and project members API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -47,7 +46,7 @@ GET /projects/:id/members
 
 | Attribute        | Type              | Required | Description |
 |------------------|-------------------|----------|-------------|
-| `id`             | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `query`          | string            | no       | Filters results based on a given name, email, or username. Use partial values to widen the scope of the query. |
 | `user_ids`       | array of integers | no       | Filter the results on the given user IDs. |
 | `skip_users`     | array of integers | no       | Filter skipped users out of the results. |
@@ -144,7 +143,7 @@ GET /projects/:id/members/all
 
 | Attribute        | Type              | Required | Description |
 |------------------|-------------------|----------|-------------|
-| `id`             | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `query`          | string            | no       | Filters results based on a given name, email, or username. Use partial values to widen the scope of the query. |
 | `user_ids`       | array of integers | no       | Filter the results on the given user IDs. |
 | `show_seat_info` | boolean           | no       | Show seat information for users. |
@@ -240,7 +239,7 @@ GET /projects/:id/members/:user_id
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the member. |
 
 ```shell
@@ -297,7 +296,7 @@ GET /projects/:id/members/all/:user_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer or string | yes | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer | yes   | The user ID of the member. |
 
 ```shell
@@ -342,7 +341,7 @@ Prerequisites:
 - You must have the Owner role to access the API endpoint for billing permissions, as shown in [billing permissions](../user/free_user_limit.md).
 - This API endpoint works on top-level groups only. It does not work on subgroups.
 
-This function takes [pagination](rest/index.md#pagination) parameters `page` and `per_page` to restrict the list of users.
+This function takes [pagination](rest/_index.md#pagination) parameters `page` and `per_page` to restrict the list of users.
 
 Use the `search` parameter to search for billable group members by name, and `sort` to sort the results.
 
@@ -352,7 +351,7 @@ GET /groups/:id/billable_members
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `search`  | string            | no       | A query string to search for group members by name, username, or public email. |
 | `sort`    | string            | no       | A query string containing parameters that specify the sort attribute and order. See supported values below. |
 
@@ -438,7 +437,7 @@ are included. For instance, if the requested group is `Top-Level Group`, and the
 of both `Top-Level Group / Subgroup One` and `Other Group / Subgroup Two`, then only `Top-Level Group / Subgroup One`
 is returned, because `Other Group / Subgroup Two` is not in the `Top-Level Group` hierarchy.
 
-This API endpoint takes [pagination](rest/index.md#pagination) parameters `page` and `per_page` to restrict
+This API endpoint takes [pagination](rest/_index.md#pagination) parameters `page` and `per_page` to restrict
 the list of memberships.
 
 ```plaintext
@@ -447,7 +446,7 @@ GET /groups/:id/billable_members/:user_id/memberships
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the billable member. |
 
 ```shell
@@ -505,7 +504,7 @@ For instance, if the requested group is `Top-Level Group`, and the requested use
 
 The response lists only indirect memberships. Direct memberships are not included.
 
-This API endpoint takes [pagination](rest/index.md#pagination) parameters `page` and `per_page` to restrict the list of memberships.
+This API endpoint takes [pagination](rest/_index.md#pagination) parameters `page` and `per_page` to restrict the list of memberships.
 
 ```plaintext
 GET /groups/:id/billable_members/:user_id/indirect
@@ -513,7 +512,7 @@ GET /groups/:id/billable_members/:user_id/indirect
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the billable member. |
 
 ```shell
@@ -560,7 +559,7 @@ DELETE /groups/:id/billable_members/:user_id
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the member. |
 
 ```shell
@@ -584,7 +583,7 @@ PUT /groups/:id/members/:user_id/state
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the member. |
 | `state`   | string            | yes      | The new state for the user. State is either `awaiting` or `active`. |
 
@@ -612,7 +611,7 @@ POST /projects/:id/members
 
 | Attribute        | Type              | Required                           | Description |
 |------------------|-------------------|------------------------------------|-------------|
-| `id`             | integer or string | yes                                | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | yes                                | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `user_id`        | integer or string | yes, if `username` is not provided | The user ID of the new member or multiple IDs separated by commas. |
 | `username`       | string            | yes, if `user_id` is not provided  | The username of the new member or multiple usernames separated by commas. |
 | `access_level`   | integer           | yes                                | [A valid access level](access_requests.md#valid-access-levels). |
@@ -706,7 +705,7 @@ PUT /projects/:id/members/:user_id
 
 | Attribute        | Type              | Required | Description |
 |------------------|-------------------|----------|-------------|
-| `id`             | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `user_id`        | integer           | yes      | The user ID of the member. |
 | `access_level`   | integer           | yes      | A [valid access level](access_requests.md#valid-access-levels). |
 | `expires_at`     | string            | no       | A date string in the format `YEAR-MONTH-DAY`. |
@@ -772,7 +771,7 @@ POST /groups/:id/members/:user_id/override
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the member. |
 
 ```shell
@@ -817,7 +816,7 @@ DELETE /groups/:id/members/:user_id/override
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `user_id` | integer           | yes      | The user ID of the member. |
 
 ```shell
@@ -867,7 +866,7 @@ DELETE /projects/:id/members/:user_id
 
 | Attribute            | Type              | Required | Description |
 |----------------------|-------------------|----------|-------------|
-| `id`                 | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/index.md#namespaced-paths). |
+| `id`                 | integer or string | yes      | The ID or [URL-encoded path of the project or group](rest/_index.md#namespaced-paths). |
 | `user_id`            | integer           | yes      | The user ID of the member. |
 | `skip_subresources`  | boolean           | false    | Whether the deletion of direct memberships of the removed member in subgroups and projects should be skipped. Default is `false`. |
 | `unassign_issuables` | boolean           | false    | Whether the removed member should be unassigned from any issues or merge requests inside a given group or project. Default is `false`. |
@@ -891,7 +890,7 @@ PUT /groups/:id/members/:member_id/approve
 
 | Attribute   | Type              | Required | Description |
 |-------------|-------------------|----------|-------------|
-| `id`        | integer or string | yes      | The ID or [URL-encoded path of the top-level group](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | yes      | The ID or [URL-encoded path of the top-level group](rest/_index.md#namespaced-paths). |
 | `member_id` | integer           | yes      | The ID of the member. |
 
 Example request:
@@ -911,7 +910,7 @@ POST /groups/:id/members/approve_all
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the top-level group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the top-level group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -934,7 +933,7 @@ This request returns all matching group and project members from all groups and
 
 When the member is an invited user that has not signed up for a GitLab account yet, the invited email address is returned.
 
-This API endpoint takes [pagination](rest/index.md#pagination) parameters `page` and `per_page` to restrict the list of members.
+This API endpoint takes [pagination](rest/_index.md#pagination) parameters `page` and `per_page` to restrict the list of members.
 
 ```plaintext
 GET /groups/:id/pending_members
@@ -942,7 +941,7 @@ GET /groups/:id/pending_members
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
diff --git a/doc/api/merge_request_approval_settings.md b/doc/api/merge_request_approval_settings.md
index 41b42ab5226bbf9d7ce1f4be0f8cc99696ab766f..ea4e8e97f14699530b2531f90ba9f84b3df50737 100644
--- a/doc/api/merge_request_approval_settings.md
+++ b/doc/api/merge_request_approval_settings.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for merge request approval settings in GitLab."
+title: Merge request approval settings API
 ---
 
-# Merge request approval settings API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ Parameters:
 
 | Attribute        | Type           | Required | Description |
 |:-----------------|:---------------|:---------|:------------|
-| `id`             | integer or string | Yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | Yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -96,7 +95,7 @@ Parameters:
 
 | Attribute                                            | Type              | Required | Description |
 |------------------------------------------------------|-------------------|----------|-------------|
-| `id`                                                 | integer or string | Yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                                                 | integer or string | Yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `allow_author_approval`                              | boolean           | No       | Allow or prevent authors from self approving merge requests; `true` means authors can self approve. |
 | `allow_committer_approval`                           | boolean           | No       | Allow or prevent committers from self approving merge requests. |
 | `allow_overrides_to_approver_list_per_merge_request` | boolean           | No       | Allow or prevent overriding approvers per merge request. |
@@ -172,7 +171,7 @@ Parameters:
 
 | Attribute        | Type           | Required | Description |
 |:-----------------|:---------------|:---------|:------------|
-| `id`             | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -235,7 +234,7 @@ Parameters:
 
 | Attribute                                            | Type              | Required | Description |
 |------------------------------------------------------|-------------------|----------|-------------|
-| `id`                                                 | integer or string | Yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                                                 | integer or string | Yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `allow_author_approval`                              | boolean           | No       | Allow or prevent authors from self approving merge requests; `true` means authors can self approve. |
 | `allow_committer_approval`                           | boolean           | No       | Allow or prevent committers from self approving merge requests. |
 | `allow_overrides_to_approver_list_per_merge_request` | boolean           | No       | Allow or prevent overriding approvers per merge request. |
diff --git a/doc/api/merge_request_approvals.md b/doc/api/merge_request_approvals.md
index 1e8efc5ffcc88c9d89e72ddd411c567bd79b3ae4..a63544deec538bbb57bb86ed9e29b18d31d3ee41 100644
--- a/doc/api/merge_request_approvals.md
+++ b/doc/api/merge_request_approvals.md
@@ -3,10 +3,9 @@ stage: Create
 group: Code Review
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for merge request approvals in GitLab."
+title: Merge request approvals API
 ---
 
-# Merge request approvals API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -41,13 +40,13 @@ Group admins can request information about a group's approval rules using the fo
 GET /groups/:id/approval_rules
 ```
 
-Use the `page` and `per_page` [pagination](rest/index.md#offset-based-pagination) parameters to restrict the list of approval rules.
+Use the `page` and `per_page` [pagination](rest/_index.md#offset-based-pagination) parameters to restrict the list of approval rules.
 
 Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -116,7 +115,7 @@ Supported attributes:
 
 | Attribute            | Type              | Required | Description |
 |----------------------|-------------------|----------|-------------|
-| `id`                 | integer or string | Yes      | The ID or [URL-encoded path of a group](rest/index.md#namespaced-paths). |
+| `id`                 | integer or string | Yes      | The ID or [URL-encoded path of a group](rest/_index.md#namespaced-paths). |
 | `approvals_required` | integer           | Yes      | The number of required approvals for this rule. |
 | `name`               | string            | Yes      | The name of the approval rule. |
 | `group_ids`          | array             | No       | The IDs of groups as approvers. |
@@ -191,7 +190,7 @@ Supported attributes:
 | Attribute            | Type              | Required | Description |
 |----------------------|-------------------|----------|-------------|
 | `approval_rule_id`.  | integer           | Yes      | The ID of the approval rule. |
-| `id`                 | integer or string | Yes      | The ID or [URL-encoded path of a group](rest/index.md#namespaced-paths). |
+| `id`                 | integer or string | Yes      | The ID or [URL-encoded path of a group](rest/_index.md#namespaced-paths). |
 | `approvals_required` | string            | No       | The number of required approvals for this rule. |
 | `group_ids`          | integer           | No       | The IDs of users as approvers. |
 | `name`               | string            | No       | The name of the approval rule. |
@@ -266,7 +265,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 
 ```json
 {
@@ -295,7 +294,7 @@ Supported attributes:
 
 | Attribute                                        | Type              | Required | Description |
 |--------------------------------------------------|-------------------|----------|-------------|
-| `id`                                             | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                                             | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approvals_before_merge` (deprecated)            | integer           | No       | Number of required approvals before a merge request can merge. [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/11132) in GitLab 12.3. Use [Approval Rules](#create-project-level-rule) instead. |
 | `disable_overriding_approvers_per_merge_request` | boolean           | No       | Allow or prevent overriding approvers per merge request. |
 | `merge_requests_author_approval`                 | boolean           | No       | Allow or prevent authors from self approving merge requests; `true` means authors can self approve. |
@@ -331,13 +330,13 @@ You can request information about a project's approval rules using the following
 GET /projects/:id/approval_rules
 ```
 
-Use the `page` and `per_page` [pagination](rest/index.md#offset-based-pagination) parameters to restrict the list of approval rules.
+Use the `page` and `per_page` [pagination](rest/_index.md#offset-based-pagination) parameters to restrict the list of approval rules.
 
 Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 
 ```json
 [
@@ -519,7 +518,7 @@ Supported attributes:
 
 | Attribute          | Type              | Required | Description |
 |--------------------|-------------------|----------|-------------|
-| `id`               | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`               | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approval_rule_id` | integer           | Yes      | The ID of a approval rule. |
 
 ```json
@@ -621,7 +620,7 @@ Supported attributes:
 
 | Attribute                           | Type              | Required | Description |
 |-------------------------------------|-------------------|----------|-------------|
-| `id`                                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approvals_required`                | integer           | Yes      | The number of required approvals for this rule. |
 | `name`                              | string            | Yes      | The name of the approval rule. |
 | `applies_to_all_protected_branches` | boolean           | No       | Whether to apply the rule to all protected branches. If set to `true`, ignores the value of `protected_branch_ids`. Default is `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335316) in GitLab 15.3. |
@@ -757,7 +756,7 @@ Supported attributes:
 
 | Attribute                           | Type              | Required | Description |
 |-------------------------------------|-------------------|----------|-------------|
-| `id`                                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approvals_required`                | integer           | Yes      | The number of required approvals for this rule. |
 | `approval_rule_id`                  | integer           | Yes      | The ID of a approval rule. |
 | `name`                              | string            | Yes      | The name of the approval rule. |
@@ -862,7 +861,7 @@ Supported attributes:
 
 | Attribute          | Type              | Required | Description |
 |--------------------|-------------------|----------|-------------|
-| `id`               | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`               | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approval_rule_id` | integer           | Yes      | The ID of a approval rule. |
 
 ## Merge request-level MR approvals
@@ -880,7 +879,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The IID of the merge request. |
 
 ```json
@@ -929,7 +928,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The IID of the merge request. |
 
 ```json
@@ -992,13 +991,13 @@ You can request information about a merge request's approval rules using the fol
 GET /projects/:id/merge_requests/:merge_request_iid/approval_rules
 ```
 
-Use the `page` and `per_page` [pagination](rest/index.md#offset-based-pagination) parameters to restrict the list of approval rules.
+Use the `page` and `per_page` [pagination](rest/_index.md#offset-based-pagination) parameters to restrict the list of approval rules.
 
 Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The IID of the merge request. |
 
 ```json
@@ -1130,7 +1129,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approval_rule_id`  | integer           | Yes      | The ID of an approval rule. |
 | `merge_request_iid` | integer           | Yes      | The IID of a merge request. |
 
@@ -1205,7 +1204,7 @@ Supported attributes:
 
 | Attribute                  | Type              | Required               | Description                                                                  |
 |----------------------------|-------------------|------------------------|------------------------------------------------------------------------------|
-| `id`                       | integer or string | Yes | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths) |
+| `id`                       | integer or string | Yes | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths) |
 | `approvals_required`       | integer           | Yes | The number of required approvals for this rule.                              |
 | `merge_request_iid`        | integer           | Yes | The IID of the merge request.                                                |
 | `name`                     | string            | Yes | The name of the approval rule.                                               |
@@ -1292,7 +1291,7 @@ Supported attributes:
 
 | Attribute              | Type              | Required | Description |
 |------------------------|-------------------|----------|-------------|
-| `id`                   | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                   | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approval_rule_id`     | integer           | Yes      | The ID of an approval rule. |
 | `merge_request_iid`    | integer           | Yes      | The IID of a merge request. |
 | `approvals_required`   | integer           | No       | The number of required approvals for this rule. |
@@ -1374,7 +1373,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approval_rule_id`  | integer           | Yes      | The ID of an approval rule. |
 | `merge_request_iid` | integer           | Yes      | The IID of the merge request. |
 
@@ -1390,7 +1389,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `approval_password` | string            | No       | Current user's password. Required if [**Require user re-authentication to approve**](../user/project/merge_requests/approvals/settings.md#require-user-re-authentication-to-approve) is enabled in the project settings. Always fails if the group or GitLab Self-Managed instance is configured to force SAML authentication. |
 | `merge_request_iid` | integer           | Yes      | The IID of the merge request. |
 | `sha`               | string            | No       | The `HEAD` of the merge request. |
@@ -1451,7 +1450,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of a project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The IID of a merge request. |
 
 ## Reset approvals of a merge request
@@ -1467,7 +1466,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 ```shell
diff --git a/doc/api/merge_request_context_commits.md b/doc/api/merge_request_context_commits.md
index 30844b7249d25f0c2f4396127b0f2e23cd057837..17e654e4d7eb3cd31f6af2b1382300449cadeb0a 100644
--- a/doc/api/merge_request_context_commits.md
+++ b/doc/api/merge_request_context_commits.md
@@ -3,10 +3,9 @@ stage: Create
 group: Code Review
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for merge request context commits in GitLab."
+title: Merge request context commits API
 ---
 
-# Merge request context commits API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ Parameters:
 
 | Attribute           | Type    | Required | Description |
 |---------------------|---------|----------|-------------|
-| `id`                | integer | Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer | Yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer | Yes | The internal ID of the merge request. |
 
 ```json
@@ -61,7 +60,7 @@ Parameters:
 
 | Attribute           | Type    | Required | Description |
 |---------------------|---------|----------|-------------|
-| `id`                | integer | Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)  |
+| `id`                | integer | Yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)  |
 | `merge_request_iid` | integer | Yes | The internal ID of the merge request. |
 | `commits`           | string array | Yes | The context commits' SHAs. |
 
@@ -112,5 +111,5 @@ Parameters:
 | Attribute           | Type         | Required | Description  |
 |---------------------|--------------|----------|--------------|
 | `commits`           | string array | Yes | The context commits' SHA. |
-| `id`                | integer      | Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer      | Yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer      | Yes | The internal ID of the merge request. |
diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md
index c979b206c4f116c6fee2786b0d986a10b39e6434..0ca8801f19c6f6b3deee886b85af55c9fbe3159b 100644
--- a/doc/api/merge_requests.md
+++ b/doc/api/merge_requests.md
@@ -3,10 +3,9 @@ stage: Create
 group: Code Review
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for merge requests in GitLab."
+title: Merge requests API
 ---
 
-# Merge requests API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -241,7 +240,7 @@ Supported attributes:
 
 | Attribute                       | Type           | Required | Description |
 | ------------------------------- | -------------- | -------- | ----------- |
-| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `approved_by_ids`               | integer array  | No       | Returns merge requests approved by all the users with the given `id`, up to 5 users. `None` returns merge requests with no approvals. `Any` returns merge requests with an approval. Premium and Ultimate only. |
 | `approver_ids`                  | integer array  | No       | Returns merge requests which have specified all the users with the given `id` as individual approvers. `None` returns merge requests without approvers. `Any` returns merge requests with an approver. Premium and Ultimate only. |
 | `approved`                      | string         | No       | Filters merge requests by their `approved` status. `yes` returns only approved merge requests. `no` returns only non-approved merge requests. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3159) in GitLab 15.11. Available only when the feature flag `mr_approved_filter` is enabled. |
@@ -490,7 +489,7 @@ Supported attributes:
 
 | Attribute                       | Type           | Required | Description |
 | ------------------------------- | -------------- | -------- | ----------- |
-| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `approved_by_ids`               | integer array  | No       | Returns the merge requests approved by all the users with the given `id`, up to 5 users. `None` returns merge requests with no approvals. `Any` returns merge requests with an approval. Premium and Ultimate only. |
 | `approved_by_usernames`         | string array  | No       | Returns the merge requests approved by all the users with the given `username`, up to 5 users. `None` returns merge requests with no approvals. `Any` returns merge requests with an approval. Premium and Ultimate only. |
 | `approver_ids`                  | integer array  | No       | Returns merge requests which have specified all the users with the given `id` as individual approvers. `None` returns merge requests without approvers. `Any` returns merge requests with an approver. Premium and Ultimate only. |
@@ -666,7 +665,7 @@ Supported attributes:
 
 | Attribute                        | Type           | Required | Description |
 |----------------------------------|----------------|----------|-------------|
-| `id`                             | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                             | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid`              | integer        | Yes      | The internal ID of the merge request. |
 | `include_diverged_commits_count` | boolean        | No       | If `true`, response includes the commits behind the target branch. |
 | `include_rebase_in_progress`     | boolean        | No       | If `true`, response includes whether a rebase operation is in progress. |
@@ -946,7 +945,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 Example response:
@@ -984,7 +983,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 Example response:
@@ -1030,7 +1029,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | Internal ID of the merge request. |
 
 If successful, returns [`200 OK`](rest/troubleshooting.md#status-codes) and the following
@@ -1117,7 +1116,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -1373,7 +1372,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) owned by the authenticated user. |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) owned by the authenticated user. |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 | `block_id`          | integer        | Yes      | The internal ID of the block. |
 
@@ -1402,7 +1401,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) owned by the authenticated user. |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) owned by the authenticated user. |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 | `blocking_merge_request_id`          | integer        | Yes      | The internal ID of the blocking merge request. |
 
@@ -1554,7 +1553,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -1753,7 +1752,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 | `access_raw_diffs`  | boolean        | No       | Retrieve change diffs through Gitaly. |
 | `unidiff`           | boolean        | No       | Present change diffs in the [unified diff](https://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html) format. Default is false. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/130610) in GitLab 16.5. |
@@ -1891,7 +1890,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 | `page`              | integer           | No       | The page of results to return. Defaults to 1. |
 | `per_page`          | integer           | No       | The number of results per page. Defaults to 20. |
@@ -1964,7 +1963,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 If successful, returns [`200 OK`](rest/troubleshooting.md#status-codes) and a raw diff response to use programmatically:
@@ -2025,7 +2024,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 To restrict the list of merge request pipelines, use the pagination parameters `page` and
@@ -2064,7 +2063,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 Example response:
@@ -2118,7 +2117,7 @@ POST /projects/:id/merge_requests
 
 | Attribute                  | Type    | Required | Description |
 | ---------                  | ----    | -------- | ----------- |
-| `id`                       | integer or string | Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                       | integer or string | Yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `source_branch`            | string  | Yes      | The source branch. |
 | `target_branch`            | string  | Yes      | The target branch. |
 | `title`                    | string  | Yes      | Title of MR. |
@@ -2275,7 +2274,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid
 
 | Attribute                  | Type    | Required | Description |
 | ---------                  | ----    | -------- | ----------- |
-| `id`                       | integer or string | Yes  | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                       | integer or string | Yes  | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid`        | integer | Yes      | The ID of a merge request. |
 | `add_labels`               | string  | No       | Comma-separated label names to add to a merge request. If a label does not already exist, this creates a new project label and assigns it to the merge request. |
 | `allow_collaboration`      | boolean | No       | Allow commits from members who can merge to the target branch. |
@@ -2450,7 +2449,7 @@ DELETE /projects/:id/merge_requests/:merge_request_iid
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 ```shell
@@ -2471,7 +2470,7 @@ Supported attributes:
 
 | Attribute                      | Type           | Required | Description |
 |--------------------------------|----------------|----------|-------------|
-| `id`                           | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                           | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid`            | integer        | Yes      | The internal ID of the merge request. |
 | `merge_commit_message`         | string         | No       | Custom merge commit message. |
 | `merge_when_pipeline_succeeds` | boolean        | No       | If `true`, the merge request merges when the pipeline succeeds. |
@@ -2651,7 +2650,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 This API returns specific HTTP status codes:
@@ -2681,7 +2680,7 @@ Supported attributes:
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 This API returns specific HTTP status codes:
@@ -2845,7 +2844,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid/rebase
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 | `skip_ci`           | boolean        | No       | Set to `true` to skip creating a CI pipeline. |
 
@@ -2921,7 +2920,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes   | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes   | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | Internal ID of the merge request. |
 
 If successful, returns [`200 OK`](rest/troubleshooting.md#status-codes) and the following
@@ -3079,7 +3078,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/related_issues
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 
 ```shell
@@ -3155,7 +3154,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/subscribe
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 If the user is already subscribed to the merge request, the endpoint returns the
@@ -3320,7 +3319,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 
 ```shell
@@ -3486,7 +3485,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/todo
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 ```shell
@@ -3811,7 +3810,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 | `duration`          | string            | Yes      | The duration in human format, such as `3h30m`. |
 
@@ -3842,7 +3841,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/reset_time_estimate
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of a project's merge request. |
 
 ```shell
@@ -3872,7 +3871,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 | `duration`          | string         | Yes      | The duration in human format, such as `3h30m` |
 | `summary`           | string         | No       | A summary of how the time was spent. |
@@ -3904,7 +3903,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of a project's merge request. |
 
 ```shell
@@ -3932,7 +3931,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/time_stats
 
 | Attribute           | Type              | Required | Description |
 |---------------------|-------------------|----------|-------------|
-| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer           | Yes      | The internal ID of the merge request. |
 
 ```shell
diff --git a/doc/api/merge_trains.md b/doc/api/merge_trains.md
index ca461ff784f4c9d7ef21131169fede0c7c197d4c..9314447f78ee326cfd7cf9e3fcbc9bc1a5d29f6c 100644
--- a/doc/api/merge_trains.md
+++ b/doc/api/merge_trains.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Execution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Merge Trains API
 ---
 
-# Merge Trains API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -21,7 +20,7 @@ If Merge Trains is not available for the project, a `403` status code is returne
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-For more information, see [pagination](rest/index.md#pagination).
+For more information, see [pagination](rest/_index.md#pagination).
 
 ## List Merge Trains for a project
 
@@ -34,7 +33,7 @@ GET /projects/:id/merge_trains?scope=complete
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `scope`   | string         | No       | Return Merge Trains filtered by the given scope. Available scopes are `active` (to be merged) and `complete` (have been merged). |
 | `sort`    | string         | No       | Return Merge Trains sorted in `asc` or `desc` order. Default: `desc`. |
 
@@ -98,7 +97,7 @@ Supported attributes:
 
 | Attribute       | Type           | Required | Description |
 |-----------------|----------------|----------|-------------|
-| `id`            | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `target_branch` | string         | Yes      | The target branch of the merge train. |
 | `scope`         | string         | No       | Return Merge Trains filtered by the given scope. Available scopes are `active` (to be merged) and `complete` (have been merged). |
 | `sort`          | string         | No       | Return Merge Trains sorted in `asc` or `desc` order. Default: `desc`. |
@@ -168,7 +167,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid` | integer        | Yes      | The internal ID of the merge request. |
 
 Example request:
@@ -234,7 +233,7 @@ Supported attributes:
 
 | Attribute                | Type           | Required | Description |
 |--------------------------|----------------|----------|-------------|
-| `id`                     | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                     | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `merge_request_iid`      | integer        | Yes      | The internal ID of the merge request. |
 | `sha`                    | string         | No       | If present, the SHA must match the `HEAD` of the source branch, otherwise the merge fails. |
 | `squash`                 | boolean        | No       | If true, the commits are squashed into a single commit on merge. |
diff --git a/doc/api/metadata.md b/doc/api/metadata.md
index 8989904c1f113d54b079e066f407b7c3344c5d5e..558263b04f94dc311d92248702db29b16bc98af5 100644
--- a/doc/api/metadata.md
+++ b/doc/api/metadata.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Metadata API
 ---
 
-# Metadata API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/milestones.md b/doc/api/milestones.md
index 6f6b37f63898885b43214fd9be4afec60a8b88c7..4bb5c2da17caf04c1d3e3a394ec531525ccecc02 100644
--- a/doc/api/milestones.md
+++ b/doc/api/milestones.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project milestones API
 ---
 
-# Project milestones API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ Parameters:
 
 | Attribute                         | Type   | Required | Description |
 | ----------------------------      | ------ | -------- | ----------- |
-| `id`                              | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                              | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `iids[]`                          | integer array | no | Return only the milestones having the given `iid`. Ignored if `include_ancestors` is `true`.  |
 | `state`                           | string | no | Return only `active` or `closed` milestones |
 | `title`                           | string | no | Return only the milestones having the given `title` |
@@ -79,7 +78,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
 
 ## Create new milestone
@@ -94,7 +93,7 @@ Parameters:
 
 | Attribute     | Type           | Required | Description                                                                                                     |
 |---------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `title`       | string         | yes      | The title of a milestone                                                                                        |
 | `description` | string         | no       | The description of the milestone                                                                                |
 | `due_date`    | string         | no       | The due date of the milestone (`YYYY-MM-DD`)                                                                    |
@@ -112,7 +111,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
 | `title`        | string         | no       | The title of a milestone                                                                                        |
 | `description`  | string         | no       | The description of the milestone                                                                                |
@@ -135,7 +134,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
 
 ## Get all issues assigned to a single milestone
@@ -150,7 +149,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
 
 ## Get all merge requests assigned to a single milestone
@@ -165,7 +164,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
 
 ## Promote project milestone to a group milestone
@@ -183,7 +182,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
 
 ## Get all burndown chart events for a single milestone
@@ -202,5 +201,5 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                     |
 |----------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `milestone_id` | integer        | yes      | The ID of the project's milestone                                                                               |
diff --git a/doc/api/model_registry.md b/doc/api/model_registry.md
index 499f442eb42f54ca31ce6e604a1a04e7801a7789..cef0a0cf824ede8fc2988ff28cee725371cdc12e 100644
--- a/doc/api/model_registry.md
+++ b/doc/api/model_registry.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: MLOps
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Model registry API
 ---
 
-# Model registry API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -22,7 +21,7 @@ Parameters:
 
 | Attribute          | Type              | Required | Description                                                                            |
 |--------------------|-------------------|----------|----------------------------------------------------------------------------------------|
-| `id`               | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)    |
+| `id`               | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)    |
 | `model_version_id` | integer           | yes      | The model version ID for the file                                                      |
 | `path`             | string            | yes      | File directory path                                                                    |
 | `filename`         | string            | yes      | Filename                                                                               |
diff --git a/doc/api/namespaces.md b/doc/api/namespaces.md
index 5caf421f7b7816b9888dbc4a311a01ee137e01a8..677b75df20158c1a6fe3355945c1683f5ed41153 100644
--- a/doc/api/namespaces.md
+++ b/doc/api/namespaces.md
@@ -2,17 +2,16 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Namespaces API
 ---
 
-# Namespaces API
-
 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).
 
-This API uses [Pagination](rest/index.md#pagination) to filter results.
+This API uses [Pagination](rest/_index.md#pagination) to filter results.
 
 ## List all namespaces
 
@@ -126,7 +125,7 @@ GET /namespaces/:id
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of the namespace. |
+| `id`      | integer/string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the namespace. |
 
 Example request:
 
diff --git a/doc/api/notes.md b/doc/api/notes.md
index 8276bee134f1f4c16d92aec63240dc7f36ffe3d7..729cb992677fef58a3444e371a6f4706ec0bd6d1 100644
--- a/doc/api/notes.md
+++ b/doc/api/notes.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Notes API
 ---
 
-# Notes API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -36,7 +35,7 @@ Some system notes are not part of this API, but are recorded as separate events:
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ## Rate limits
 
@@ -56,7 +55,7 @@ GET /projects/:id/issues/:issue_iid/notes?sort=asc&order_by=updated_at
 
 | Attribute           | Type             | Required   | Description                                                                                                                                         |
 | ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid`         | integer          | yes        | The IID of an issue |
 | `sort`              | string           | no         | Return issue notes sorted in `asc` or `desc` order. Default is `desc` |
 | `order_by`          | string           | no         | Return issue notes ordered by `created_at` or `updated_at` fields. Default is `created_at` |
@@ -133,7 +132,7 @@ Parameters:
 
 | Attribute   | Type           | Required | Description                                                                     |
 |-------------|----------------|----------|---------------------------------------------------------------------------------|
-| `id`        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid` | integer        | yes      | The IID of a project issue                                                      |
 | `note_id`   | integer        | yes      | The ID of an issue note                                                         |
 
@@ -154,7 +153,7 @@ Parameters:
 
 | Attribute      | Type           | Required | Description                                                                                                                  |
 |----------------|----------------|----------|------------------------------------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                           |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                           |
 | `issue_iid`    | integer        | yes      | The IID of an issue.                                                                                                         |
 | `body`         | string         | yes      | The content of a note. Limited to 1,000,000 characters.                                                                      |
 | `confidential` | boolean        | no       | **Deprecated:** Scheduled to be removed in GitLab 16.0 and renamed to `internal`. The confidential flag of a note. Default is false.                                                                           |
@@ -178,7 +177,7 @@ Parameters:
 
 | Attribute      | Type           | Required    | Description                                                                                        |
 |----------------|----------------|-------------|----------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                    |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                    |
 | `issue_iid`    | integer           | yes      | The IID of an issue.                                                                               |
 | `note_id`      | integer           | yes      | The ID of a note.                                                                                  |
 | `body`         | string            | no       | The content of a note. Limited to 1,000,000 characters.                                            |
@@ -201,7 +200,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid` | integer | yes | The IID of an issue |
 | `note_id` | integer | yes | The ID of a note |
 
@@ -225,7 +224,7 @@ GET /projects/:id/snippets/:snippet_id/notes?sort=asc&order_by=updated_at
 
 | Attribute           | Type             | Required   | Description                                                                                                                                         |
 | ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `snippet_id`        | integer          | yes        | The ID of a project snippet |
 | `sort`              | string           | no         | Return snippet notes sorted in `asc` or `desc` order. Default is `desc` |
 | `order_by`          | string           | no         | Return snippet notes ordered by `created_at` or `updated_at` fields. Default is `created_at` |
@@ -247,7 +246,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description                                                                     |
 |--------------|----------------|----------|---------------------------------------------------------------------------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `snippet_id` | integer        | yes      | The ID of a project snippet                                                     |
 | `note_id`    | integer        | yes      | The ID of a snippet note                                                        |
 
@@ -297,7 +296,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description                                                                                                                  |
 |--------------|----------------|----------|------------------------------------------------------------------------------------------------------------------------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                              |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                              |
 | `snippet_id` | integer        | yes      | The ID of a snippet                                                                                                          |
 | `body`       | string         | yes      | The content of a note. Limited to 1,000,000 characters.                                                                      |
 | `created_at` | string         | no       | Date time string, ISO 8601 formatted. Example: `2016-03-11T03:45:40Z` (requires administrator or project/group owner rights) |
@@ -319,7 +318,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description                                                                                                                  |
 |--------------|----------------|----------|------------------------------------------------------------------------------------------------------------------------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                              |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                              |
 | `snippet_id` | integer        | yes      | The ID of a snippet                                                                                                          |
 | `note_id`    | integer        | yes      | The ID of a snippet note                                                        |
 | `body`       | string         | yes      | The content of a note. Limited to 1,000,000 characters.                                                                      |
@@ -341,7 +340,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `snippet_id` | integer | yes | The ID of a snippet |
 | `note_id` | integer | yes | The ID of a note |
 
@@ -363,7 +362,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/notes?sort=asc&order_by=upda
 
 | Attribute           | Type             | Required   | Description                                                                                                                                         |
 | ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid` | integer          | yes        | The IID of a project merge request |
 | `sort`              | string           | no         | Return merge request notes sorted in `asc` or `desc` order. Default is `desc` |
 | `order_by`          | string           | no         | Return merge request notes ordered by `created_at` or `updated_at` fields. Default is `created_at` |
@@ -385,7 +384,7 @@ Parameters:
 
 | Attribute           | Type           | Required | Description                                                                     |
 |---------------------|----------------|----------|---------------------------------------------------------------------------------|
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid` | integer        | yes      | The IID of a project merge request                                              |
 | `note_id`           | integer        | yes      | The ID of a merge request note                                                        |
 
@@ -439,7 +438,7 @@ Parameters:
 | Attribute                     | Type              | Required | Description |
 |-------------------------------|-------------------|----------|-------------|
 | `body`                        | string            | yes      | The content of a note. Limited to 1,000,000 characters. |
-| `id`                          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid`           | integer           | yes      | The IID of a project merge request |
 | `created_at`                  | string            | no       | Date time string, ISO 8601 formatted. Example: `2016-03-11T03:45:40Z` (requires administrator or project/group owner rights) |
 | `internal`                    | boolean           | no       | The internal flag of a note. Default is false. |
@@ -462,7 +461,7 @@ Parameters:
 
 | Attribute           | Type              | Required | Description                                                                                        |
 |---------------------|-------------------|----------|----------------------------------------------------------------------------------------------------|
-| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                     |
+| `id`                | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                     |
 | `merge_request_iid` | integer           | yes      | The IID of a project merge request                                                                 |
 | `note_id`           | integer           | no       | The ID of a note                                                                                   |
 | `body`              | string            | yes      | The content of a note. Limited to 1,000,000 characters.                                            |
@@ -485,7 +484,7 @@ Parameters:
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid` | integer | yes | The IID of a merge request |
 | `note_id` | integer | yes | The ID of a note |
 
@@ -523,7 +522,7 @@ GET /groups/:id/epics/:epic_id/notes?sort=asc&order_by=updated_at
 
 | Attribute           | Type             | Required   | Description |
 | ------------------- | ---------------- | ---------- | ----------- |
-| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                | integer or string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `epic_id`           | integer          | yes        | The ID of a group epic |
 | `sort`              | string           | no         | Return epic notes sorted in `asc` or `desc` order. Default is `desc` |
 | `order_by`          | string           | no         | Return epic notes ordered by `created_at` or `updated_at` fields. Default is `created_at` |
@@ -545,7 +544,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `epic_id` | integer | yes  | The ID of an epic |
 | `note_id` | integer | yes  | The ID of a note |
 
@@ -597,7 +596,7 @@ Parameters:
 | ---------      | -------------- | -------- | ----------- |
 | `body`         | string  | yes  | The content of a note. Limited to 1,000,000 characters. |
 | `epic_id`      | integer | yes  | The ID of an epic |
-| `id`           | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`           | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `confidential` | boolean        | no       | **Deprecated:** Scheduled to be removed in GitLab 16.0 and is renamed to `internal`. The confidential flag of a note. Default is `false`. |
 | `internal`     | boolean        | no       | The internal flag of a note. Overrides `confidential` when both parameters are submitted. Default is `false`. |
 
@@ -618,7 +617,7 @@ Parameters:
 
 | Attribute      | Type              | Required | Description                                                                                        |
 | ---------------| ----------------- | -------- | ---------------------------------------------------------------------------------------------------|
-| `id`           | integer or string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths)                       |
+| `id`           | integer or string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths)                       |
 | `epic_id`      | integer           | yes      | The ID of an epic                                                                                  |
 | `note_id`      | integer           | yes      | The ID of a note                                                                                   |
 | `body`         | string            | yes      | The content of a note. Limited to 1,000,000 characters.                                            |
@@ -641,7 +640,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer or string | yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer or string | yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `epic_id` | integer | yes  | The ID of an epic |
 | `note_id` | integer | yes  | The ID of a note |
 
diff --git a/doc/api/notification_settings.md b/doc/api/notification_settings.md
index 5f2aaea79edb9a5bd7662c90eeb074c5accb2849..a28e1258862ededb36138ce38aa26944a13e2e3e 100644
--- a/doc/api/notification_settings.md
+++ b/doc/api/notification_settings.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Personal Productivity
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Notification settings API
 ---
 
-# Notification settings API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -125,7 +124,7 @@ curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/a
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID, or [URL-encoded path, of the group or project](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID, or [URL-encoded path, of the group or project](rest/_index.md#namespaced-paths). |
 
 Example response:
 
@@ -151,7 +150,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID, or [URL-encoded path, of the group or project](rest/index.md#namespaced-paths) |
+| `id` | integer or string | yes | The ID, or [URL-encoded path, of the group or project](rest/_index.md#namespaced-paths) |
 | `level` | string | no | The global notification level |
 | `new_note` | boolean | no | Enable/disable this notification |
 | `new_issue` | boolean | no | Enable/disable this notification |
diff --git a/doc/api/oauth2.md b/doc/api/oauth2.md
index aa74aa83c1c28b621db3eb28ebe317caa778e474..c2f38437bc11a2f37628a86d65a4a0824341dd8f 100644
--- a/doc/api/oauth2.md
+++ b/doc/api/oauth2.md
@@ -3,10 +3,9 @@ stage: Software Supply Chain Security
 group: Authentication
 description: Third-party authorization to GitLab.
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: OAuth 2.0 identity provider API
 ---
 
-# OAuth 2.0 identity provider API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/openapi/openapi_interactive.md b/doc/api/openapi/openapi_interactive.md
index f04ad41b0b6fc858024af06617b1c6a383ecb5ed..71d87f91da31f3b87f07d59a956adb396dd154e0 100644
--- a/doc/api/openapi/openapi_interactive.md
+++ b/doc/api/openapi/openapi_interactive.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Interactive API documentation
 ---
 
-# Interactive API documentation
-
 Introduces the interactive documentation tool for the GitLab API.
 
 ## About the OpenAPI specification
@@ -14,7 +13,7 @@ The [OpenAPI specification](https://swagger.io/specification/) (formerly called
 standard, language-agnostic interface to RESTful APIs. OpenAPI definition files are written in the
 YAML format, which is automatically rendered by the GitLab browser into a more human-readable interface.
 
-For general information about the GitLab APIs, see [API Docs](../index.md).
+For general information about the GitLab APIs, see [API Docs](../_index.md).
 
 ## Overview
 
diff --git a/doc/api/organizations.md b/doc/api/organizations.md
index 8cbac128197cde678a74987667b148e95d4a9fd7..a0118a83a1e2e2cbba5b8347b51ddd2cbfc74a10 100644
--- a/doc/api/organizations.md
+++ b/doc/api/organizations.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Organizations API
 ---
 
-# Organizations API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed
diff --git a/doc/api/packages.md b/doc/api/packages.md
index 4187c0367b2ee88f5c2380b6f7d470f21961cd30..2555af4d6d7e5bddef4e3577a82bfd748e2f5a7e 100644
--- a/doc/api/packages.md
+++ b/doc/api/packages.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Packages API
 ---
 
-# Packages API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -29,7 +28,7 @@ GET /projects/:id/packages
 
 | Attribute             | Type           | Required | Description |
 |:----------------------|:---------------|:---------|:------------|
-| `id`                  | integer/string | yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                  | integer/string | yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `order_by`            | string         | no       | The field to use as order. One of `created_at` (default), `name`, `version`, or `type`. |
 | `sort`                | string         | no       | The direction of the order, either `asc` (default) for ascending order or `desc` for descending order. |
 | `package_type`        | string         | no       | Filter the returned packages by type. One of `conan`, `maven`, `npm`, `pypi`, `composer`, `nuget`, `helm`, `terraform_module`, or `golang`. |
@@ -80,7 +79,7 @@ Example response:
 ]
 ```
 
-By default, the `GET` request returns 20 results, because the API is [paginated](rest/index.md#pagination).
+By default, the `GET` request returns 20 results, because the API is [paginated](rest/_index.md#pagination).
 
 Although you can filter packages by status, working with packages that have a `processing` status
 can result in malformed data or broken packages.
@@ -98,7 +97,7 @@ GET /groups/:id/packages
 
 | Attribute             | Type           | Required | Description |
 |:----------------------|:---------------|:---------|:------------|
-| `id`                  | integer/string | yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                  | integer/string | yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `exclude_subgroups`   | boolean        | no       | If the parameter is included as true, packages from projects from subgroups are not listed. Default is `false`. |
 | `order_by`            | string         | no       | The field to use as order. One of `created_at` (default), `name`, `version`, `type`, or `project_path`. |
 | `sort`                | string         | no       | The direction of the order, either `asc` (default) for ascending order or `desc` for descending order. |
@@ -175,7 +174,7 @@ Example response:
 ]
 ```
 
-By default, the `GET` request returns 20 results, because the API is [paginated](rest/index.md#pagination).
+By default, the `GET` request returns 20 results, because the API is [paginated](rest/_index.md#pagination).
 
 The `_links` object contains the following properties:
 
@@ -195,7 +194,7 @@ GET /projects/:id/packages/:package_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `package_id`      | integer | yes | ID of a package. |
 
 ```shell
@@ -275,7 +274,7 @@ GET /projects/:id/packages/:package_id/package_files
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `package_id`      | integer | yes | ID of a package. |
 
 ```shell
@@ -334,7 +333,7 @@ Example response:
 ]
 ```
 
-By default, the `GET` request returns 20 results, because the API is [paginated](rest/index.md#pagination).
+By default, the `GET` request returns 20 results, because the API is [paginated](rest/_index.md#pagination).
 
 ## List package pipelines
 
@@ -342,7 +341,7 @@ By default, the `GET` request returns 20 results, because the API is [paginated]
 
 Get a list of pipelines for a single package. The results are sorted by `id` in descending order.
 
-The results are [paginated](rest/index.md#keyset-based-pagination) and return up to 20 records per page.
+The results are [paginated](rest/_index.md#keyset-based-pagination) and return up to 20 records per page.
 
 ```plaintext
 GET /projects/:id/packages/:package_id/pipelines
@@ -350,7 +349,7 @@ GET /projects/:id/packages/:package_id/pipelines
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `package_id`      | integer | yes | ID of a package. |
 
 ```shell
@@ -414,7 +413,7 @@ DELETE /projects/:id/packages/:package_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `package_id`      | integer | yes | ID of a package. |
 
 ```shell
@@ -443,7 +442,7 @@ DELETE /projects/:id/packages/:package_id/package_files/:package_file_id
 
 | Attribute         | Type           | Required | Description |
 | ----------------- | -------------- | -------- | ----------- |
-| `id`              | integer/string | yes | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer/string | yes | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `package_id`      | integer        | yes | ID of a package. |
 | `package_file_id` | integer        | yes | ID of a package file. |
 
diff --git a/doc/api/packages/composer.md b/doc/api/packages/composer.md
index 6ea33c0336ce4704688554c77a6197bd25598673..aa685dea60955f70f25f6f0f80ae2a96a89d4f92 100644
--- a/doc/api/packages/composer.md
+++ b/doc/api/packages/composer.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Composer API
 ---
 
-# Composer API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/conan.md b/doc/api/packages/conan.md
index 8dc81ab9361aa88ffd2c4f54ae496e181ef9699b..65b03158050402c9ec9857c1e42da7bfd072c631 100644
--- a/doc/api/packages/conan.md
+++ b/doc/api/packages/conan.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Conan API
 ---
 
-# Conan API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/debian.md b/doc/api/packages/debian.md
index cedc140c57e78d0bd30ecabb9bcf8503067a879f..8706415796e507400647365b4a23671a52b7c377 100644
--- a/doc/api/packages/debian.md
+++ b/doc/api/packages/debian.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Debian API
 ---
 
-# Debian API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/packages/debian_group_distributions.md b/doc/api/packages/debian_group_distributions.md
index d8b0b3b22596279fc08a1df3ab86c2271a071a00..8d66a19e4c44227625c008363014efb39337b544 100644
--- a/doc/api/packages/debian_group_distributions.md
+++ b/doc/api/packages/debian_group_distributions.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Debian group distributions API
 ---
 
-# Debian group distributions API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
@@ -43,7 +42,7 @@ GET /groups/:id/-/debian_distributions
 
 | Attribute  | Type            | Required | Description |
 | ---------- | --------------- | -------- | ----------- |
-| `id`       | integer/string  | yes      | The ID or [URL-encoded path of the group](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string  | yes      | The ID or [URL-encoded path of the group](../rest/_index.md#namespaced-paths). |
 | `codename` | string          | no       | Filter with specific `codename`. |
 | `suite`    | string          | no       | Filter with specific `suite`. |
 
@@ -85,7 +84,7 @@ GET /groups/:id/-/debian_distributions/:codename
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | yes      | The `codename` of a distribution. |
 
 ```shell
@@ -124,7 +123,7 @@ GET /groups/:id/-/debian_distributions/:codename/key.asc
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | yes      | The `codename` of a distribution. |
 
 ```shell
@@ -161,7 +160,7 @@ POST /groups/:id/-/debian_distributions
 
 | Attribute                     | Type           | Required | Description |
 | ----------------------------- | -------------- | -------- | ----------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/_index.md#namespaced-paths). |
 | `codename`                    | string         | yes      | The codename of a Debian distribution. |
 | `suite`                       | string         | no       | The suite of the new Debian distribution. |
 | `origin`                      | string         | no       | The origin of the new Debian distribution. |
@@ -208,7 +207,7 @@ PUT /groups/:id/-/debian_distributions/:codename
 
 | Attribute                     | Type           | Required | Description |
 | ----------------------------- | -------------- | -------- | ----------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/_index.md#namespaced-paths). |
 | `codename`                    | string         | yes      | The Debian distribution's new codename.  |
 | `suite`                       | string         | no       | The Debian distribution's new suite. |
 | `origin`                      | string         | no       | The Debian distribution's new origin. |
@@ -255,7 +254,7 @@ DELETE /groups/:id/-/debian_distributions/:codename
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the group](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | yes      | The codename of the Debian distribution. |
 
 ```shell
diff --git a/doc/api/packages/debian_project_distributions.md b/doc/api/packages/debian_project_distributions.md
index 239c9d2165b1188862492ed7c5d0212f735a69e6..aebf330aa96789f529b075754f07b03fa52da1b4 100644
--- a/doc/api/packages/debian_project_distributions.md
+++ b/doc/api/packages/debian_project_distributions.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Debian project distributions API
 ---
 
-# Debian project distributions API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
@@ -42,7 +41,7 @@ GET /projects/:id/debian_distributions
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | no       | Filter with a specific `codename`. |
 | `suite`    | string         | no       | Filter with a specific `suite`. |
 
@@ -84,7 +83,7 @@ GET /projects/:id/debian_distributions/:codename
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | yes      | The `codename` of a distribution. |
 
 ```shell
@@ -123,7 +122,7 @@ GET /projects/:id/debian_distributions/:codename/key.asc
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | yes      | The `codename` of a distribution. |
 
 ```shell
@@ -160,7 +159,7 @@ POST /projects/:id/debian_distributions
 
 | Attribute                     | Type           | Required | Description |
 | ----------------------------- | -------------- | -------- | ----------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `codename`                    | string         | yes      | The Debian distribution's codename.  |
 | `suite`                       | string         | no       | The new Debian distribution's suite. |
 | `origin`                      | string         | no       | The new Debian distribution's origin. |
@@ -207,7 +206,7 @@ PUT /projects/:id/debian_distributions/:codename
 
 | Attribute                     | Type           | Required | Description |
 | ----------------------------- | -------------- | -------- | ----------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `codename`                    | string         | yes      | The Debian distribution's codename. |
 | `suite`                       | string         | no       | The Debian distribution's new suite. |
 | `origin`                      | string         | no       | The Debian distribution's new origin. |
@@ -254,7 +253,7 @@ DELETE /projects/:id/debian_distributions/:codename
 
 | Attribute  | Type           | Required | Description |
 | ---------- | -------------- | -------- | ----------- |
-| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `codename` | string         | yes      | The Debian distribution's codename. |
 
 ```shell
diff --git a/doc/api/packages/go_proxy.md b/doc/api/packages/go_proxy.md
index 1c4da81bdbd432ebca5bc24142e44079d14d64bd..52c03e15051c645835b52b4488279286a9a67fae 100644
--- a/doc/api/packages/go_proxy.md
+++ b/doc/api/packages/go_proxy.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Go Proxy API
 ---
 
-# Go Proxy API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/helm.md b/doc/api/packages/helm.md
index f46c347d0ca6624437082897fc88dfeb7108d089..20deb1febe2796e41f76d603a3b17a46ac60be73 100644
--- a/doc/api/packages/helm.md
+++ b/doc/api/packages/helm.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Helm API
 ---
 
-# Helm API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/maven.md b/doc/api/packages/maven.md
index b11134faf0e85fea656b1ae1e84aec60134c1950..4aa70cbeb3c1e103e20d1d8b2f9eeb299a190a02 100644
--- a/doc/api/packages/maven.md
+++ b/doc/api/packages/maven.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Maven API
 ---
 
-# Maven API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/npm.md b/doc/api/packages/npm.md
index 29f46f8af474915c6cad9b2373f1799ef6f98c2e..8b8c90cc2a2d86d651707c159c5ecdd0f840a139 100644
--- a/doc/api/packages/npm.md
+++ b/doc/api/packages/npm.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: npm API
 ---
 
-# npm API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/nuget.md b/doc/api/packages/nuget.md
index 58b0f44353ac777ba868bbb3a4da0e12cddcd2b7..479658d541388066729fe1c7f6cb95add9a096c4 100644
--- a/doc/api/packages/nuget.md
+++ b/doc/api/packages/nuget.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: NuGet API
 ---
 
-# NuGet API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/pypi.md b/doc/api/packages/pypi.md
index 3155eeac1d4ebb3870e7ec314735ac1d27e6af29..6b6a140ed600298e40f7a23303134cdcae201928 100644
--- a/doc/api/packages/pypi.md
+++ b/doc/api/packages/pypi.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: PyPI API
 ---
 
-# PyPI API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/rubygems.md b/doc/api/packages/rubygems.md
index 51db05b04e37268ae308f918a8d9cf0903f231c6..7d31b87d0b17690041ebaad58917cf84ad0ed9ef 100644
--- a/doc/api/packages/rubygems.md
+++ b/doc/api/packages/rubygems.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Ruby gems API
 ---
 
-# Ruby gems API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/packages/terraform-modules.md b/doc/api/packages/terraform-modules.md
index 748e2a7631c3d201d2a83e1cb68aa8a60035c65c..1e462b1877acd4e827f70b10110993d53b3e4bdb 100644
--- a/doc/api/packages/terraform-modules.md
+++ b/doc/api/packages/terraform-modules.md
@@ -2,10 +2,9 @@
 stage: Package
 group: Package Registry
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Terraform Module Registry API
 ---
 
-# Terraform Module Registry API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/pages.md b/doc/api/pages.md
index c970f89b7e7f8af0980483ed06d1418c9d1f10e8..7dbdabade203dbdf9b5b6921ef740face4e52e3d 100644
--- a/doc/api/pages.md
+++ b/doc/api/pages.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Knowledge
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Pages API
 ---
 
-# Pages API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ DELETE /projects/:id/pages
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --request 'DELETE' --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/2/pages"
@@ -52,7 +51,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following
 response attributes:
@@ -121,7 +120,7 @@ Supported attributes:
 
 | Attribute                       | Type           | Required | Description                                                                                                         |
 | --------------------------------| -------------- | -------- | --------------------------------------------------------------------------------------------------------------------|
-| `id`                            | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                 |
+| `id`                            | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                 |
 | `pages_unique_domain_enabled`   | boolean        | No       | Whether to use unique domain                                                                                        |
 | `pages_https_only`              | boolean        | No       | Whether to force HTTPs                                                                                              |
 | `pages_primary_domain`          | string         | No       | Set the primary domain from the existing assigned domains to redirect all Pages requests to. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/481334) in GitLab 17.8. |
diff --git a/doc/api/pages_domains.md b/doc/api/pages_domains.md
index dd1831c0a22a60b805e18b558fa1f0fd1b20763c..82533648b875e456676b90bc04d253fd160dee5e 100644
--- a/doc/api/pages_domains.md
+++ b/doc/api/pages_domains.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Knowledge
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Pages domains API
 ---
 
-# Pages domains API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed
@@ -80,7 +79,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following
 response attributes:
@@ -146,7 +145,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `domain`  | string         | yes      | The custom domain indicated by the user  |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following
@@ -203,7 +202,7 @@ Supported attributes:
 
 | Attribute          | Type           | Required | Description                              |
 | -------------------| -------------- | -------- | ---------------------------------------- |
-| `id`               | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`               | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `domain`           | string         | yes      | The custom domain indicated by the user  |
 | `auto_ssl_enabled` | boolean        | no       | Enables [automatic generation](../user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md) of SSL certificates issued by Let's Encrypt for custom domains. |
 | `certificate`      | file/string    | no       | The certificate in PEM format with intermediates following in most specific to least specific order.|
@@ -279,7 +278,7 @@ Supported attributes:
 
 | Attribute          | Type           | Required | Description                              |
 | ------------------ | -------------- | -------- | ---------------------------------------- |
-| `id`               | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`               | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `domain`           | string         | yes      | The custom domain indicated by the user  |
 | `auto_ssl_enabled` | boolean        | no       | Enables [automatic generation](../user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md) of SSL certificates issued by Let's Encrypt for custom domains. |
 | `certificate`      | file/string    | no       | The certificate in PEM format with intermediates following in most specific to least specific order.|
@@ -437,7 +436,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `domain`  | string         | yes      | The custom domain indicated by the user  |
 
 If successful, a `204 No Content` HTTP response with an empty body is expected.
diff --git a/doc/api/personal_access_tokens.md b/doc/api/personal_access_tokens.md
index fc21e61a7b3434ab47328af0665f71bfd2787162..dcbf9b965cd519f8c67d1c7dea4a45424e8843a3 100644
--- a/doc/api/personal_access_tokens.md
+++ b/doc/api/personal_access_tokens.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Personal access tokens API
 ---
 
-# Personal access tokens API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/pipeline_schedules.md b/doc/api/pipeline_schedules.md
index 3fe1c610f8a6c203dece8675da59d976996b4b68..84c97aadbaca58bb9edab738822632efe0e45b44 100644
--- a/doc/api/pipeline_schedules.md
+++ b/doc/api/pipeline_schedules.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Execution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Pipeline schedules API
 ---
 
-# Pipeline schedules API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -22,7 +21,7 @@ GET /projects/:id/pipeline_schedules
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `scope`   | string         | No       | The scope of pipeline schedules, must be one of: `active`, `inactive` |
 
 ```shell
@@ -63,7 +62,7 @@ GET /projects/:id/pipeline_schedules/:pipeline_schedule_id
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 
 ```shell
@@ -120,7 +119,7 @@ Supported attributes:
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID. |
 
 Example request:
@@ -172,7 +171,7 @@ POST /projects/:id/pipeline_schedules
 |-----------------|----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | `cron`          | string         | Yes      | The [cron](https://en.wikipedia.org/wiki/Cron) schedule, for example: `0 1 * * *`.                                                                                                                                                                                                    |
 | `description`   | string         | Yes      | The description of the pipeline schedule.                                                                                                                                                                                                                                             |
-| `id`            | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                                                                                                                                                                                  |
+| `id`            | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                                                                                                                                                                                  |
 | `ref`           | string         | Yes      | The branch or tag name that is triggered. Both the short (e.g. `main`) and full (e.g. `refs/heads/main` or `refs/tags/main`) ref versions are accepted. If a short version is provided, it is automatically expanded to the full ref version but, if the ref is [ambiguous](../ci/pipelines/schedules.md#ambiguous-refs), it will be rejected |
 | `active`        | boolean        | No       | The activation of pipeline schedule. If false is set, the pipeline schedule is initially deactivated (default: `true`).                                                                                                                                                               |
 | `cron_timezone` | string         | No       | The time zone supported by `ActiveSupport::TimeZone`, for example: `Pacific Time (US & Canada)` (default: `UTC`).                                                                                                                                                                     |
@@ -216,7 +215,7 @@ PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id
 
 | Attribute              | Type           | Required | Description                                                                                                                                                                                                                                                                                                                                   |
 |------------------------|----------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                                                                                                                                                                                                                                          |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                                                                                                                                                                                                                                          |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID.                                                                                                                                                                                                                                                                                                                     |
 | `active`               | boolean        | No       | The activation of pipeline schedule. If false is set, the pipeline schedule is initially deactivated.                                                                                                                                                                                                                                         |
 | `cron_timezone`        | string         | No       | The time zone supported by `ActiveSupport::TimeZone` (for example `Pacific Time (US & Canada)`), or `TZInfo::Timezone` (for example `America/Los_Angeles`).                                                                                                                                                                                   |
@@ -267,7 +266,7 @@ POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/take_ownership
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 
 ```shell
@@ -312,7 +311,7 @@ DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 
 ```shell
@@ -358,7 +357,7 @@ POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/play
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 
 Example request:
@@ -387,7 +386,7 @@ POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`                  | string         | Yes      | The `key` of a variable; must have no more than 255 characters; only `A-Z`, `a-z`, `0-9`, and `_` are allowed |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 | `value`                | string         | Yes      | The `value` of a variable |
@@ -416,7 +415,7 @@ PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`                  | string         | Yes      | The `key` of a variable |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 | `value`                | string         | Yes      | The `value` of a variable |
@@ -446,7 +445,7 @@ DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key
 
 | Attribute              | Type           | Required | Description |
 |------------------------|----------------|----------|-------------|
-| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                   | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`                  | string         | Yes      | The `key` of a variable |
 | `pipeline_schedule_id` | integer        | Yes      | The pipeline schedule ID |
 
diff --git a/doc/api/pipeline_triggers.md b/doc/api/pipeline_triggers.md
index 6a2751913a4b0914e1ae3132edfc4d3c69d8e5c3..587fa6a626ab4aea570c477f6976280eb1adb5ac 100644
--- a/doc/api/pipeline_triggers.md
+++ b/doc/api/pipeline_triggers.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Execution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Pipeline trigger tokens API
 ---
 
-# Pipeline trigger tokens API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -22,7 +21,7 @@ GET /projects/:id/triggers
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/triggers"
@@ -55,7 +54,7 @@ GET /projects/:id/triggers/:trigger_id
 
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
-| `id`         | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `trigger_id` | integer        | Yes      | The trigger ID |
 
 ```shell
@@ -85,7 +84,7 @@ POST /projects/:id/triggers
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
 | `description` | string         | Yes      | The trigger name |
-| `id`          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -114,7 +113,7 @@ PUT /projects/:id/triggers/:trigger_id
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `trigger_id`  | integer        | Yes      | The trigger ID |
 | `description` | string         | No       | The trigger name |
 
@@ -145,7 +144,7 @@ DELETE /projects/:id/triggers/:trigger_id
 
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
-| `id`         | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `trigger_id` | integer        | Yes      | The trigger ID |
 
 ```shell
@@ -171,7 +170,7 @@ Supported attributes:
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `ref`       | string         | Yes      | The branch or tag to run the pipeline on. |
 | `token`     | string         | Yes      | The trigger token or CI/CD job token. |
 | `variables` | hash           | No       | A map of key-valued strings containing the pipeline variables. For example: `{ VAR1: "value1", VAR2: "value2" }`. |
diff --git a/doc/api/pipelines.md b/doc/api/pipelines.md
index efa396ff35a39f2e82ad19f8ccf9164a98fc4914..ef5877c29abd4367f38fd2f24bb65b7a80fee2fa 100644
--- a/doc/api/pipelines.md
+++ b/doc/api/pipelines.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Execution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Pipelines API
 ---
 
-# Pipelines API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -15,7 +14,7 @@ DETAILS:
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ## List project pipelines
 
@@ -37,7 +36,7 @@ GET /projects/:id/pipelines
 
 | Attribute        | Type           | Required | Description |
 |------------------|----------------|----------|-------------|
-| `id`             | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`             | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name`           | string         | No       | Return pipelines with the specified name. |
 | `order_by`       | string         | No       | Order pipelines by `id`, `status`, `ref`, `updated_at` or `user_id` (default: `id`) |
 | `ref`            | string         | No       | The ref of pipelines |
@@ -104,7 +103,7 @@ GET /projects/:id/pipelines/:pipeline_id
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 ```shell
@@ -233,7 +232,7 @@ GET /projects/:id/pipelines/:pipeline_id/variables
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 ```shell
@@ -267,7 +266,7 @@ GET /projects/:id/pipelines/:pipeline_id/test_report
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 Sample request:
@@ -321,7 +320,7 @@ GET /projects/:id/pipelines/:pipeline_id/test_report_summary
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 Sample request:
@@ -371,9 +370,9 @@ POST /projects/:id/pipeline
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `ref`       | string         | Yes      | The branch or tag to run the pipeline on. For merge request pipelines use the [merge requests endpoint](merge_requests.md#create-merge-request-pipeline). |
-| `variables` | array          | No       | An [array of hashes](rest/index.md#array-of-hashes) containing the variables available in the pipeline, matching the structure `[{ 'key': 'UPLOAD_TO_S3', 'variable_type': 'file', 'value': 'true' }, {'key': 'TEST', 'value': 'test variable'}]`. If `variable_type` is excluded, it defaults to `env_var`. |
+| `variables` | array          | No       | An [array of hashes](rest/_index.md#array-of-hashes) containing the variables available in the pipeline, matching the structure `[{ 'key': 'UPLOAD_TO_S3', 'variable_type': 'file', 'value': 'true' }, {'key': 'TEST', 'value': 'test variable'}]`. If `variable_type` is excluded, it defaults to `env_var`. |
 
 ```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/pipeline?ref=main"
@@ -424,7 +423,7 @@ POST /projects/:id/pipelines/:pipeline_id/retry
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 ```shell
@@ -476,7 +475,7 @@ For more information, see [issue 414963](https://gitlab.com/gitlab-org/gitlab/-/
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 ```shell
@@ -533,7 +532,7 @@ DELETE /projects/:id/pipelines/:pipeline_id
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
 ```shell
@@ -550,7 +549,7 @@ PUT /projects/:id/pipelines/:pipeline_id/metadata
 
 | Attribute     | Type           | Required | Description |
 |---------------|----------------|----------|-------------|
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name`        | string         | Yes      | The new name of the pipeline |
 | `pipeline_id` | integer        | Yes      | The ID of a pipeline |
 
diff --git a/doc/api/plan_limits.md b/doc/api/plan_limits.md
index 36c33c082819f2112009451904c8f7e589923973..ec5204e1e49a199923b71b879479ba53a060dc2e 100644
--- a/doc/api/plan_limits.md
+++ b/doc/api/plan_limits.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Plan limits API
 ---
 
-# Plan limits API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/product_analytics.md b/doc/api/product_analytics.md
index d2cb3e56618bbabe094db0f01b747f91a541c36d..54499cdecca58d5b16bbc0ed7169ebc345f2464c 100644
--- a/doc/api/product_analytics.md
+++ b/doc/api/product_analytics.md
@@ -2,10 +2,9 @@
 stage: Monitor
 group: Platform Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Product analytics API
 ---
 
-# Product analytics API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed
diff --git a/doc/api/project_access_tokens.md b/doc/api/project_access_tokens.md
index dfc8890586acac384b1cd79b903e361276e79c92..0915a77655927ef4b530ff9511df26d7ec33c245 100644
--- a/doc/api/project_access_tokens.md
+++ b/doc/api/project_access_tokens.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project access tokens API
 ---
 
-# Project access tokens API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ GET projects/:id/access_tokens?state=inactive
 
 | Attribute | Type              | required | Description |
 | --------- | ----------------- | -------- | ----------- |
-| `id`      | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a project. |
+| `id`      | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a project. |
 | `state`   | string            | No       | If defined, only returns tokens with the specified state. Possible values: `active` and `inactive`. |
 
 ```shell
@@ -79,7 +78,7 @@ GET projects/:id/access_tokens/:token_id
 
 | Attribute  | Type              | required | Description |
 | ---------- | ----------------- | -------- | ----------- |
-| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a project. |
+| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a project. |
 | `token_id` | integer or string | yes      | ID of a project access token or the keyword `self`. |
 
 ```shell
@@ -117,7 +116,7 @@ POST projects/:id/access_tokens
 
 | Attribute      | Type              | required | Description |
 | -------------- | ----------------- | -------- | ----------- |
-| `id`           | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a project. |
+| `id`           | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a project. |
 | `name`         | string            | yes      | Name of the token. |
 | `scopes`       | `Array[String]`   | yes      | List of [scopes](../user/project/settings/project_access_tokens.md#scopes-for-a-project-access-token) available to the token. |
 | `access_level` | integer           | no       | [Access level](../development/permissions/predefined_roles.md#members) for the token. Possible values: `10` (Guest), `15` (Planner), `20` (Reporter), `30` (Developer), `40` (Maintainer), and `50` (Owner). Default value: `40`. |
@@ -168,7 +167,7 @@ POST /projects/:id/access_tokens/:token_id/rotate
 
 | Attribute    | Type              | required | Description |
 | ------------ | ----------------- | -------- | ----------- |
-| `id`         | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a project. |
+| `id`         | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a project. |
 | `token_id`   | integer or string | yes      | ID of a project access token or the keyword `self`. |
 | `expires_at` | date              | no       | Expiration date of the access token in ISO format (`YYYY-MM-DD`). The date must be one year or less from the rotation date. If undefined, the token expires after one week. |
 
@@ -237,7 +236,7 @@ DELETE projects/:id/access_tokens/:token_id
 
 | Attribute  | Type              | required | Description |
 | ---------- | ----------------- | -------- | ----------- |
-| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of a project. |
+| `id`       | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of a project. |
 | `token_id` | integer           | yes      | ID of a project access token. |
 
 ```shell
diff --git a/doc/api/project_aliases.md b/doc/api/project_aliases.md
index 3a7c9933142897cec196a66067a46c9c30fc42d7..79d35597e49049e719418dba73f297c723945c48 100644
--- a/doc/api/project_aliases.md
+++ b/doc/api/project_aliases.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project Aliases API
 ---
 
-# Project Aliases API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/project_badges.md b/doc/api/project_badges.md
index c35aa68f616ba8c0a8aeb7592dd18f013d937393..4626e720bd666464eed71aaa806f8de05fb3e89f 100644
--- a/doc/api/project_badges.md
+++ b/doc/api/project_badges.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project badges API
 ---
 
-# Project badges API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -40,7 +39,7 @@ GET /projects/:id/badges
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name`    | string         | no  | Name of the badges to return (case-sensitive). |
 
 ```shell
@@ -82,7 +81,7 @@ GET /projects/:id/badges/:badge_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `badge_id` | integer | yes   | The badge ID |
 
 ```shell
@@ -113,7 +112,7 @@ POST /projects/:id/badges
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `link_url` | string         | yes | URL of the badge link |
 | `image_url` | string | yes | URL of the badge image |
 | `name` | string | no | Name of the badge |
@@ -148,7 +147,7 @@ PUT /projects/:id/badges/:badge_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `badge_id` | integer | yes   | The badge ID |
 | `link_url` | string         | no | URL of the badge link |
 | `image_url` | string | no | URL of the badge image |
@@ -182,7 +181,7 @@ DELETE /projects/:id/badges/:badge_id
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `badge_id` | integer | yes   | The badge ID |
 
 ```shell
@@ -199,7 +198,7 @@ GET /projects/:id/badges/render
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `link_url` | string         | yes | URL of the badge link|
 | `image_url` | string | yes | URL of the badge image |
 
diff --git a/doc/api/project_clusters.md b/doc/api/project_clusters.md
index ac9fd4d2c1eff3aa0c361d57b8fa15dd7a8c66b1..9ef652fa6ed9446e498de448d072193a95f373b5 100644
--- a/doc/api/project_clusters.md
+++ b/doc/api/project_clusters.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project clusters API (certificate-based) (deprecated)
 ---
 
-# Project clusters API (certificate-based) (deprecated)
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ Parameters:
 
 | Attribute | Type    | Required | Description                                           |
 | --------- | ------- | -------- | ----------------------------------------------------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 Example request:
 
@@ -97,7 +96,7 @@ Parameters:
 
 | Attribute    | Type    | Required | Description                                           |
 | ------------ | ------- | -------- | ----------------------------------------------------- |
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `cluster_id` | integer | yes      | The ID of the cluster                                 |
 
 Example request:
@@ -191,7 +190,7 @@ Parameters:
 
 | Attribute                                            | Type    | Required | Description                                                                                           |
 | ---------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------- |
-| `id`                                                 | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                                 |
+| `id`                                                 | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                                 |
 | `name`                                               | string  | yes      | The name of the cluster                                                                               |
 | `domain`                                             | string  | no       | The [base domain](../user/project/clusters/gitlab_managed_clusters.md#base-domain) of the cluster                       |
 | `management_project_id`                              | integer | no       | The ID of the [management project](../user/clusters/management_project.md) for the cluster            |
@@ -288,7 +287,7 @@ Parameters:
 
 | Attribute                                   | Type    | Required | Description                                                                                |
 | ------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------ |
-| `id`                                        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                      |
+| `id`                                        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                      |
 | `cluster_id`                                | integer | yes      | The ID of the cluster                                                                      |
 | `name`                                      | string  | no       | The name of the cluster                                                                    |
 | `domain`                                    | string  | no       | The [base domain](../user/project/clusters/gitlab_managed_clusters.md#base-domain) of the cluster            |
@@ -399,7 +398,7 @@ Parameters:
 
 | Attribute    | Type    | Required | Description                                           |
 | ------------ | ------- | -------- | ----------------------------------------------------- |
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `cluster_id` | integer | yes      | The ID of the cluster                                 |
 
 Example request:
diff --git a/doc/api/project_forks.md b/doc/api/project_forks.md
index f7d7c37cd57da53562ec111700bfc3f4cef9a38c..65d44d30ba31200a2ca6a303b6c94a239a25fb2f 100644
--- a/doc/api/project_forks.md
+++ b/doc/api/project_forks.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project forks API
 ---
 
-# Project forks API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -30,7 +29,7 @@ POST /projects/:id/fork
 
 | Attribute                | Type              | Required | Description |
 |:-------------------------|:------------------|:---------|:------------|
-| `id`                     | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                     | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `branches`               | string            | No       | Branches to fork (empty for all branches). |
 | `description`            | string            | No       | The description assigned to the resultant project after forking. |
 | `mr_default_target_self` | boolean           | No       | For forked projects, target merge requests to this project. If `false`, the target is the upstream project. |
@@ -53,7 +52,7 @@ Supported attributes:
 
 | Attribute                     | Type              | Required | Description |
 |:------------------------------|:------------------|:---------|:------------|
-| `id`                          | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `archived`                    | boolean           | No       | Limit by archived status. |
 | `membership`                  | boolean           | No       | Limit by projects that the current user is a member of. |
 | `min_access_level`            | integer           | No       | Limit by current user minimal [role (`access_level`)](members.md#roles). |
@@ -179,7 +178,7 @@ Supported attributes:
 | Attribute        | Type              | Required | Description |
 |:-----------------|:------------------|:---------|:------------|
 | `forked_from_id` | ID                | Yes      | The ID of the project that was forked from. |
-| `id`             | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ## Delete a fork relationship between projects
 
@@ -197,4 +196,4 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
diff --git a/doc/api/project_import_export.md b/doc/api/project_import_export.md
index 5db32423f5c93fe5a3e80524ba9afeb57e41cd90..73e6f39383baf6e12728dd092c1ff4f1dd93a831 100644
--- a/doc/api/project_import_export.md
+++ b/doc/api/project_import_export.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project import and export API
 ---
 
-# Project import and export API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -59,7 +58,7 @@ POST /projects/:id/export
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`                  | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                  | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `upload[url]`         | string | yes      | The URL to upload the project. |
 | `description`         | string | no | Overrides the project description. |
 | `upload`              | hash | no | Hash that contains the information to upload the exported project to a web server. |
@@ -88,7 +87,7 @@ GET /projects/:id/export
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -137,7 +136,7 @@ GET /projects/:id/export/download
 
 | Attribute | Type              | Required | Description                              |
 | --------- | ----------------- | -------- | ---------------------------------------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" --remote-header-name \
@@ -328,7 +327,7 @@ GET /projects/:id/relation-imports
 
 | Attribute | Type               | Required | Description                                                                          |
 | --------- |--------------------| -------- |--------------------------------------------------------------------------------------|
-| `id`      | integer or string  | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string  | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -439,7 +438,7 @@ GET /projects/:id/import
 
 | Attribute | Type           | Required | Description                              |
 | --------- | -------------- | -------- | ---------------------------------------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
diff --git a/doc/api/project_job_token_scopes.md b/doc/api/project_job_token_scopes.md
index f9c7bbb98a500eebbc2e6d0e635edfe9d316c9a1..5e9cd6a49597902e1280304246e66db60cc9d1ad 100644
--- a/doc/api/project_job_token_scopes.md
+++ b/doc/api/project_job_token_scopes.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Pipeline Security
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project CI/CD job token scope API
 ---
 
-# Project CI/CD job token scope API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following response attributes:
 
@@ -66,7 +65,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `enabled` | boolean        | Yes      | Indicates if the [**Limit access _to_ this project** setting](../ci/jobs/ci_job_token.md#add-a-group-or-project-to-the-job-token-allowlist) should be enabled. |
 
 If successful, returns [`204`](rest/troubleshooting.md#status-codes) and no response body.
@@ -93,9 +92,9 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
-This endpoint supports [offset-based pagination](rest/index.md#offset-based-pagination).
+This endpoint supports [offset-based pagination](rest/_index.md#offset-based-pagination).
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and a list of project with limited fields for each project.
 
@@ -160,7 +159,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `target_project_id` | integer        | Yes      | The ID of the project added to the CI/CD job token inbound allowlist. |
 
 If successful, returns [`201`](rest/troubleshooting.md#status-codes) and the following response attributes:
@@ -201,7 +200,7 @@ Supported attributes:
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `target_project_id` | integer        | Yes      | The ID of the project that is removed from the CI/CD job token inbound allowlist. |
 
 If successful, returns [`204`](rest/troubleshooting.md#status-codes) and no response body.
@@ -227,9 +226,9 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
-This endpoint supports [offset-based pagination](rest/index.md#offset-based-pagination).
+This endpoint supports [offset-based pagination](rest/_index.md#offset-based-pagination).
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and a list of groups with limited fields for each project.
 
@@ -266,7 +265,7 @@ Supported attributes:
 
 | Attribute         | Type           | Required | Description |
 |-------------------|----------------|----------|-------------|
-| `id`              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `target_group_id` | integer        | Yes      | The ID of the group added to the CI/CD job token groups allowlist. |
 
 If successful, returns [`201`](rest/troubleshooting.md#status-codes) and the following response attributes:
@@ -307,7 +306,7 @@ Supported attributes:
 
 | Attribute         | Type           | Required | Description |
 |-------------------|----------------|----------|-------------|
-| `id`              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `target_group_id` | integer        | Yes      | The ID of the group that is removed from the CI/CD job token groups allowlist. |
 
 If successful, returns [`204`](rest/troubleshooting.md#status-codes) and no response body.
diff --git a/doc/api/project_level_variables.md b/doc/api/project_level_variables.md
index 453b69b7db886452009ca3622d2d98bb98c4b666..1bf28567111ff72a3fb5626cb683050e79263ccf 100644
--- a/doc/api/project_level_variables.md
+++ b/doc/api/project_level_variables.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Authoring
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project-level CI/CD variables API
 ---
 
-# Project-level CI/CD variables API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -20,7 +19,7 @@ GET /projects/:id/variables
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 Example request:
 
@@ -68,7 +67,7 @@ GET /projects/:id/variables/:key
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`     | string         | Yes      | The `key` of a variable |
 | `filter`  | hash           | No       | Available filters: `[environment_scope]`. See the [`filter` parameter details](#the-filter-parameter). |
 
@@ -108,7 +107,7 @@ POST /projects/:id/variables
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`               | string         | Yes      | The `key` of a variable; must have no more than 255 characters; only `A-Z`, `a-z`, `0-9`, and `_` are allowed |
 | `value`             | string         | Yes      | The `value` of a variable |
 | `description`       | string         | No       | The description of the variable. Default: `null`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/409641) in GitLab 16.2. |
@@ -153,7 +152,7 @@ PUT /projects/:id/variables/:key
 
 | Attribute           | Type           | Required | Description |
 |---------------------|----------------|----------|-------------|
-| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`               | string         | Yes      | The `key` of a variable |
 | `value`             | string         | Yes      | The `value` of a variable |
 | `description`       | string         | No       | The description of the variable. Default: `null`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/409641) in GitLab 16.2. |
@@ -198,7 +197,7 @@ DELETE /projects/:id/variables/:key
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`     | string         | Yes      | The `key` of a variable |
 | `filter`  | hash           | No       | Available filters: `[environment_scope]`. See the [`filter` parameter details](#the-filter-parameter). |
 
diff --git a/doc/api/project_markdown_uploads.md b/doc/api/project_markdown_uploads.md
index a111cb13011422e312b29806535d824c16985a79..dc9d0d43979e3a64bebc4424d162acdb3d1f2d5a 100644
--- a/doc/api/project_markdown_uploads.md
+++ b/doc/api/project_markdown_uploads.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Markdown uploads API
 ---
 
-# Markdown uploads API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -30,7 +29,7 @@ Supported attributes:
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
 | `file`    | string            | Yes      | File to be uploaded. |
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 To upload a file from your file system, use the `--form` argument. This causes cURL to post data using the
 `Content-Type: multipart/form-data` header. The `file=` parameter must point to a file on your file system and be
@@ -78,7 +77,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -129,7 +128,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |:------------|:------------------|:---------|:------------|
-| `id`        | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `upload_id` | integer           | Yes      | ID of the upload. |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the uploaded file in the response body.
@@ -158,7 +157,7 @@ Supported attributes:
 
 | Attribute  | Type              | Required | Description |
 |:-----------|:------------------|:---------|:------------|
-| `id`       | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `secret`   | string            | Yes      | 32-character secret of the upload. |
 | `filename` | string            | Yes      | Filename of the upload. |
 
@@ -188,7 +187,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |:------------|:------------------|:---------|:------------|
-| `id`        | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `upload_id` | integer           | Yes      | ID of the upload. |
 
 If successful, returns [`204`](rest/troubleshooting.md#status-codes) status code without any response body.
@@ -217,7 +216,7 @@ Supported attributes:
 
 | Attribute  | Type              | Required | Description |
 |:-----------|:------------------|:---------|:------------|
-| `id`       | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `secret`   | string            | Yes      | 32-character secret of the upload. |
 | `filename` | string            | Yes      | Filename of the upload. |
 
diff --git a/doc/api/project_packages_protection_rules.md b/doc/api/project_packages_protection_rules.md
index 9b0f3a7469ea490e1a31323416078ffb316432aa..275caeb94b297d4f73fdf17a162b0e800ad482ae 100644
--- a/doc/api/project_packages_protection_rules.md
+++ b/doc/api/project_packages_protection_rules.md
@@ -3,10 +3,9 @@ stage: Package
 group: Package Registry
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for Package Protection Rules in GitLab."
+title: Protected packages API
 ---
 
-# Protected packages API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
@@ -29,7 +28,7 @@ Supported attributes:
 
 | Attribute                     | Type            | Required | Description                    |
 |-------------------------------|-----------------|----------|--------------------------------|
-| `id`                          | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and a list of package protection rules.
 
@@ -80,7 +79,7 @@ Supported attributes:
 
 | Attribute                             | Type            | Required | Description                    |
 |---------------------------------------|-----------------|----------|--------------------------------|
-| `id`                                  | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                  | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `package_name_pattern`                | string          | Yes      | Package name protected by the protection rule. For example `@my-scope/my-package-*`. Wildcard character `*` allowed. |
 | `package_type`                        | string          | Yes      | Package type protected by the protection rule. For example `npm`. |
 | `minimum_access_level_for_push`       | string          | Yes      | Minimum GitLab access level able to push a package. Must be at least `maintainer`. For example `maintainer`, `owner` or `admin`. |
@@ -122,7 +121,7 @@ Supported attributes:
 
 | Attribute                             | Type            | Required | Description                    |
 |---------------------------------------|-----------------|----------|--------------------------------|
-| `id`                                  | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                  | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `package_protection_rule_id`          | integer         | Yes      | ID of the package protection rule to be updated. |
 | `package_name_pattern`                | string          | No       | Package name protected by the protection rule. For example `@my-scope/my-package-*`. Wildcard character `*` allowed. |
 | `package_type`                        | string          | No       | Package type protected by the protection rule. For example `npm`. |
@@ -163,7 +162,7 @@ Supported attributes:
 
 | Attribute                     | Type            | Required | Description                    |
 |-------------------------------|-----------------|----------|--------------------------------|
-| `id`                          | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                          | integer/string  | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `package_protection_rule_id`  | integer         | Yes      | ID of the package protection rule to be deleted. |
 
 If successful, returns [`204 No Content`](rest/troubleshooting.md#status-codes).
diff --git a/doc/api/project_pull_mirroring.md b/doc/api/project_pull_mirroring.md
index 237457e6a275d75387b0336f51efab21286654e2..23027c9945df4866801dcc710c28f6c25c012d69 100644
--- a/doc/api/project_pull_mirroring.md
+++ b/doc/api/project_pull_mirroring.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Pull mirroring API
 ---
 
-# Pull mirroring API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -192,7 +191,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
diff --git a/doc/api/project_push_rules.md b/doc/api/project_push_rules.md
index c99646eb4e75d84ca379c996b1bc1f989f4a1bfb..0630a5187fc62a25d8983161937375018c3b62ba 100644
--- a/doc/api/project_push_rules.md
+++ b/doc/api/project_push_rules.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project push rules API
 ---
 
-# Project push rules API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -24,7 +23,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 Example response:
 
@@ -61,7 +60,7 @@ Supported attributes:
 
 | Attribute                       | Type              | Required | Description |
 |:--------------------------------|:------------------|:---------|:------------|
-| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `author_email_regex`            | string            | No       | All commit author emails must match this regular expression. |
 | `branch_name_regex`             | string            | No       | All branch names must match this regular expression. |
 | `commit_message_negative_regex` | string            | No       | No commit message is allowed to match this regular expression. |
@@ -88,7 +87,7 @@ Supported attributes:
 
 | Attribute                       | Type              | Required | Description |
 |:--------------------------------|:------------------|:---------|:------------|
-| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                            | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `author_email_regex`            | string            | No       | All commit author emails must match this regular expression. |
 | `branch_name_regex`             | string            | No       | All branch names must match this regular expression. |
 | `commit_message_negative_regex` | string            | No       | No commit message is allowed to match this regular expression. |
@@ -115,4 +114,4 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
diff --git a/doc/api/project_relations_export.md b/doc/api/project_relations_export.md
index f1381b0ef7a1861b9861c49eb729f462aa018074..c4852de0066b903b514600fa851e054b4ff5c690 100644
--- a/doc/api/project_relations_export.md
+++ b/doc/api/project_relations_export.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project relations export API
 ---
 
-# Project relations export API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/project_repository_storage_moves.md b/doc/api/project_repository_storage_moves.md
index 3410e27cb9b8ab4dfe3fb31518954025072ce812..ce285fb7b02776301f8c83cf011c2eb92a1022c1 100644
--- a/doc/api/project_repository_storage_moves.md
+++ b/doc/api/project_repository_storage_moves.md
@@ -2,10 +2,9 @@
 stage: Systems
 group: Gitaly
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project repository storage moves API
 ---
 
-# Project repository storage moves API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
@@ -42,7 +41,7 @@ GET /project_repository_storage_moves
 ```
 
 By default, `GET` requests return 20 results at a time because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 Example request:
 
@@ -80,7 +79,7 @@ GET /projects/:project_id/repository_storage_moves
 ```
 
 By default, `GET` requests return 20 results at a time because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 Parameters:
 
diff --git a/doc/api/project_security_settings.md b/doc/api/project_security_settings.md
index 98bca0c7e1458c03ab24773b9e0740cd9c5853a3..343ec2226bcc6e95221c2a76a0263cf52367ec4d 100644
--- a/doc/api/project_security_settings.md
+++ b/doc/api/project_security_settings.md
@@ -2,10 +2,9 @@
 stage: Application Security Testing
 group: Secret Detection
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project security settings API
 ---
 
-# Project security settings API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -29,7 +28,7 @@ GET /projects/:id/security_settings
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                 |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                                            |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                                            |
 
 ```shell
 curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/7/security_settings"
@@ -64,7 +63,7 @@ Prerequisites:
 
 | Attribute           | Type              | Required   | Description                                                                                                                  |
 | ------------------- | ----------------- | ---------- | -----------------------------------------------------------------------------------------------------------------------------|
-| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) which the authenticated user is a member of  |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) which the authenticated user is a member of  |
 | `pre_receive_secret_detection_enabled`        | boolean | yes        | The value to update `pre_receive_secret_detection_enabled` to  |
 
 ```shell
diff --git a/doc/api/project_snippets.md b/doc/api/project_snippets.md
index 2b7c845fa46b991750db721313da1563c3311c84..2bee54b03c89c207083e3de9be044914b17be0fd 100644
--- a/doc/api/project_snippets.md
+++ b/doc/api/project_snippets.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project snippets
 ---
 
-# Project snippets
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -39,7 +38,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 |-----------|----------------|----------|-------------|
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ## Single snippet
 
@@ -53,7 +52,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id` | integer        | yes      | The ID of a project's snippet. |
 
 ```json
@@ -92,7 +91,7 @@ Parameters:
 
 | Attribute         | Type            | Required | Description |
 |:------------------|:----------------|:---------|:------------|
-| `id`              | integer or string         | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer or string         | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `files:content`   | string          | yes      | Content of the snippet file. |
 | `files:file_path` | string          | yes      | File path of the snippet file. |
 | `title`           | string          | yes      | Title of a snippet. |
@@ -141,7 +140,7 @@ Parameters:
 
 | Attribute             | Type            | Required | Description |
 |:----------------------|:----------------|:---------|:------------|
-| `id`                  | integer or string         | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                  | integer or string         | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `files:action`        | string          | yes      | Type of action to perform on the file. One of: `create`, `update`, `delete`, `move`. |
 | `snippet_id`          | integer         | yes      | The ID of a project's snippet. |
 | `content`             | string          | no       | Deprecated: Use `files` instead. Content of a snippet. |
@@ -192,7 +191,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description |
 |:-------------|:---------------|:---------|:------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id` | integer        | yes      | The ID of a project's snippet. |
 
 Example request:
@@ -214,7 +213,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description |
 |:-------------|:---------------|:---------|:----------------------------------------------------------------------------------------------------------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id` | integer        | yes      | The ID of a project's snippet. |
 
 Example request:
@@ -236,7 +235,7 @@ Parameters:
 
 | Attribute    | Type           | Required | Description |
 |:-------------|:---------------|:---------|:------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `file_path`  | string         | yes      | The URL-encoded path to the file, for example, `snippet%2Erb`. |
 | `ref`        | string         | yes      | The name of a branch, tag or commit, for example, `main`. |
 | `snippet_id` | integer        | yes      | The ID of a project's snippet. |
@@ -258,7 +257,7 @@ GET /projects/:id/snippets/:snippet_id/user_agent_detail
 
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
-| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `snippet_id` | Integer        | yes      | The ID of a snippet. |
 
 Example request:
diff --git a/doc/api/project_starring.md b/doc/api/project_starring.md
index 79a883ec4706c82b2cd68efa8f0119666b2241a4..c541c23845fc26ede41b2dbeb62e0d2bffafd146 100644
--- a/doc/api/project_starring.md
+++ b/doc/api/project_starring.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project starring API
 ---
 
-# Project starring API
-
 You can get information about [projects and stars](../user/project/working_with_projects.md) by using the REST API.
 
 ## List projects starred by a user
@@ -282,7 +281,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `search`  | string            | No       | Search for specific users. |
 
 Example request:
@@ -332,7 +331,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -443,7 +442,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
diff --git a/doc/api/project_statistics.md b/doc/api/project_statistics.md
index 0f923c966f3659ba95e10c795daa5da44205166e..854ff46a0b27e92fae631cd07a8d945deeab450d 100644
--- a/doc/api/project_statistics.md
+++ b/doc/api/project_statistics.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project statistics API
 ---
 
-# Project statistics API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ GET /projects/:id/statistics
 
 | Attribute  | Type   | Required | Description |
 | ---------- | ------ | -------- | ----------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 Example response:
 
diff --git a/doc/api/project_templates.md b/doc/api/project_templates.md
index f58b96d2c3e6a98f3718bbf7e5adc91ee9d5176c..741037dbd835117c2b792498cf679e7ace42de24 100644
--- a/doc/api/project_templates.md
+++ b/doc/api/project_templates.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project templates API
 ---
 
-# Project templates API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ GET /projects/:id/templates/:type
 
 | Attribute  | Type   | Required | Description |
 | ---------- | ------ | -------- | ----------- |
-| `id`      | integer or string | Yes       | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes       | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `type`     | string | Yes  | The type of the template. Accepted values are: `dockerfiles`, `gitignores`, `gitlab_ci_ymls`, `licenses`, `issues`, or `merge_requests`. |
 
 Example response (licenses):
@@ -99,7 +98,7 @@ GET /projects/:id/templates/:type/:name
 
 | Attribute  | Type   | Required | Description |
 | ---------- | ------ | -------- | ----------- |
-| `id`      | integer or string | Yes       | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes       | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name`     | string | Yes       | The key of the template, as obtained from the collection endpoint. |
 | `type`     | string | Yes | The type of the template. One of: `dockerfiles`, `gitignores`, `gitlab_ci_ymls`, `licenses`, `issues`, or `merge_requests`. |
 | `fullname` | string | No        | The full name of the copyright holder to use when expanding placeholders in the template. Affects only licenses. |
diff --git a/doc/api/project_vulnerabilities.md b/doc/api/project_vulnerabilities.md
index f43ad28a0d2e0d967cc904860e98675615e2f536..3c3535aabd780e29e2555b04cfa368299a0f2cf8 100644
--- a/doc/api/project_vulnerabilities.md
+++ b/doc/api/project_vulnerabilities.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Insights
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project vulnerabilities API
 ---
 
-# Project vulnerabilities API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ belongs, requests to that project returns a `404 Not Found` status code.
 
 API results are paginated, and `GET` requests return 20 results at a time by default.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ## List project vulnerabilities
 
@@ -49,7 +48,7 @@ GET /projects/:id/vulnerabilities
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                 |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths).                                                            |
+| `id`          | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths).                                                            |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/4/vulnerabilities"
@@ -121,7 +120,7 @@ POST /projects/:id/vulnerabilities?finding_id=<your_finding_id>
 
 | Attribute           | Type              | Required   | Description                                                                                                                  |
 | ------------------- | ----------------- | ---------- | -----------------------------------------------------------------------------------------------------------------------------|
-| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) which the authenticated user is a member of  |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) which the authenticated user is a member of  |
 | `finding_id`        | integer or string | yes        | The ID of a Vulnerability Finding to create the new Vulnerability from |
 
 The other attributes of a newly created Vulnerability are populated from
diff --git a/doc/api/project_webhooks.md b/doc/api/project_webhooks.md
index b00e0e2b66b5c509e64aa982196c4466965448e7..2e6f4218f072ec9711701621243d841501329898 100644
--- a/doc/api/project_webhooks.md
+++ b/doc/api/project_webhooks.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project webhooks
 ---
 
-# Project webhooks
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -29,7 +28,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ## Get a project webhook
 
@@ -44,7 +43,7 @@ Supported attributes:
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
 | `hook_id` | integer           | Yes      | ID of a project webhook. |
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example response:
 
@@ -100,7 +99,7 @@ Supported attributes:
 | Attribute  | Type              | Required | Description |
 |:-----------|:------------------|:---------|:------------|
 | `hook_id`  | integer           | Yes      | ID of a project webhook. |
-| `id`       | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `status`   | integer or string | No       | Response status code of the events, for example: `200` or `500`. You can search by status category: `successful` (200-299), `client_failure` (400-499), and `server_failure` (500-599). |
 | `page`     | integer           | No       | Page to retrieve. Defaults to `1`. |
 | `per_page` | integer           | No       | Number of records to return per page. Defaults to `20`. |
@@ -399,7 +398,7 @@ Supported attributes:
 
 | Attribute                      | Type              | Required | Description |
 |:-------------------------------|:------------------|:---------|:------------|
-| `id`                           | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                           | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `url`                          | string            | Yes      | Project webhook URL. |
 | `name`                         | string            | No       | Name of the project webhook. |
 | `description`                  | string            | No       | Description of the webhook. |
@@ -439,7 +438,7 @@ Supported attributes:
 | Attribute                      | Type              | Required | Description |
 |:-------------------------------|:------------------|:---------|:------------|
 | `hook_id`                      | integer           | Yes      | ID of the project webhook. |
-| `id`                           | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                           | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `url`                          | string            | Yes      | Project webhook URL. |
 | `name`                         | string            | No       | Name of the project webhook. |
 | `description`                  | string            | No       | Description of the project webhook. |
@@ -478,7 +477,7 @@ Supported attributes:
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
 | `hook_id` | integer           | Yes      | ID of the project webhook. |
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Note the JSON response differs if the project webhook is available or not. If the project
 hook is available before it's returned in the JSON response or an empty response
@@ -508,7 +507,7 @@ Supported attributes:
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
 | `hook_id` | integer           | Yes      | ID of the project webhook. |
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `trigger` | string            | Yes      | One of `push_events`, `tag_push_events`, `issues_events`, `confidential_issues_events`, `note_events`, `merge_requests_events`, `job_events`, `pipeline_events`, `wiki_page_events`, `releases_events`, `emoji_events`, or `resource_access_token_events`. |
 
 Example response:
@@ -529,7 +528,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | ID of the project webhook. |
 | `key`     | string            | Yes      | Key of the custom header. |
 | `value`   | string            | Yes      | Value of the custom header. |
@@ -548,7 +547,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | ID of the project webhook. |
 | `key`     | string            | Yes      | Key of the custom header. |
 
@@ -566,7 +565,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | ID of the project webhook. |
 | `key`     | string            | Yes      | Key of the URL variable. |
 | `value`   | string            | Yes      | Value of the URL variable. |
@@ -585,7 +584,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `hook_id` | integer           | Yes      | ID of the project webhook. |
 | `key`     | string            | Yes      | Key of the URL variable. |
 
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 0e1263edcfbe31e902dfda8cf0361366c0430dcf..8d128df11c566c16c48d15015f966edbc2a2545b 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Projects API
 ---
 
-# Projects API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -55,7 +54,7 @@ Supported attributes:
 
 | Attribute                | Type              | Required | Description |
 |:-------------------------|:------------------|:---------|:------------|
-| `id`                     | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                     | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `license`                | boolean           | No       | Include project license data. |
 | `statistics`             | boolean           | No       | Include project statistics. Available only to users with at least the Reporter role. |
 | `with_custom_attributes` | boolean           | No       | Include [custom attributes](custom_attributes.md) in response. _(administrators only)_ |
@@ -375,7 +374,7 @@ Supported attributes:
 | `with_programming_language`   | string   | No       | Limit by projects which use the given programming language. |
 | `marked_for_deletion_on`      | date     | No       | Filter by date when project was marked for deletion. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/463939) in GitLab 17.1. Premium and Ultimate only. |
 
-This endpoint supports [keyset pagination](rest/index.md#keyset-based-pagination) for selected `order_by` options.
+This endpoint supports [keyset pagination](rest/_index.md#keyset-based-pagination) for selected `order_by` options.
 
 When `simple=true` or the user is unauthenticated this returns something like:
 
@@ -594,10 +593,10 @@ curl --globoff --request GET "https://gitlab.example.com/api/v4/projects?custom_
 
 #### Pagination limits
 
-You can use [offset-based pagination](rest/index.md#offset-based-pagination) to access
+You can use [offset-based pagination](rest/_index.md#offset-based-pagination) to access
 [up to 50,000 projects](https://gitlab.com/gitlab-org/gitlab/-/issues/34565).
 
-Use [keyset pagination](rest/index.md#keyset-based-pagination) to retrieve projects beyond this limit.
+Use [keyset pagination](rest/_index.md#keyset-based-pagination) to retrieve projects beyond this limit.
 Keyset pagination supports only `order_by=id`. Other sorting options aren't available.
 
 ### List a user's projects
@@ -612,7 +611,7 @@ Prerequisites:
 NOTE:
 Only the projects in the user's (specified in `user_id`) namespace are returned. Projects owned by the user in any group or subgroups are not returned. An empty list is returned if a profile is set to private.
 
-This endpoint supports [keyset pagination](rest/index.md#keyset-based-pagination)
+This endpoint supports [keyset pagination](rest/_index.md#keyset-based-pagination)
 for selected `order_by` options.
 
 ```plaintext
@@ -1192,7 +1191,7 @@ Supported attributes:
 
 | Attribute    | Type              | Required | Description |
 |:-------------|:------------------|:---------|:------------|
-| `id`         | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`         | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `search`     | string            | No       | Search for specific users. |
 | `skip_users` | integer array     | No       | Filter out users with the specified IDs. |
 
@@ -1231,7 +1230,7 @@ Supported attributes:
 
 | Attribute                 | Type              | Required | Description |
 |:--------------------------|:------------------|:---------|:------------|
-| `id`                      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `search`                  | string            | No       | Search for specific groups. |
 | `shared_min_access_level` | integer           | No       | Limit to shared groups with at least this [role (`access_level`)](members.md#roles). |
 | `shared_visible_only`     | boolean           | No       | Limit to shared groups user has access to. |
@@ -1273,7 +1272,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `search`  | string            | No       | Search for specific groups. |
 
 Example response:
@@ -1307,7 +1306,7 @@ This endpoint is rate-limited to 60 requests per minute per:
 - User for authenticated users.
 - IP address for unauthenticated users.
 
-By default, this request returns 20 results at a time because the API results [are paginated](rest/index.md#pagination).
+By default, this request returns 20 results at a time because the API results [are paginated](rest/_index.md#pagination).
 
 ```plaintext
 GET /projects/:id/invited_groups
@@ -1317,7 +1316,7 @@ Supported attributes:
 
 | Attribute                | Type             | Required | Description |
 |:-------------------------|:-----------------|:---------|:------------|
-| `id`                     | integer/string   | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                     | integer/string   | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `search`                 | string           | no       | Return the list of authorized groups matching the search criteria |
 | `min_access_level`       | integer          | no       | Limit to groups where current user has at least the specified [role (`access_level`)](members.md#roles) |
 | `relation`               | array of strings | no       | Filter the groups by relation (direct or inherited) |
@@ -1350,7 +1349,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -1623,7 +1622,7 @@ Supported general project attributes:
 
 | Attribute                                          | Type              | Required | Description |
 |:---------------------------------------------------|:------------------|:---------|:------------|
-| `id`                                               | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                               | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `allow_merge_on_skipped_pipeline`                  | boolean           | No       | Set whether or not merge requests can be merged with skipped jobs. |
 | `allow_pipeline_trigger_approve_deployment`        | boolean           | No       | Set whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only. |
 | `only_allow_merge_if_all_status_checks_passed`     | boolean           | No       | Indicates that merges of merge requests should be blocked unless all status checks have passed. Defaults to false.<br/><br/>[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/369859) in GitLab 15.5 with feature flag `only_allow_merge_if_all_status_checks_passed` disabled by default. The feature flag was enabled by default in GitLab 15.9. Ultimate only. |
@@ -1759,8 +1758,8 @@ Supported attributes:
 
 | Attribute    | Type              | Required | Description |
 |:-------------|:------------------|:---------|:------------|
-| `id`         | integer or string | Yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the target project to receive the members. |
-| `project_id` | integer or string | Yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the source project to import the members from. |
+| `id`         | integer or string | Yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the target project to receive the members. |
+| `project_id` | integer or string | Yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the source project to import the members from. |
 
 Example request:
 
@@ -1819,7 +1818,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -1963,7 +1962,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -2118,7 +2117,7 @@ Supported attributes:
 
 | Attribute            | Type              | Required | Description |
 |:---------------------|:------------------|:---------|:------------|
-| `id`                 | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                 | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `full_path`          | string            | no       | Full path of project to use with `permanently_remove`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/396500) in GitLab 15.11. To find the project path, use `path_with_namespace` from [get single project](projects.md#get-a-single-project). Premium and Ultimate only. |
 | `permanently_remove` | boolean/string    | no       | Immediately deletes a project if it is marked for deletion. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/396500) in GitLab 15.11. Premium and Ultimate only. |
 
@@ -2138,7 +2137,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ### Transfer a project to a new namespace
 
@@ -2155,7 +2154,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description |
 |:------------|:------------------|:---------|:------------|
-| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `namespace` | integer or string | Yes      | The ID or path of the namespace to transfer to project to. |
 
 Example request:
@@ -2293,7 +2292,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `search`  | string            | No       | The group names to search for. |
 
 Example request:
@@ -2338,7 +2337,7 @@ Supported attributes:
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
 | `avatar`  | string            | Yes      | The file to be uploaded. |
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 To upload an avatar from your file system, use the `--form` argument. This causes
 cURL to post data using the header `Content-Type: multipart/form-data`. The
@@ -2374,7 +2373,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | yes      | ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project. |
+| `id`      | integer or string | yes      | ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project. |
 
 Example request:
 
@@ -2413,7 +2412,7 @@ Supported attributes:
 |:---------------|:------------------|:---------|:------------|
 | `group_access` | integer           | Yes      | The [role (`access_level`)](members.md#roles) to grant the group. |
 | `group_id`     | integer           | Yes      | The ID of the group to share with. |
-| `id`           | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `expires_at`   | string            | No       | Share expiration date in ISO 8601 format. For example, `2016-09-26`. |
 
 ### Delete a shared project link in a group
@@ -2429,7 +2428,7 @@ Supported attributes:
 | Attribute  | Type              | Required | Description |
 |:-----------|:------------------|:---------|:------------|
 | `group_id` | integer           | Yes      | The ID of the group. |
-| `id`       | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -2449,7 +2448,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `task`    | string            | No       | `prune` to trigger manual prune of unreachable objects or `eager` to trigger eager housekeeping. |
 
 ## Real-time security scan
@@ -2471,7 +2470,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |-----------|-------------------|----------|-------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -2525,7 +2524,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `wiki`    | boolean           | No       | Whether to download the wiki, rather than project, repository. |
 
 ## Get the path to repository storage
@@ -2543,7 +2542,7 @@ Supported attributes:
 
 | Attribute | Type              | Required | Description |
 |:----------|:------------------|:---------|:------------|
-| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | Yes      | ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```json
 [
diff --git a/doc/api/protected_branches.md b/doc/api/protected_branches.md
index 8e8aeb1febf57335d01378349f880165378e59cb..9344c68180ab512b8acaad6f4717ea67ce9b1565 100644
--- a/doc/api/protected_branches.md
+++ b/doc/api/protected_branches.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Protected branches API
 ---
 
-# Protected branches API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -35,7 +34,7 @@ GET /projects/:id/protected_branches
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `search` | string | no | Name or part of the name of protected branches to be searched for |
 
 In the following example, the project ID is `5`.
@@ -162,7 +161,7 @@ GET /projects/:id/protected_branches/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name` | string | yes | The name of the branch or wildcard |
 
 In the following example, the project ID is `5` and branch name is `main`:
@@ -242,7 +241,7 @@ POST /projects/:id/protected_branches
 
 | Attribute                                    | Type | Required | Description |
 | -------------------------------------------- | ---- | -------- | ----------- |
-| `id`                                         | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                         | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name`                                       | string         | yes | The name of the branch or wildcard. |
 | `allow_force_push`                           | boolean        | no  | When enabled, members who can push to this branch can also force push. (default: `false`) |
 | `allowed_to_merge`                           | array          | no  | Array of merge access levels, with each described by a hash of the form `{user_id: integer}`, `{group_id: integer}`, or `{access_level: integer}`. Premium and Ultimate only. |
@@ -558,7 +557,7 @@ DELETE /projects/:id/protected_branches/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name` | string | yes | The name of the branch |
 
 In the following example, the project ID is `5` and branch name is `*-stable`.
@@ -582,7 +581,7 @@ PATCH /projects/:id/protected_branches/:name
 
 | Attribute                                    | Type           | Required | Description |
 | -------------------------------------------- | ---- | -------- | ----------- |
-| `id`                                         | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                                         | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name`                                       | string         | yes | The name of the branch or wildcard. |
 | `allow_force_push`                           | boolean        | no  | When enabled, members who can push to this branch can also force push. |
 | `allowed_to_merge`                           | array          | no  | Array of merge access levels, with each described by a hash of the form `{user_id: integer}`, `{group_id: integer}`, or `{access_level: integer}`. Premium and Ultimate only. |
diff --git a/doc/api/protected_environments.md b/doc/api/protected_environments.md
index 6d06206902b2f0de9426449625492069fb0b9222..8f1af5adcc55d6541ce9a460d32d1f6a4a48bf01 100644
--- a/doc/api/protected_environments.md
+++ b/doc/api/protected_environments.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Protected environments API
 ---
 
-# Protected environments API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -41,7 +40,7 @@ GET /projects/:id/protected_environments
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/protected_environments/"
@@ -78,7 +77,7 @@ GET /projects/:id/protected_environments/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `name` | string | yes | The name of the protected environment |
 
 ```shell
@@ -114,7 +113,7 @@ POST /projects/:id/protected_environments
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`                            | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                            | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name`                          | string         | yes | The name of the environment. |
 | `deploy_access_levels`          | array          | yes | Array of access levels allowed to deploy, with each described by a hash. |
 | `approval_rules`                | array          | no  | Array of access levels allowed to approve, with each described by a hash. See [Multiple approval rules](../ci/environments/deployment_approvals.md#add-multiple-approval-rules). |
@@ -183,7 +182,7 @@ PUT /projects/:id/protected_environments/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id`                            | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`                            | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name`                          | string         | yes | The name of the environment. |
 | `deploy_access_levels`          | array          | no  | Array of access levels allowed to deploy, with each described by a hash. |
 | `approval_rules`                | array          | no  | Array of access levels allowed to approve, with each described by a hash. See [Multiple approval rules](../ci/environments/deployment_approvals.md#add-multiple-approval-rules) for more information. |
@@ -352,7 +351,7 @@ DELETE /projects/:id/protected_environments/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the protected environment. |
 
 ```shell
diff --git a/doc/api/protected_tags.md b/doc/api/protected_tags.md
index 4248cb5b08757e0d6770864b718fa8c785764dcc..44056225baded28a6c91e261881b3b0004b17357 100644
--- a/doc/api/protected_tags.md
+++ b/doc/api/protected_tags.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Protected tags API
 ---
 
-# Protected tags API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -31,7 +30,7 @@ GET /projects/:id/protected_tags
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" \
@@ -72,7 +71,7 @@ GET /projects/:id/protected_tags/:name
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the tag or wildcard. |
 
 ```shell
@@ -124,7 +123,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the tag or wildcard. |
 | `allowed_to_create`   | array  | no | Array of access levels allowed to create tags, with each described by a hash of the form `{user_id: integer}`, `{group_id: integer}`, `{deploy_key_id: integer}`, or `{access_level: integer}`. Premium and Ultimate only. |
 | `create_access_level` | string | no | Access levels allowed to create. Default: `40`, for Maintainer role. |
@@ -201,7 +200,7 @@ curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `name` | string | yes | The name of the tag. |
 
 ## Related topics
diff --git a/doc/api/releases/index.md b/doc/api/releases/_index.md
similarity index 98%
rename from doc/api/releases/index.md
rename to doc/api/releases/_index.md
index f9ae1d6870e65ed27ee7dd9665d4f3c7beca116a..b2c37389ca0f3c83e0bd8708c636502dc3241142 100644
--- a/doc/api/releases/index.md
+++ b/doc/api/releases/_index.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Releases API
 ---
 
-# Releases API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ GET /projects/:id/releases
 
 | Attribute     | Type           | Required | Description                                                                         |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `order_by`    | string         | no       | The field to use as order. Either `released_at` (default) or `created_at`. |
 | `sort`        | string         | no       | The direction of the order. Either `desc` (default) for descending order or `asc` for ascending order. |
 | `include_html_description` | boolean        | no       | If `true`, a response includes HTML rendered Markdown of the release description.   |
@@ -259,7 +258,7 @@ GET /projects/:id/releases/:tag_name
 
 | Attribute                  | Type           | Required | Description                                                                         |
 |----------------------------| -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`                       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths).  |
+| `id`                       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths).  |
 | `tag_name`                 | string         | yes      | The Git tag the release is associated with.                                         |
 | `include_html_description` | boolean        | no       | If `true`, a response includes HTML rendered Markdown of the release description.   |
 
@@ -414,7 +413,7 @@ GET /projects/:id/releases/:tag_name/downloads/:direct_asset_path
 
 | Attribute                  | Type           | Required | Description                                                                         |
 |----------------------------| -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`                       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths).  |
+| `id`                       | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths).  |
 | `tag_name`                 | string         | yes      | The Git tag the release is associated with.                                         |
 | `direct_asset_path`        | string         | yes      | Path to the release asset file as specified when [creating](links.md#create-a-release-link) or [updating](links.md#update-a-release-link) its link. |
 
@@ -465,7 +464,7 @@ POST /projects/:id/releases
 
 | Attribute          | Type            | Required                    | Description                                                                                                                      |
 | -------------------| --------------- | --------                    | -------------------------------------------------------------------------------------------------------------------------------- |
-| `id`               | integer/string  | yes                         | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths).                                              |
+| `id`               | integer/string  | yes                         | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths).                                              |
 | `name`             | string          | no                          | The release name.                                                                                                                |
 | `tag_name`         | string          | yes                         | The tag where the release is created from.                                                                                  |
 | `tag_message`      | string          | no                          | Message to use if creating a new annotated tag.                                                                                  |
@@ -617,7 +616,7 @@ POST /projects/:id/releases/:tag_name/evidence
 
 | Attribute     | Type           | Required | Description                                                                         |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `tag_name`    | string         | yes      | The Git tag the release is associated with.                                         |
 
 Example request:
@@ -644,7 +643,7 @@ PUT /projects/:id/releases/:tag_name
 
 | Attribute     | Type            | Required | Description                                                                                                 |
 | ------------- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------- |
-| `id`          | integer/string  | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths).                         |
+| `id`          | integer/string  | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths).                         |
 | `tag_name`    | string          | yes      | The Git tag the release is associated with.                                                                 |
 | `name`        | string          | no       | The release name.                                                                                           |
 | `description` | string          | no       | The description of the release. You can use [Markdown](../../user/markdown.md).                             |
@@ -751,7 +750,7 @@ DELETE /projects/:id/releases/:tag_name
 
 | Attribute     | Type           | Required | Description                                                                         |
 | ------------- | -------------- | -------- | ----------------------------------------------------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `tag_name`    | string         | yes      | The Git tag the release is associated with.                                         |
 
 Example request:
diff --git a/doc/api/releases/links.md b/doc/api/releases/links.md
index 5ecd8551549ca3d86a8fe895a3f30befad745084..d4fb1f7265afc850111c58291916a6963c0b1ec6 100644
--- a/doc/api/releases/links.md
+++ b/doc/api/releases/links.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Release links API
 ---
 
-# Release links API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -13,7 +12,7 @@ DETAILS:
 > Support for [GitLab CI/CD job token](../../ci/jobs/ci_job_token.md) authentication [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250819) in GitLab 15.1.
 
 Use this API to manipulate GitLab [Release](../../user/project/releases/index.md)
-links. For manipulating other Release assets, see [Release API](index.md).
+links. For manipulating other Release assets, see [Release API](_index.md).
 
 GitLab supports links to `http`, `https`, and `ftp` assets.
 
@@ -27,7 +26,7 @@ GET /projects/:id/releases/:tag_name/assets/links
 
 | Attribute     | Type           | Required | Description                             |
 | ------------- | -------------- | -------- | --------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `tag_name`    | string         | yes      | The tag associated with the Release. |
 
 Example request:
@@ -65,7 +64,7 @@ GET /projects/:id/releases/:tag_name/assets/links/:link_id
 
 | Attribute     | Type           | Required | Description                             |
 | ------------- | -------------- | -------- | --------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `tag_name`    | string         | yes      | The tag associated with the Release. |
 | `link_id`    | integer         | yes      | The ID of the link. |
 
@@ -96,7 +95,7 @@ POST /projects/:id/releases/:tag_name/assets/links
 
 | Attribute            | Type           | Required | Description                                                                                                               |
 |----------------------|----------------|----------|---------------------------------------------------------------------------------------------------------------------------|
-| `id`                 | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths).                                        |
+| `id`                 | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths).                                        |
 | `tag_name`           | string         | yes      | The tag associated with the Release.                                                                                      |
 | `name`               | string         | yes      | The name of the link. Link names must be unique in the release.                                                           |
 | `url`                | string         | yes      | The URL of the link. Link URLs must be unique in the release.                                                             |
@@ -136,7 +135,7 @@ PUT /projects/:id/releases/:tag_name/assets/links/:link_id
 
 | Attribute            | Type           | Required | Description                                                                                                               |
 | -------------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- |
-| `id`                 | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`                 | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `tag_name`           | string         | yes      | The tag associated with the Release. |
 | `link_id`            | integer        | yes      | The ID of the link. |
 | `name`               | string         | no       | The name of the link. |
@@ -176,7 +175,7 @@ DELETE /projects/:id/releases/:tag_name/assets/links/:link_id
 
 | Attribute     | Type           | Required | Description                             |
 | ------------- | -------------- | -------- | --------------------------------------- |
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/index.md#namespaced-paths). |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](../rest/_index.md#namespaced-paths). |
 | `tag_name`    | string         | yes      | The tag associated with the Release. |
 | `link_id`    | integer         | yes      | The ID of the link. |
 
diff --git a/doc/api/remote_mirrors.md b/doc/api/remote_mirrors.md
index 65163360ebb08773c0c5a87b2c7605e254a0f2ae..b195acd713a07cd5592a49ac9e3c7981ad5f3f23 100644
--- a/doc/api/remote_mirrors.md
+++ b/doc/api/remote_mirrors.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Project remote mirrors API
 ---
 
-# Project remote mirrors API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -198,7 +197,7 @@ Supported attributes:
 
 | Attribute   | Type              | Required | Description                                                                          |
 |-------------|-------------------|----------|--------------------------------------------------------------------------------------|
-| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `mirror_id` | Integer           | Yes      | The remote mirror ID.                                                                |
 
 If successful, returns [`204`](rest/troubleshooting.md#status-codes).
diff --git a/doc/api/repositories.md b/doc/api/repositories.md
index b87299bde3f31215b688c02743d1ae06bb94b144..a0946436d192e828e3364d234e828986ff159c7a 100644
--- a/doc/api/repositories.md
+++ b/doc/api/repositories.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for Git repositories in GitLab."
+title: Repositories API
 ---
 
-# Repositories API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -24,7 +23,7 @@ command. For more information, refer to the section
 in the Git internals documentation.
 
 WARNING:
-This endpoint changed to [keyset-based pagination](rest/index.md#keyset-based-pagination)
+This endpoint changed to [keyset-based pagination](rest/_index.md#keyset-based-pagination)
 in GitLab 15.0. Iterating pages of results with a number (`?page=2`) is unsupported.
 
 ```plaintext
@@ -35,11 +34,11 @@ Supported attributes:
 
 | Attribute   | Type           | Required | Description |
 | :---------- | :------------- | :------- | :---------- |
-| `id`        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `page_token` | string        | no       | The tree record ID at which to fetch the next page. Used only with keyset pagination. |
-| `pagination` | string        | no       | If `keyset`, use the [keyset-based pagination method](rest/index.md#keyset-based-pagination). |
+| `pagination` | string        | no       | If `keyset`, use the [keyset-based pagination method](rest/_index.md#keyset-based-pagination). |
 | `path`      | string         | no       | The path inside the repository. Used to get content of subdirectories. |
-| `per_page`  | integer        | no       | Number of results to show per page. If not specified, defaults to `20`. For more information, see [Pagination](rest/index.md#pagination). |
+| `per_page`  | integer        | no       | Number of results to show per page. If not specified, defaults to `20`. For more information, see [Pagination](rest/_index.md#pagination). |
 | `recursive` | boolean        | no       | Boolean value used to get a recursive tree. Default is `false`. |
 | `ref`       | string         | no       | The name of a repository branch or tag or, if not given, the default branch. |
 
@@ -111,7 +110,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 | :-------- | :------------- | :------- | :---------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `sha`     | string         | yes      | The blob SHA. |
 
 ## Raw blob content
@@ -127,7 +126,7 @@ Supported attributes:
 
 | Attribute | Type     | Required | Description |
 | :-------- | :------- | :------- | :---------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `sha`     | string | yes      | The blob SHA. |
 
 ## Get file archive
@@ -158,7 +157,7 @@ Supported attributes:
 
 | Attribute   | Type           | Required | Description           |
 |:------------|:---------------|:---------|:----------------------|
-| `id`        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `path`      | string         | no       | The subpath of the repository to download. If an empty string, defaults to the whole repository.  |
 | `sha`       | string         | no       | The commit SHA to download. A tag, branch reference, or SHA can be used. If not specified, defaults to the tip of the default branch. |
 
@@ -183,7 +182,7 @@ Supported attributes:
 
 | Attribute         | Type           | Required | Description |
 | :---------        | :------------- | :------- | :---------- |
-| `id`              | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`              | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `from`            | string         | yes      | The commit SHA or branch name. |
 | `to`              | string         | yes      | The commit SHA or branch name. |
 | `from_project_id` | integer        | no       | The ID to compare from. |
@@ -247,7 +246,7 @@ Supported attributes:
 
 | Attribute  | Type           | Required | Description |
 | :--------- | :------------- | :------- | :---------- |
-| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `ref`      | string         | no       | The name of a repository branch or tag. If not given, the default branch. |
 | `order_by` | string         | no       | Return contributors ordered by `name`, `email`, or `commits` (orders by commit date) fields. Default is `commits`. |
 | `sort`     | string         | no       | Return contributors sorted in `asc` or `desc` order. Default is `asc`. |
@@ -287,7 +286,7 @@ GET /projects/:id/repository/merge_base
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ---------------------------------------------------------------------------------- |
-| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `refs`    | array          | yes      | The refs to find the common ancestor of. Accepts multiple refs.                    |
 
 Example request, with the refs truncated for readability:
diff --git a/doc/api/repository_files.md b/doc/api/repository_files.md
index ce73c0fae6c43b241a0e81c75940d94d683df820..700837f8f06697fbcf5d1f5806ddc9ca81056538 100644
--- a/doc/api/repository_files.md
+++ b/doc/api/repository_files.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
 description: "Documentation for the REST API for managing Git repository files in GitLab."
+title: Repository files API
 ---
 
-# Repository files API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -42,7 +41,7 @@ curl --header "PRIVATE-TOKEN: <your_access_token>" \
 
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|-------------|
-| `id`        | integer or string | yes   | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | yes   | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `file_path` | string         | yes      | URL encoded full path to new file, such as `lib%2Fclass%2Erb`. |
 | `ref`       | string         | yes      | The name of branch, tag or commit. |
 
@@ -111,7 +110,7 @@ GET /projects/:id/repository/files/:file_path/blame
 | Attribute       | Type              | Required | Description |
 |-----------------|-------------------|----------|-------------|
 | `file_path`     | string            | yes   | URL-encoded full path to new file, such as`lib%2Fclass%2Erb`. |
-| `id`            | integer or string | yes   | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`            | integer or string | yes   | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `range[end]`    | integer           | yes   | The last line of the range to blame. |
 | `range[start]`  | integer           | yes   | The first line of the range to blame. |
 | `ref`           | string            | yes   | The name of branch, tag or commit. |
@@ -226,7 +225,7 @@ GET /projects/:id/repository/files/:file_path/raw
 | Attribute   | Type           | Required | Description |
 |-------------|----------------|----------|------------|
 | `file_path` | string         | yes      | URL-encoded full path to new file, such as `lib%2Fclass%2Erb`. |
-| `id`        | integer or string | yes   | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`        | integer or string | yes   | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `lfs`       | boolean        | no       | Determines if the response should be Git LFS file contents, rather than the pointer. Ignored if the file is not tracked by Git LFS. Defaults to `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/27892) in GitLab 15.7. |
 | `ref`       | string         | no       | The name of branch, tag or commit. Default is the `HEAD` of the project. |
 
@@ -253,7 +252,7 @@ POST /projects/:id/repository/files/:file_path
 | `commit_message`   | string         | yes      | The commit message. |
 | `content`          | string         | yes      | The file's content. |
 | `file_path`        | string         | yes      | URL-encoded full path to new file. For example: `lib%2Fclass%2Erb`. |
-| `id`               | integer or string | yes   | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`               | integer or string | yes   | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `author_email`     | string         | no       | The commit author's email address. |
 | `author_name`      | string         | no       | The commit author's name. |
 | `encoding`         | string         | no       | Change encoding to `base64`. Default is `text`. |
@@ -293,7 +292,7 @@ PUT /projects/:id/repository/files/:file_path
 | `commit_message` | string         | yes      | The commit message. |
 | `content`        | string         | yes      | The file's content. |
 | `file_path`      | string         | yes      | URL-encoded full path to new file. For example: `lib%2Fclass%2Erb`. |
-| `id`             | integer or string | yes   | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)  |
+| `id`             | integer or string | yes   | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)  |
 | `author_email`   | string         | no       | The commit author's email address. |
 | `author_name`    | string         | no       | The commit author's name. |
 | `encoding`       | string         | no       | Change encoding to `base64`. Default is `text`. |
@@ -342,7 +341,7 @@ DELETE /projects/:id/repository/files/:file_path
 | `branch`         | string         | yes      | Name of the new branch to create. The commit is added to this branch. |
 | `commit_message` | string         | yes      | The commit message. |
 | `file_path`      | string         | yes      | URL-encoded full path to new file. For example: `lib%2Fclass%2Erb`. |
-| `id`             | integer or string | yes   | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`             | integer or string | yes   | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `author_email`   | string         | no       | The commit author's email address. |
 | `author_name`    | string         | no       | The commit author's name. |
 | `last_commit_id` | string         | no       | Last known file commit ID. |
diff --git a/doc/api/repository_submodules.md b/doc/api/repository_submodules.md
index e2d76cb0b58de6992f04f2ae1d4c136214e53dd4..0ce3418b2ec6186bf65b63ca5e6dbb922b1071f6 100644
--- a/doc/api/repository_submodules.md
+++ b/doc/api/repository_submodules.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Repository submodules API
 ---
 
-# Repository submodules API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -23,7 +22,7 @@ PUT /projects/:id/repository/submodules/:submodule
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ----------- |
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `submodule` | string | yes | URL-encoded full path to the submodule. For example, `lib%2Fclass%2Erb` |
 | `branch` | string | yes | Name of the branch to commit into |
 | `commit_sha` | string | yes | Full commit SHA to update the submodule to |
diff --git a/doc/api/resource_groups.md b/doc/api/resource_groups.md
index 42bd8bd7bf4b34daee28bb5299cc0d6813cf1590..e9c0c284b15c0519187d4d8e1e52185176d4d994 100644
--- a/doc/api/resource_groups.md
+++ b/doc/api/resource_groups.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Resource group API
 ---
 
-# Resource group API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -20,7 +19,7 @@ GET /projects/:id/resource_groups
 
 | Attribute | Type    | Required | Description         |
 |-----------|---------|----------|---------------------|
-| `id`      | integer/string     | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string     | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 
 ```shell
 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/resource_groups"
@@ -48,7 +47,7 @@ GET /projects/:id/resource_groups/:key
 
 | Attribute | Type    | Required | Description         |
 |-----------|---------|----------|---------------------|
-| `id`      | integer/string     | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string     | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`     | string  | yes      | The key of the resource group |
 
 ```shell
@@ -75,7 +74,7 @@ GET /projects/:id/resource_groups/:key/upcoming_jobs
 
 | Attribute | Type    | Required | Description         |
 |-----------|---------|----------|---------------------|
-| `id`      | integer/string     | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`      | integer/string     | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `key`     | string  | yes      | The key of the resource group |
 
 ```shell
@@ -174,7 +173,7 @@ PUT /projects/:id/resource_groups/:key
 
 | Attribute       | Type    | Required                          | Description                      |
 | --------------- | ------- | --------------------------------- | -------------------------------  |
-| `id`            | integer/string | yes                        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)            |
+| `id`            | integer/string | yes                        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)            |
 | `key`           | string  | yes                               | The key of the resource group |
 | `process_mode`  | string  | no                                | The process mode of the resource group. One of `unordered`, `oldest_first` or `newest_first`. Read [process modes](../ci/resource_groups/index.md#process-modes) for more information. |
 
diff --git a/doc/api/resource_iteration_events.md b/doc/api/resource_iteration_events.md
index a42edfbfc60795a509d698e1ede63c7cfe5a8150..7d4abc8adbee36c918307d3be9af5cffea85fcef 100644
--- a/doc/api/resource_iteration_events.md
+++ b/doc/api/resource_iteration_events.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Resource iteration events API
 ---
 
-# Resource iteration events API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -26,7 +25,7 @@ GET /projects/:id/issues/:issue_iid/resource_iteration_events
 
 | Attribute   | Type           | Required | Description                                                                     |
 | ----------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid` | integer        | yes      | The IID of an issue                                                             |
 
 Example request:
@@ -108,7 +107,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description                                                                     |
 | ----------------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project |
 | `issue_iid`                   | integer        | yes      | The IID of an issue                                                             |
 | `resource_iteration_event_id` | integer        | yes      | The ID of an iteration event                                                     |
 
diff --git a/doc/api/resource_label_events.md b/doc/api/resource_label_events.md
index 18692e8f203a317da03520185ff37475c68c2d23..2d3aebabfd8d1b4fd95e0db92b937d1fcea3bfc0 100644
--- a/doc/api/resource_label_events.md
+++ b/doc/api/resource_label_events.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Compliance
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Resource label events API
 ---
 
-# Resource label events API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -25,7 +24,7 @@ GET /projects/:id/issues/:issue_iid/resource_label_events
 
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid`         | integer          | yes        | The IID of an issue |
 
 ```json
@@ -91,7 +90,7 @@ Parameters:
 
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid`     | integer        | yes      | The IID of an issue |
 | `resource_label_event_id` | integer        | yes      | The ID of a label event |
 
@@ -122,7 +121,7 @@ GET /groups/:id/epics/:epic_id/resource_label_events
 
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `epic_id`           | integer          | yes        | The ID of an epic |
 
 ```json
@@ -188,7 +187,7 @@ Parameters:
 
 | Attribute       | Type           | Required | Description |
 | --------------- | -------------- | -------- | ----------- |
-| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`            | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `epic_id`       | integer        | yes      | The ID of an epic |
 | `resource_label_event_id` | integer        | yes      | The ID of a label event |
 
@@ -208,7 +207,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/resource_label_events
 
 | Attribute           | Type             | Required   | Description  |
 | ------------------- | ---------------- | ---------- | ------------ |
-| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer/string   | yes        | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid` | integer          | yes        | The IID of a merge request |
 
 ```json
@@ -274,7 +273,7 @@ Parameters:
 
 | Attribute           | Type           | Required | Description |
 | ------------------- | -------------- | -------- | ----------- |
-| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request |
 | `resource_label_event_id`     | integer        | yes      | The ID of a label event |
 
diff --git a/doc/api/resource_milestone_events.md b/doc/api/resource_milestone_events.md
index 836d7a1e32491f257fa27a42126cf9356116c435..895e0f6eb81450a2d4bebde5a370ed10fffa8e4c 100644
--- a/doc/api/resource_milestone_events.md
+++ b/doc/api/resource_milestone_events.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Resource milestone events API
 ---
 
-# Resource milestone events API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -27,7 +26,7 @@ GET /projects/:id/issues/:issue_iid/resource_milestone_events
 
 | Attribute   | Type           | Required | Description                                                                     |
 | ----------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid` | integer        | yes      | The IID of an issue                                                             |
 
 Example request:
@@ -111,7 +110,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description                                                                     |
 | ----------------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project |
 | `issue_iid`                   | integer        | yes      | The IID of an issue                                                             |
 | `resource_milestone_event_id` | integer        | yes      | The ID of a milestone event                                                     |
 
@@ -133,7 +132,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/resource_milestone_events
 
 | Attribute           | Type           | Required | Description                                                                     |
 | ------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request                                                      |
 
 Example request:
@@ -217,7 +216,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description                                                                     |
 | ----------------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid`           | integer        | yes      | The IID of a merge request                                                      |
 | `resource_milestone_event_id` | integer        | yes      | The ID of a milestone event                                                     |
 
diff --git a/doc/api/resource_state_events.md b/doc/api/resource_state_events.md
index 564d3f75b9141b98020e8f6276b97169ff6b189d..7791edc8520fb848f37525c8a524a7b7c1cf9ef0 100644
--- a/doc/api/resource_state_events.md
+++ b/doc/api/resource_state_events.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Resource state events API
 ---
 
-# Resource state events API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -30,7 +29,7 @@ GET /projects/:id/issues/:issue_iid/resource_state_events
 
 | Attribute   | Type           | Required | Description                                                                     |
 | ----------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid` | integer        | yes      | The IID of an issue                                                             |
 
 Example request:
@@ -88,7 +87,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description                                                                     |
 | ----------------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project |
 | `issue_iid`                   | integer        | yes      | The IID of an issue                                                             |
 | `resource_state_event_id`     | integer        | yes      | The ID of a state event                                                     |
 
@@ -130,7 +129,7 @@ GET /projects/:id/merge_requests/:merge_request_iid/resource_state_events
 
 | Attribute           | Type           | Required | Description                                                                     |
 | ------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project |
+| `id`                | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project |
 | `merge_request_iid` | integer        | yes      | The IID of a merge request                                                      |
 
 Example request:
@@ -188,7 +187,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description                                                                     |
 | ----------------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `merge_request_iid`           | integer        | yes      | The IID of a merge request                                                      |
 | `resource_state_event_id`     | integer        | yes      | The ID of a state event                                                     |
 
@@ -239,7 +238,7 @@ GET /groups/:id/epics/:epic_id/resource_state_events
 
 | Attribute   | Type           | Required | Description                                                                    |
 |-------------| -------------- | -------- |--------------------------------------------------------------------------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).   |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).   |
 | `epic_id`   | integer        | yes      | The ID of an epic.                                                              |
 
 Example request:
@@ -297,7 +296,7 @@ Parameters:
 
 | Attribute                 | Type           | Required | Description                                                                   |
 |---------------------------| -------------- | -------- |-------------------------------------------------------------------------------|
-| `id`                      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths).  |
+| `id`                      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths).  |
 | `epic_id`                 | integer        | yes      | The ID of an epic.                                                           |
 | `resource_state_event_id` | integer        | yes      | The ID of a state event.                                                       |
 
diff --git a/doc/api/resource_weight_events.md b/doc/api/resource_weight_events.md
index 330dff81e7f18b17d874dcfe5def723e01387da9..65affc439a7fe3899894089daa8082771bde9d1b 100644
--- a/doc/api/resource_weight_events.md
+++ b/doc/api/resource_weight_events.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Project Management
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Resource weight events API
 ---
 
-# Resource weight events API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -26,7 +25,7 @@ GET /projects/:id/issues/:issue_iid/resource_weight_events
 
 | Attribute   | Type           | Required | Description                                                                     |
 | ----------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `issue_iid` | integer        | yes      | The IID of an issue                                                             |
 
 Example request:
@@ -82,7 +81,7 @@ Parameters:
 
 | Attribute                     | Type           | Required | Description                                                                     |
 | ----------------------------- | -------------- | -------- | ------------------------------------------------------------------------------- |
-| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project |
+| `id`                          | integer/string | yes      | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project |
 | `issue_iid`                   | integer        | yes      | The IID of an issue                                                             |
 | `resource_weight_event_id`    | integer        | yes      | The ID of a weight event                                                     |
 
diff --git a/doc/api/rest/index.md b/doc/api/rest/_index.md
similarity index 99%
rename from doc/api/rest/index.md
rename to doc/api/rest/_index.md
index 0f5e0b78b09e045ddb50928460079fda761009a1..6a9ac7bdddf8314fa62822b22c800c65ea9b5c2e 100644
--- a/doc/api/rest/index.md
+++ b/doc/api/rest/_index.md
@@ -3,10 +3,9 @@ stage: Foundations
 group: Import and Integrate
 description: Programmatic interaction with GitLab.
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: REST API
 ---
 
-# REST API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/rest/authentication.md b/doc/api/rest/authentication.md
index eaa577ae51e23eddc34bbaf49f158fbd4e0cbc03..39508871f5b85c78c35f9ebd4f326675389add5d 100644
--- a/doc/api/rest/authentication.md
+++ b/doc/api/rest/authentication.md
@@ -3,10 +3,9 @@ stage: Foundations
 group: Import and Integrate
 description: Programmatic interaction with GitLab.
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: REST API authentication
 ---
 
-# REST API authentication
-
 Most API requests require authentication, or return only public data when authentication isn't
 provided. When authentication is not required, the documentation for each endpoint specifies this.
 For example, the [`/projects/:id` endpoint](../projects.md#get-a-single-project) does not require
diff --git a/doc/api/rest/deprecations.md b/doc/api/rest/deprecations.md
index 65044386d025763f278d29c8b2e0dc2369c029cf..10f3f1af02d5a0344281529b8b32979e437381f6 100644
--- a/doc/api/rest/deprecations.md
+++ b/doc/api/rest/deprecations.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: REST API deprecations and removals
 ---
 
-# REST API deprecations and removals
-
 The following API changes will occur between REST API v4 and v5.
 No date is set for this upgrade.
 
diff --git a/doc/api/rest/third_party_clients.md b/doc/api/rest/third_party_clients.md
index e94c7835f72aadc0c80af8db2956b5cb34f7fb03..a2a37184b09a89ed4ef6f580683aaf722d7d7e22 100644
--- a/doc/api/rest/third_party_clients.md
+++ b/doc/api/rest/third_party_clients.md
@@ -3,10 +3,9 @@ stage: Foundations
 group: Import and Integrate
 description: Programmatic interaction with GitLab.
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: REST API third-party clients
 ---
 
-# REST API third-party clients
-
 DETAILS:
 **Tier:** Free
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/rest/troubleshooting.md b/doc/api/rest/troubleshooting.md
index edd30f05dde9c4115c6f1f21cfe147377bc6d652..1b2b2c928315e922b01b4f7c3c31b87442fd098a 100644
--- a/doc/api/rest/troubleshooting.md
+++ b/doc/api/rest/troubleshooting.md
@@ -3,10 +3,9 @@ stage: Foundations
 group: Import and Integrate
 description: Programmatic interaction with GitLab.
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: REST API troubleshooting
 ---
 
-# REST API troubleshooting
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/runners.md b/doc/api/runners.md
index e4b2e2d03767571d66a3deddd8cfec4a089b3787..1df8661dac38090ea9c05b37ff1f9124c61f2303 100644
--- a/doc/api/runners.md
+++ b/doc/api/runners.md
@@ -2,17 +2,16 @@
 stage: Verify
 group: Runner
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Runners API
 ---
 
-# Runners API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
 
 This page describes endpoints for runners registered to an instance. To create a runner linked to the current user, see [Create a runner](users.md#create-a-runner-linked-to-a-user).
 
-[Pagination](rest/index.md#pagination) is available on the following API endpoints (they return 20 items by default):
+[Pagination](rest/_index.md#pagination) is available on the following API endpoints (they return 20 items by default):
 
 ```plaintext
 GET /runners
@@ -230,7 +229,7 @@ Example response:
 ]
 ```
 
-To view more than the first 20 runners, use [pagination](rest/index.md#pagination).
+To view more than the first 20 runners, use [pagination](rest/_index.md#pagination).
 
 ## Get runner's details
 
@@ -604,7 +603,7 @@ GET /projects/:id/runners?tag_list=tag1,tag2
 
 | Attribute        | Type           | Required | Description                                                                                                                                                                                                          |
 |------------------|----------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`             | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths)                                                                                                  |
+| `id`             | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths)                                                                                                  |
 | `scope`          | string         | no       | Deprecated: Use `type` or `status` instead. The scope of runners to return, one of: `active`, `paused`, `online` and `offline`; showing all runners if none provided                                                 |
 | `type`           | string         | no       | The type of runners to return, one of: `instance_type`, `group_type`, `project_type`                                                                                                                                 |
 | `status`         | string         | no       | The status of runners to return, one of: `online`, `offline`, `stale`, or `never_contacted`.<br/>Other possible values are the deprecated `active` and `paused`.<br/>Requesting `offline` runners might also return `stale` runners because `stale` is included in `offline`. |
@@ -679,7 +678,7 @@ POST /projects/:id/runners
 
 | Attribute   | Type    | Required | Description         |
 |-------------|---------|----------|---------------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `runner_id` | integer | yes      | The ID of a runner  |
 
 ```shell
@@ -729,7 +728,7 @@ DELETE /projects/:id/runners/:runner_id
 
 | Attribute   | Type    | Required | Description         |
 |-------------|---------|----------|---------------------|
-| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) |
+| `id`        | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) |
 | `runner_id` | integer | yes      | The ID of a runner  |
 
 ```shell
diff --git a/doc/api/saml.md b/doc/api/saml.md
index 899646b2e52a5aa6e9a0f98da66f51369382eee8..e337f69eb680c57f34e1a07756cbe3995f19f2a3 100644
--- a/doc/api/saml.md
+++ b/doc/api/saml.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: SAML API
 ---
 
-# SAML API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ Supported attributes:
 
 | Attribute         | Type    | Required | Description           |
 |:------------------|:--------|:---------|:----------------------|
-| `id`              | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`              | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following
 response attributes:
@@ -67,7 +66,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description               |
 | --------- | -------------- | -------- | ------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `uid`     | string         | yes      | External UID of the user. |
 
 Example request:
@@ -101,7 +100,7 @@ Supported attributes:
 
 | Attribute | Type   | Required | Description               |
 | --------- | ------ | -------- | ------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `uid`     | string | yes      | External UID of the user. |
 
 Example request:
@@ -124,7 +123,7 @@ Supported attributes:
 
 | Attribute | Type    | Required | Description               |
 | --------- | ------- | -------- | ------------------------- |
-| `id`      | integer | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `uid`     | string  | yes      | External UID of the user. |
 
 Example request:
@@ -178,7 +177,7 @@ Supported attributes:
 
 | Attribute | Type           | Required | Description |
 |:----------|:---------------|:---------|:------------|
-| `id`      | integer/string | yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following response attributes:
 
@@ -223,7 +222,7 @@ Supported attributes:
 
 | Attribute         | Type           | Required | Description |
 |:------------------|:---------------|:---------|:------------|
-| `id`              | integer/string | yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`              | integer/string | yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `saml_group_name` | string         | yes      | Name of the SAML group. |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following response attributes:
@@ -262,7 +261,7 @@ Supported attributes:
 
 | Attribute         | Type              | Required | Description |
 |:------------------|:------------------|:---------|:------------|
-| `id`              | integer or string | yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`              | integer or string | yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `saml_group_name` | string            | yes      | Name of the SAML group. |
 | `access_level`    | integer           | yes      | [Role (`access_level`)](members.md#roles) for members of the SAML group. |
 | `member_role_id`  | integer           | no       | [Member Role ID (`member_role_id`)](member_roles.md) for members of the SAML group. |
@@ -303,7 +302,7 @@ Supported attributes:
 
 | Attribute         | Type           | Required | Description |
 |:------------------|:---------------|:---------|:------------|
-| `id`              | integer/string | yes      | ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`              | integer/string | yes      | ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `saml_group_name` | string         | yes      | Name of the SAML group. |
 
 Example request:
diff --git a/doc/api/scim.md b/doc/api/scim.md
index bf5558598f3e6cee8e6232598fb51250e9a73c8b..21694eba2bed8a5852cf67b74241949ad2d85271 100644
--- a/doc/api/scim.md
+++ b/doc/api/scim.md
@@ -2,8 +2,8 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: SCIM API
 ---
-# SCIM API
 
 DETAILS:
 **Tier:** Premium, Ultimate
@@ -42,7 +42,7 @@ Supported attributes:
 
 | Attribute         | Type    | Required | Description           |
 |:------------------|:--------|:---------|:----------------------|
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 
 If successful, returns [`200`](rest/troubleshooting.md#status-codes) and the following
 response attributes:
@@ -84,7 +84,7 @@ Supported attributes:
 
 | Attribute | Type    | Required | Description               |
 | --------- | ------- | -------- | ------------------------- |
-| `id`      | integer | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `uid`     | string  | yes      | External UID of the user. |
 
 Example request:
@@ -121,7 +121,7 @@ Parameters:
 
 | Attribute | Type   | Required | Description               |
 | --------- | ------ | -------- | ------------------------- |
-| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths) |
 | `uid`     | string | yes      | External UID of the user. |
 
 Example request:
@@ -144,7 +144,7 @@ Supported attributes:
 
 | Attribute | Type    | Required | Description               |
 | --------- | ------- | -------- | ------------------------- |
-| `id`      | integer | yes      | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`      | integer | yes      | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `uid`     | string  | yes      | External UID of the user. |
 
 Example request:
diff --git a/doc/api/search.md b/doc/api/search.md
index b86db32030598f53003d3b43d7a7f04d7a192185..875dfe0c916a34cab9da5a2593ab6a4beba4c50c 100644
--- a/doc/api/search.md
+++ b/doc/api/search.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Global Search
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Search API
 ---
 
-# Search API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -459,7 +458,7 @@ GET /groups/:id/search
 
 | Attribute | Type | Required | Description  |
 | --------- | ---- | -------- | -------------|
-| `id`                | integer or string   | Yes | The ID or [URL-encoded path of the group](rest/index.md#namespaced-paths). |
+| `id`                | integer or string   | Yes | The ID or [URL-encoded path of the group](rest/_index.md#namespaced-paths). |
 | `scope`       | string   | Yes | The scope to search in. Values include `projects`, `issues`, `merge_requests`, `milestones`, and `users`. Additional scopes are `wiki_blobs`, `commits`, `blobs`, and `notes`. |
 | `search`      | string   | Yes | The search term. |
 | `confidential` | boolean   | No | Filter by confidentiality. Supports only `issues` scope; other scopes are ignored. |
@@ -854,7 +853,7 @@ GET /projects/:id/search
 
 | Attribute | Type | Required | Description |
 | --------- | ---- | -------- | ------------|
-| `id` | integer or string | Yes | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id` | integer or string | Yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `scope`       | string   | Yes | The scope to search in. Values include `issues`, `merge_requests`, `milestones`, and `users`. Additional scopes are `wiki_blobs`, `commits`, `blobs`, and `notes`. |
 | `search`      | string   | Yes | The search term. |
 | `confidential` | boolean   | No | Filter by confidentiality. Supports `issues` scope; other scopes are ignored. |
diff --git a/doc/api/search_admin.md b/doc/api/search_admin.md
index f3c9dad40e77a9201abdf84fab57a8a2949a85a0..bbb13e59484d6e97cd2de1113d9d087e977c6984 100644
--- a/doc/api/search_admin.md
+++ b/doc/api/search_admin.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Global Search
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Search admin API
 ---
 
-# Search admin API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/secure_files.md b/doc/api/secure_files.md
index eacffb7eb21d1c2c97014e2c9735fa03838d14f2..c1ad8db02ffd62168d02317b2fbf82f55a0e5593 100644
--- a/doc/api/secure_files.md
+++ b/doc/api/secure_files.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Pipeline Security
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project-level Secure Files API
 ---
 
-# Project-level Secure Files API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ Supported attributes:
 
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
-| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -95,7 +94,7 @@ Supported attributes:
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
 | `id`         | integer        | Yes      | The ID of a secure file. |
-| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -131,7 +130,7 @@ Supported attributes:
 |-----------------|----------------|----------|-------------|
 | `file`          | file           | Yes      | The file being uploaded (5 MB limit). |
 | `name`          | string         | Yes      | The name of the file being uploaded. The filename must be unique in the project. |
-| `project_id`    | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `project_id`    | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -167,7 +166,7 @@ Supported attributes:
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
 | `id`         | integer        | Yes      | The ID of a secure file. |
-| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
@@ -188,7 +187,7 @@ Supported attributes:
 | Attribute    | Type           | Required | Description |
 |--------------|----------------|----------|-------------|
 | `id`         | integer        | Yes      | The ID of a secure file. |
-| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `project_id` | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 
 Example request:
 
diff --git a/doc/api/settings.md b/doc/api/settings.md
index bf9700ab88fe5dd75b604ed4eae3d8ae244154f7..af77eeb0b5010806b77c1be9888dc79cae2c2961 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Application settings API
 ---
 
-# Application settings API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/sidekiq_metrics.md b/doc/api/sidekiq_metrics.md
index 498cf8c359097e8aa48b83a4e8fcf75946337ba3..f52d0f384b4187348c447dc0ec4efbb6d09c9435 100644
--- a/doc/api/sidekiq_metrics.md
+++ b/doc/api/sidekiq_metrics.md
@@ -2,10 +2,9 @@
 stage: Systems
 group: Distribution
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Sidekiq Metrics API
 ---
 
-# Sidekiq Metrics API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/snippet_repository_storage_moves.md b/doc/api/snippet_repository_storage_moves.md
index 2381b1a917131690f15f6fbfac728b6784c7bf61..f0c25e445affc6ac6a42eb6f903fc380669ecd14 100644
--- a/doc/api/snippet_repository_storage_moves.md
+++ b/doc/api/snippet_repository_storage_moves.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Snippet repository storage moves API
 ---
 
-# Snippet repository storage moves API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
@@ -43,7 +42,7 @@ GET /snippet_repository_storage_moves
 ```
 
 By default, `GET` requests return 20 results at a time because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 Example request:
 
@@ -86,7 +85,7 @@ GET /snippets/:snippet_id/repository_storage_moves
 ```
 
 By default, `GET` requests return 20 results at a time because the API results
-are [paginated](rest/index.md#pagination).
+are [paginated](rest/_index.md#pagination).
 
 Supported attributes:
 
diff --git a/doc/api/snippets.md b/doc/api/snippets.md
index 0ba850b9b33b4f5f15d3016a14b27db71f11238b..13d046336e9d9f909eaf45cdd5d1172793e092e7 100644
--- a/doc/api/snippets.md
+++ b/doc/api/snippets.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Snippets API
 ---
 
-# Snippets API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/statistics.md b/doc/api/statistics.md
index b951a7ee50711f8e2f84addd9d37c942d2b65b13..c6b0606cde5a638c2350692a4d244242450a06ed 100644
--- a/doc/api/statistics.md
+++ b/doc/api/statistics.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Application statistics API
 ---
 
-# Application statistics API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/status_checks.md b/doc/api/status_checks.md
index 4bdf30a10eda91305c472d8a8df81d42de84abf2..d76c2c7ee7bddf78998e49c3d476aaf09f8680fd 100644
--- a/doc/api/status_checks.md
+++ b/doc/api/status_checks.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Policies
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: External Status Checks API
 ---
 
-# External Status Checks API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/suggestions.md b/doc/api/suggestions.md
index 1223b1840992757bc6fdf9698d8a4fe792c9a5b9..b53a8d2e07627da5d5875b64a5258abd3f59a65c 100644
--- a/doc/api/suggestions.md
+++ b/doc/api/suggestions.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
+title: Suggest Changes API
 ---
 
-# Suggest Changes API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/system_hooks.md b/doc/api/system_hooks.md
index 7fdcd1842017494047e5bac737fa0edcbbf9ab22..c95313c1cd559eb21c27b34373d32fbfbc50c67a 100644
--- a/doc/api/system_hooks.md
+++ b/doc/api/system_hooks.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Import and Integrate
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: System hooks API
 ---
 
-# System hooks API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed
diff --git a/doc/api/tags.md b/doc/api/tags.md
index 865d21de1457c02f89f9767d6f3d34fa5dddfd19..40304fb1cef70c7c8e8bf272a9f2b24eece51cdf 100644
--- a/doc/api/tags.md
+++ b/doc/api/tags.md
@@ -3,10 +3,9 @@ stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 description: "Documentation for the REST API for Git tags in GitLab."
+title: Tags API
 ---
 
-# Tags API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -31,7 +30,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description |
 |------------|-------------------|----------|-------------|
-| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `order_by` | string            | no       | Return tags ordered by `name`, `updated`, or `version`. Default is `updated`. |
 | `sort`     | string            | no       | Return tags sorted in `asc` or `desc` order. Default is `desc`. |
 | `search`   | string            | no       | Return a list of tags matching the search criteria. You can use `^term` and `term$` to find tags that begin and end with `term`. No other regular expressions are supported. |
@@ -90,7 +89,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description |
 |------------|-------------------|----------|-------------|
-| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `tag_name` | string            | yes      | The name of a tag. |
 
 ```shell
@@ -141,7 +140,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description |
 |------------|-------------------|----------|-------------|
-| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `tag_name` | string            | yes      | The name of a tag. |
 | `ref`      | string            | yes      | Create a tag from a commit SHA, another tag name, or branch name. |
 | `message`  | string            | no       | Create an annotated tag. |
@@ -206,7 +205,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description |
 |------------|-------------------|----------|-------------|
-| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `tag_name` | string            | yes      | The name of a tag. |
 
 ## Get X.509 signature of a tag
@@ -224,7 +223,7 @@ Parameters:
 
 | Attribute  | Type              | Required | Description |
 |------------|-------------------|----------|-------------|
-| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`       | integer or string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `tag_name` | string            | yes      | The name of a tag. |
 
 ```shell
diff --git a/doc/api/templates/dockerfiles.md b/doc/api/templates/dockerfiles.md
index 12b315cd31bb5c0e29c5e5931bfee1695ae594c8..df109d12f959bb46efb64ceb43f2fd068528dd01 100644
--- a/doc/api/templates/dockerfiles.md
+++ b/doc/api/templates/dockerfiles.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Dockerfiles API
 ---
 
-# Dockerfiles API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/templates/gitignores.md b/doc/api/templates/gitignores.md
index 01d10a5afe063fab56b989347dcd94fa10c486b8..54a6564c93c5bf27fd1c8d85eecf5284ebb37aa8 100644
--- a/doc/api/templates/gitignores.md
+++ b/doc/api/templates/gitignores.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: '.gitignore API'
 ---
 
-# .gitignore API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/templates/gitlab_ci_ymls.md b/doc/api/templates/gitlab_ci_ymls.md
index 724ea3689023e936f7e0be92db19c7021d0ad2f9..74fedb6b5b48bd3944cc60c32bdc35649a984267 100644
--- a/doc/api/templates/gitlab_ci_ymls.md
+++ b/doc/api/templates/gitlab_ci_ymls.md
@@ -2,10 +2,9 @@
 stage: Verify
 group: Pipeline Authoring
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: GitLab CI YAML API
 ---
 
-# GitLab CI YAML API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/templates/licenses.md b/doc/api/templates/licenses.md
index 1b38a138704eb6731a52acede5651e485d7c4721..355c88c152e51233280a071447fceee3a21180dd 100644
--- a/doc/api/templates/licenses.md
+++ b/doc/api/templates/licenses.md
@@ -2,10 +2,9 @@
 stage: Application Security Testing
 group: Composition Analysis
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Licenses API
 ---
 
-# Licenses API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/todos.md b/doc/api/todos.md
index 7a2a01c7ad0bca0adb29188caffe13e16295b834..06b6eccf7e032f6033d5463f3a118d000acbfb0b 100644
--- a/doc/api/todos.md
+++ b/doc/api/todos.md
@@ -2,10 +2,9 @@
 stage: Foundations
 group: Personal Productivity
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: GitLab To-Do List API
 ---
 
-# GitLab To-Do List API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/topics.md b/doc/api/topics.md
index 6c91f4c8d959579137d45b956c6dfc80726cfe31..00ff45d9e7d49314cb673966323ce3a77529c1b9 100644
--- a/doc/api/topics.md
+++ b/doc/api/topics.md
@@ -2,10 +2,9 @@
 stage: Tenant Scale
 group: Organizations
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Topics API
 ---
 
-# Topics API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/usage_data.md b/doc/api/usage_data.md
index 3fba8be204970e0b3f638d4b027ede841fda5df8..e8e15d6b8db123b3ffe481a8f95f6c92fd57b9d3 100644
--- a/doc/api/usage_data.md
+++ b/doc/api/usage_data.md
@@ -2,10 +2,9 @@
 stage: Monitor
 group: Analytics Instrumentation
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Service Ping API
 ---
 
-# Service Ping API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/user_email_addresses.md b/doc/api/user_email_addresses.md
index c9dc61536c712c78d748767142bda40e20748d2a..62419cba70b27b3a50352e10c4723aed76b8b951 100644
--- a/doc/api/user_email_addresses.md
+++ b/doc/api/user_email_addresses.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: User email addresses API
 ---
 
-# User email addresses API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/user_follow_unfollow.md b/doc/api/user_follow_unfollow.md
index 95d505e94fb24a3bb17cdb21717d8bb54e2a9e3b..7ad856d9a41d95a1ac90d0ff3245cd15e5f8c8d2 100644
--- a/doc/api/user_follow_unfollow.md
+++ b/doc/api/user_follow_unfollow.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: User follow and unfollow API
 ---
 
-# User follow and unfollow API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/user_keys.md b/doc/api/user_keys.md
index 98a70d79000ab015f2d14998a94214e543f0c9eb..34bee2d46fb8942af1e133a9b4029819b0b82fa8 100644
--- a/doc/api/user_keys.md
+++ b/doc/api/user_keys.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: User SSH and GPG keys API
 ---
 
-# User SSH and GPG keys API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -16,7 +15,7 @@ Use this API to interact with SSH and GPG keys for users. For more information,
 
 Lists all SSH keys for your user account.
 
-Use the `page` and `per_page` [pagination parameters](rest/index.md#offset-based-pagination) to filter the results.
+Use the `page` and `per_page` [pagination parameters](rest/_index.md#offset-based-pagination) to filter the results.
 
 Prerequisites:
 
diff --git a/doc/api/user_moderation.md b/doc/api/user_moderation.md
index 82e1001bf21653f3256e7f01c80b17690bd599f9..00e94dd18cf9e223255b7b86dd66e6b916e79e41 100644
--- a/doc/api/user_moderation.md
+++ b/doc/api/user_moderation.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: User moderation API
 ---
 
-# User moderation API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/user_service_accounts.md b/doc/api/user_service_accounts.md
index fd3ab197eaf8bbd7a4a837b6cc1dffd3d1282e36..3ae4e8454f57dec9e843a2a0feadb13e37fc1db4 100644
--- a/doc/api/user_service_accounts.md
+++ b/doc/api/user_service_accounts.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Service account users API
 ---
 
-# Service account users API
-
 DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
@@ -22,7 +21,7 @@ DETAILS:
 
 Lists all service account users.
 
-Use the `page` and `per_page` [pagination parameters](rest/index.md#offset-based-pagination) to filter the results.
+Use the `page` and `per_page` [pagination parameters](rest/_index.md#offset-based-pagination) to filter the results.
 
 Prerequisites:
 
diff --git a/doc/api/user_tokens.md b/doc/api/user_tokens.md
index ff40819e3bd8a3ce018b0cf0141adc61f5a459f4..11ca1db6b1112dd7d582c12299f676c0331982b1 100644
--- a/doc/api/user_tokens.md
+++ b/doc/api/user_tokens.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: User tokens API
 ---
 
-# User tokens API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
@@ -122,7 +121,7 @@ Example response:
 
 Lists all impersonation tokens for a given user.
 
-Use the `page` and `per_page` [pagination parameters](rest/index.md#offset-based-pagination) to filter the results.
+Use the `page` and `per_page` [pagination parameters](rest/_index.md#offset-based-pagination) to filter the results.
 
 Prerequisites:
 
diff --git a/doc/api/users.md b/doc/api/users.md
index 4fe4e3f2a55cc60a51bbaa440415b2b266ebd557..a800d7adf0d6c09755c02b6e5ab93e21995b1cbe 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -2,10 +2,9 @@
 stage: Software Supply Chain Security
 group: Authentication
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Users API
 ---
 
-# Users API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -17,7 +16,7 @@ You can [manage your account](../user/profile/index.md) and
 
 Get a list of users.
 
-Takes [pagination parameters](rest/index.md#offset-based-pagination) `page` and `per_page` to restrict the list of users.
+Takes [pagination parameters](rest/_index.md#offset-based-pagination) `page` and `per_page` to restrict the list of users.
 
 ### As a regular user
 
@@ -70,7 +69,7 @@ Example response:
 ]
 ```
 
-This endpoint supports [keyset pagination](rest/index.md#keyset-based-pagination). In GitLab 17.0 and later, keyset pagination is required for responses of 50,000 and above.
+This endpoint supports [keyset pagination](rest/_index.md#keyset-based-pagination). In GitLab 17.0 and later, keyset pagination is required for responses of 50,000 and above.
 
 You can also use `?search=` to search for users by name, username, or public email. For example, `/users?search=John`. When you search for a:
 
diff --git a/doc/api/version.md b/doc/api/version.md
index e1c16ed03c06fadc0b6aa33ff188a965ea243553..53fd634ba158d592bf1bebe121ee3600bd1a2432 100644
--- a/doc/api/version.md
+++ b/doc/api/version.md
@@ -2,10 +2,9 @@
 stage: Deploy
 group: Environments
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Version API
 ---
 
-# Version API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/vulnerabilities.md b/doc/api/vulnerabilities.md
index 61cc104588bc57ca0171f0d3a2ca50573f0aa1fb..d48c6d2c21c13ad39c3891bb1c8938900f7906ff 100644
--- a/doc/api/vulnerabilities.md
+++ b/doc/api/vulnerabilities.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Vulnerabilities API
 ---
 
-# Vulnerabilities API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/vulnerability_exports.md b/doc/api/vulnerability_exports.md
index 1ccc22062f9a9d69078da3e88275600cee1866ba..031b27b452a67986908f1d3af047fe5007c10d07 100644
--- a/doc/api/vulnerability_exports.md
+++ b/doc/api/vulnerability_exports.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Vulnerability export API
 ---
 
-# Vulnerability export API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -28,7 +27,7 @@ POST /security/projects/:id/vulnerability_exports
 
 | Attribute           | Type              | Required   | Description                                                                                                                  |
 | ------------------- | ----------------- | ---------- | -----------------------------------------------------------------------------------------------------------------------------|
-| `id`                | integer or string | yes        | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the project which the authenticated user is a member of |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the project which the authenticated user is a member of |
 
 ```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/security/projects/1/vulnerability_exports"
@@ -71,7 +70,7 @@ POST /security/groups/:id/vulnerability_exports
 
 | Attribute           | Type              | Required   | Description                                                                                                                  |
 | ------------------- | ----------------- | ---------- | -----------------------------------------------------------------------------------------------------------------------------|
-| `id`                | integer or string | yes        | The ID or [URL-encoded path](rest/index.md#namespaced-paths) of the group which the authenticated user is a member of |
+| `id`                | integer or string | yes        | The ID or [URL-encoded path](rest/_index.md#namespaced-paths) of the group which the authenticated user is a member of |
 
 ```shell
 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/security/groups/1/vulnerability_exports"
diff --git a/doc/api/vulnerability_findings.md b/doc/api/vulnerability_findings.md
index 822473ba18407ab6afeeba172c78c66b95bfcb02..ce4d47935f09cc3931a7bf888200a129c98e8a43 100644
--- a/doc/api/vulnerability_findings.md
+++ b/doc/api/vulnerability_findings.md
@@ -2,10 +2,9 @@
 stage: Security Risk Management
 group: Security Insights
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Vulnerability Findings API
 ---
 
-# Vulnerability Findings API
-
 DETAILS:
 **Tier:** Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -33,7 +32,7 @@ across GitLab releases. Use the
 By default, `GET` requests return 20 results at a time because the API results
 are paginated.
 
-Read more on [pagination](rest/index.md#pagination).
+Read more on [pagination](rest/_index.md#pagination).
 
 ## List project vulnerability findings
 
@@ -52,7 +51,7 @@ GET /projects/:id/vulnerability_findings?pipeline_id=42
 
 | Attribute     | Type           | Required | Description                                                                                                                                                                         |
 | ------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths) which the authenticated user is a member of.                                                        |
+| `id`          | integer/string | yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) which the authenticated user is a member of.                                                           |
 | `report_type` | string array   | no       | Returns vulnerability findings belonging to specified report type. Valid values: `sast`, `dast`, `dependency_scanning`, or `container_scanning`. Defaults to all.                   |
 | `scope`       | string         | no       | Returns vulnerability findings for the given scope: `all` or `dismissed`. Defaults to `dismissed`.                                                                                  |
 | `severity`    | string array   | no       | Returns vulnerability findings belonging to specified severity level: `info`, `unknown`, `low`, `medium`, `high`, or `critical`. Defaults to all.                                   |
diff --git a/doc/api/web_commits.md b/doc/api/web_commits.md
index 332dd7322e51dd2dd503df4981881943eede4be8..acd56d5502991a8905c985c75f0f5ceb9a45fcb7 100644
--- a/doc/api/web_commits.md
+++ b/doc/api/web_commits.md
@@ -2,10 +2,9 @@
 stage: Create
 group: Source Code
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Web Commits API
 ---
 
-# Web Commits API
-
 DETAILS:
 **Tier:** Free
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
diff --git a/doc/api/wikis.md b/doc/api/wikis.md
index c6fd47943bc691101778bff1fa1721cd928ee93a..886f2f2c2302b198027897554eab06f57ffda587 100644
--- a/doc/api/wikis.md
+++ b/doc/api/wikis.md
@@ -2,10 +2,9 @@
 stage: Plan
 group: Knowledge
 info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
+title: Project wikis API
 ---
 
-# Project wikis API
-
 DETAILS:
 **Tier:** Free, Premium, Ultimate
 **Offering:** GitLab.com, GitLab Self-Managed, GitLab Dedicated
@@ -23,7 +22,7 @@ GET /projects/:id/wikis
 
 | Attribute      | Type           | Required | Description |
 | -------------- | -------------- | -------- | ----------- |
-| `id`           | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`           | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `with_content` | boolean        | No       | Include pages' content. |
 
 ```shell
@@ -67,7 +66,7 @@ GET /projects/:id/wikis/:slug
 
 | Attribute     | Type           | Required | Description |
 | ------------- | -------------- | -------- | ----------- |
-| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`          | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `slug`        | string         | Yes      | URL encoded slug (a unique string) of the wiki page, such as `dir%2Fpage_name`. |
 | `render_html` | boolean        | No       | Return the rendered HTML of the wiki page. |
 | `version`     | string         | No       | Wiki page version SHA. |
@@ -98,7 +97,7 @@ POST /projects/:id/wikis
 
 | Attribute | Type           | Required | Description |
 | ----------| -------------- | -------- | ----------- |
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `content` | string         | Yes      | The content of the wiki page. |
 | `title`   | string         | Yes      | The title of the wiki page. |
 | `format`  | string         | No       | The format of the wiki page. Available formats are: `markdown` (default), `rdoc`, `asciidoc`, and `org`. |
@@ -130,7 +129,7 @@ PUT /projects/:id/wikis/:slug
 
 | Attribute | Type           | Required                          | Description |
 | --------- | -------        | --------------------------------- | ----------- |
-| `id`      | integer/string | Yes                               | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes                               | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `content` | string         | Yes, if `title` is not provided   | The content of the wiki page. |
 | `title`   | string         | Yes, if `content` is not provided | The title of the wiki page. |
 | `format`  | string         | No                                | The format of the wiki page. Available formats are: `markdown` (default), `rdoc`, `asciidoc`, and `org`. |
@@ -163,7 +162,7 @@ DELETE /projects/:id/wikis/:slug
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `slug`    | string         | Yes      | URL-encoded slug (a unique string) of the wiki page, such as `dir%2Fpage_name`. |
 
 ```shell
@@ -183,7 +182,7 @@ POST /projects/:id/wikis/attachments
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/index.md#namespaced-paths). |
+| `id`      | integer/string | Yes      | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths). |
 | `file`    | string         | Yes      | The attachment to be uploaded. |
 | `branch`  | string         | No       | The name of the branch. Defaults to the wiki repository default branch. |
 
diff --git a/doc/ci/components/index.md b/doc/ci/components/index.md
index c0f27a6cd1449c0963a92a11d062fa336b4e0794..f67a9f669c08d29d8279e34c5bd356c94f917bd1 100644
--- a/doc/ci/components/index.md
+++ b/doc/ci/components/index.md
@@ -295,7 +295,7 @@ and helps ensure consistent behavior.
 
 Test changes in a CI/CD pipeline (like any other project) by creating a `.gitlab-ci.yml`
 in the root directory. Make sure to test both the behavior and potential side-effects
-of the component. You can use the [GitLab API](../../api/rest/index.md) if needed.
+of the component. You can use the [GitLab API](../../api/rest/_index.md) if needed.
 
 For example:
 
@@ -630,7 +630,7 @@ Prerequisites:
   - Have at least one [CI/CD component in the `templates/` directory](#directory-structure)
     for the commit SHA of the tag being released.
 - You must use the [`release` keyword](../yaml/index.md#release) in a CI/CD job to create the release,
-  not the [Releases API](../../api/releases/index.md#create-a-release).
+  not the [Releases API](../../api/releases/_index.md#create-a-release).
 
 To publish a new version of the component to the catalog:
 
diff --git a/doc/ci/jobs/ci_job_token.md b/doc/ci/jobs/ci_job_token.md
index 9e2985597dc3ef17b26957ec90b95eec572f3401..5bfdbee6f0da431f7950960c61d7fdc2dc3b78e8 100644
--- a/doc/ci/jobs/ci_job_token.md
+++ b/doc/ci/jobs/ci_job_token.md
@@ -46,7 +46,7 @@ The CI/CD job token can only access the following features and API endpoints:
 | [Pipeline triggers](../../api/pipeline_triggers.md)                                                   | Used with the `token=` parameter to [trigger a multi-project pipeline](../pipelines/downstream_pipelines.md#trigger-a-multi-project-pipeline-by-using-the-api). |
 | [Update pipeline metadata API endpoint](../../api/pipelines.md#update-pipeline-metadata)              | To update pipeline metadata. |
 | [Release links API](../../api/releases/links.md)                                                      |         |
-| [Releases API](../../api/releases/index.md)                                                           | `GET` requests are public by default. |
+| [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)                                                  |         |
diff --git a/doc/ci/pipelines/pipeline_efficiency.md b/doc/ci/pipelines/pipeline_efficiency.md
index 19d50f0c741210b5bc99b8f717e4ed63dcf0f9a1..6bac86dde433c736be1de5486bcc4b51d2650985 100644
--- a/doc/ci/pipelines/pipeline_efficiency.md
+++ b/doc/ci/pipelines/pipeline_efficiency.md
@@ -102,7 +102,7 @@ representation of pipeline health.
 
 Instance administrators have access to additional [performance metrics and self-monitoring](../../administration/monitoring/index.md).
 
-You can fetch specific pipeline health metrics from the [API](../../api/rest/index.md).
+You can fetch specific pipeline health metrics from the [API](../../api/rest/_index.md).
 External monitoring tools can poll the API and verify pipeline health or collect
 metrics for long term SLA analytics.
 
diff --git a/doc/ci/resource_groups/index.md b/doc/ci/resource_groups/index.md
index 5ba60b4abcf9c59e66e9221591ccc2af67e70f46..cfb2a20e10f24073d68f3515fba9065fbe1e3387 100644
--- a/doc/ci/resource_groups/index.md
+++ b/doc/ci/resource_groups/index.md
@@ -298,7 +298,7 @@ To get job information from the GraphQL API:
 
 1. Go to the pipeline details page.
 1. Select the **Jobs** tab and find the ID of the stuck job.
-1. Go to the [interactive GraphQL explorer](../../api/graphql/index.md#interactive-graphql-explorer).
+1. Go to the [interactive GraphQL explorer](../../api/graphql/_index.md#interactive-graphql-explorer).
 1. Run the following query:
 
    ```graphql
diff --git a/doc/ci/testing/code_quality_troubleshooting.md b/doc/ci/testing/code_quality_troubleshooting.md
index 942ddb03a43cb4f8a0639965eaaae0c12ef04dfd..26e78d97d016955e48cdd5d926587c074f3a25d7 100644
--- a/doc/ci/testing/code_quality_troubleshooting.md
+++ b/doc/ci/testing/code_quality_troubleshooting.md
@@ -185,7 +185,7 @@ To gain insight into the errors, you can execute a GraphQL query using the follo
 1. Go to the pipeline details page.
 1. Append `.json` to the URL.
 1. Copy the `iid` of the pipeline.
-1. Go to the [interactive GraphQL explorer](../../api/graphql/index.md#interactive-graphql-explorer).
+1. Go to the [interactive GraphQL explorer](../../api/graphql/_index.md#interactive-graphql-explorer).
 1. Run the following query:
 
    ```graphql
diff --git a/doc/development/ai_features/duo_chat.md b/doc/development/ai_features/duo_chat.md
index 9b9a36a4f5aa134594f50274e2008c6c252f8718..55e8555b1bb021dbf8e5760de5ed96e6fb87645d 100644
--- a/doc/development/ai_features/duo_chat.md
+++ b/doc/development/ai_features/duo_chat.md
@@ -393,7 +393,7 @@ Please keep in mind that the clientSubscriptionId must be unique for every reque
 ### Duo Chat GraphQL queries
 
 1. [Set up GitLab Duo Chat](#set-up-gitlab-duo-chat)
-1. Visit [GraphQL explorer](../../api/graphql/index.md#interactive-graphql-explorer).
+1. Visit [GraphQL explorer](../../api/graphql/_index.md#interactive-graphql-explorer).
 1. Execute the `aiAction` mutation. Here is an example:
 
    ```graphql
diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md
index 469cf42c71b74a9cf6735dbf6f199f3301a364f0..273f0dc6b8d802343e70262d21e23d162b80da7a 100644
--- a/doc/development/api_graphql_styleguide.md
+++ b/doc/development/api_graphql_styleguide.md
@@ -5,7 +5,7 @@ info: Any user with at least the Maintainer role can merge updates to this conte
 title: Backend GraphQL API guide
 ---
 
-This document contains style and technical guidance for engineers implementing the backend of the [GitLab GraphQL API](../api/graphql/index.md).
+This document contains style and technical guidance for engineers implementing the backend of the [GitLab GraphQL API](../api/graphql/_index.md).
 
 ## Relation to REST API
 
@@ -27,7 +27,7 @@ which is an accessible but shortened version of information in the [GraphQL spec
 ### Deep Dive
 
 In March 2019, Nick Thomas hosted a Deep Dive (GitLab team members only: `https://gitlab.com/gitlab-org/create-stage/issues/1`)
-on the GitLab [GraphQL API](../api/graphql/index.md) to share domain-specific knowledge
+on the GitLab [GraphQL API](../api/graphql/_index.md) to share domain-specific knowledge
 with anyone who may work in this part of the codebase in the future. You can find the
 <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
 [recording on YouTube](https://www.youtube.com/watch?v=-9L_1MWrjkg), and the slides on
@@ -93,7 +93,7 @@ a connection.
 
 ### Max complexity
 
-Complexity is explained [on our client-facing API page](../api/graphql/index.md#maximum-query-complexity).
+Complexity is explained [on our client-facing API page](../api/graphql/_index.md#maximum-query-complexity).
 
 Fields default to adding `1` to a query's complexity score, but developers can
 [specify a custom complexity](#field-complexity) when defining a field.
@@ -164,7 +164,7 @@ field :environments,
 ## Breaking changes
 
 The GitLab GraphQL API is [versionless](https://graphql.org/learn/best-practices/#versioning) which means
-developers must familiarize themselves with our [Deprecation and Removal process](../api/graphql/index.md#deprecation-and-removal-process).
+developers must familiarize themselves with our [Deprecation and Removal process](../api/graphql/_index.md#deprecation-and-removal-process).
 
 Breaking changes are:
 
@@ -190,7 +190,7 @@ See the [deprecating schema items](#deprecating-schema-items) section for how to
 ### Breaking change exemptions
 
 See the
-[GraphQL API breaking change exemptions documentation](../api/graphql/index.md#breaking-change-exemptions).
+[GraphQL API breaking change exemptions documentation](../api/graphql/_index.md#breaking-change-exemptions).
 
 ## Global IDs
 
@@ -205,7 +205,7 @@ See also:
 - [Exposing Global IDs](#exposing-global-ids).
 - [Mutation arguments](#object-identifier-arguments).
 - [Deprecating Global IDs](#deprecate-global-ids).
-- [Customer-facing Global ID documentation](../api/graphql/index.md#global-ids).
+- [Customer-facing Global ID documentation](../api/graphql/_index.md#global-ids).
 
 We have a custom scalar type (`Types::GlobalIDType`) which should be used as the
 type of input and output arguments when the value is a `GlobalID`. The benefits
@@ -548,7 +548,7 @@ field :tags,
 ### Field complexity
 
 The GitLab GraphQL API uses a _complexity_ score to limit performing overly complex queries.
-Complexity is described in [our client documentation](../api/graphql/index.md#maximum-query-complexity) on the topic.
+Complexity is described in [our client documentation](../api/graphql/_index.md#maximum-query-complexity) on the topic.
 
 Complexity limits are defined in [`app/graphql/gitlab_schema.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/graphql/gitlab_schema.rb).
 
@@ -732,7 +732,7 @@ Rather than removing fields, arguments, [enum values](#enums), or [mutations](#m
 they must be _deprecated_ instead.
 
 The deprecated parts of the schema can then be removed in a future release
-in accordance with the [GitLab deprecation process](../api/graphql/index.md#deprecation-and-removal-process).
+in accordance with the [GitLab deprecation process](../api/graphql/_index.md#deprecation-and-removal-process).
 
 To deprecate a schema item in GraphQL:
 
@@ -876,7 +876,7 @@ DEPRECATIONS = [
 ].freeze
 ```
 
-Then follow our regular [deprecation process](../api/graphql/index.md#deprecation-and-removal-process). To later remove
+Then follow our regular [deprecation process](../api/graphql/_index.md#deprecation-and-removal-process). To later remove
 support for the former argument style, remove the `Deprecation`:
 
 ```ruby
@@ -908,7 +908,7 @@ You can mark GraphQL schema items (fields, arguments, enum values, and mutations
 [experiments](../policy/development_stages_support.md#experiment).
 
 An item marked as an experiment is
-[exempt from the deprecation process](../api/graphql/index.md#breaking-change-exemptions) and can be
+[exempt from the deprecation process](../api/graphql/_index.md#breaking-change-exemptions) and can be
 removed at any time without notice. Mark an item as an experiment when it is subject to
 change and not ready for public use.
 
@@ -935,7 +935,7 @@ mount_mutation Mutations::Ci::JobArtifact::BulkDestroy, experiment: { milestone:
 
 Experimental GraphQL items is a custom GitLab feature that leverages GraphQL deprecations. An experimental item
 appears as deprecated in the GraphQL schema. Like all deprecated schema items, you can test an
-experimental field in the [interactive GraphQL explorer](../api/graphql/index.md#interactive-graphql-explorer) (GraphiQL).
+experimental field in the [interactive GraphQL explorer](../api/graphql/_index.md#interactive-graphql-explorer) (GraphiQL).
 However, be aware that the GraphiQL autocomplete editor doesn't suggest deprecated fields.
 
 The item shows as `experiment` in our generated GraphQL documentation and its GraphQL schema description.
@@ -2559,7 +2559,7 @@ This generated GraphQL documentation needs to be updated when the schema changes
 For information on generating GraphQL documentation and schema files, see
 [updating the schema documentation](rake_tasks.md#update-graphql-documentation-and-schema-definitions).
 
-To help our readers, you should also add a new page to our [GraphQL API](../api/graphql/index.md) documentation.
+To help our readers, you should also add a new page to our [GraphQL API](../api/graphql/_index.md) documentation.
 For guidance, see the [GraphQL API](documentation/graphql_styleguide.md) page.
 
 ## Include a changelog entry
diff --git a/doc/development/api_styleguide.md b/doc/development/api_styleguide.md
index 0c4fa3d7f047aa70d02f8528dc6c7d0f7437e6e2..1578dabfd4ecb581d86d5adf53ac0ffb1033224a 100644
--- a/doc/development/api_styleguide.md
+++ b/doc/development/api_styleguide.md
@@ -11,8 +11,8 @@ This style guide recommends best practices for API development.
 
 We offer two types of API to our customers:
 
-- [REST API](../api/rest/index.md)
-- [GraphQL API](../api/graphql/index.md)
+- [REST API](../api/rest/_index.md)
+- [GraphQL API](../api/graphql/_index.md)
 
 To reduce the technical burden of supporting two APIs in parallel,
 they should share implementations as much as possible.
@@ -77,7 +77,7 @@ end
 We must not make breaking changes to our REST API v4, even in major GitLab releases.
 
 Our REST API maintains its own versioning independent of GitLab versioning.
-The current REST API version is `4`. [We commit to follow semantic versioning for our REST API](../api/rest/index.md),
+The current REST API version is `4`. [We commit to follow semantic versioning for our REST API](../api/rest/_index.md),
 which means we cannot make breaking changes until a major version change (most likely, `5`).
 
 Because version `5` is not scheduled, we allow rare [exceptions](#exceptions).
diff --git a/doc/development/architecture.md b/doc/development/architecture.md
index eca13494b87d93eb2f29682b57f21005a8c9787d..d26caec0adabc877235c630beddb055cbfa93635 100644
--- a/doc/development/architecture.md
+++ b/doc/development/architecture.md
@@ -35,7 +35,7 @@ Kubernetes platform. The largest known GitLab instance is on GitLab.com, which i
 
 A typical installation uses NGINX or Apache as a web server to proxy through
 [GitLab Workhorse](https://gitlab.com/gitlab-org/gitlab/tree/master/workhorse) and into the [Puma](https://puma.io)
-application server. GitLab serves web pages and the [GitLab API](../api/rest/index.md) using the Puma
+application server. GitLab serves web pages and the [GitLab API](../api/rest/_index.md) using the Puma
 application server. It uses Sidekiq as a job queue which, in turn, uses Redis as a non-persistent
 database backend for job information, metadata, and incoming jobs.
 
diff --git a/doc/development/bulk_import.md b/doc/development/bulk_import.md
index 6cd71fba7bf0cc4773874a323b23ec6faca98cd0..69558424f7336115b9d733c780cd010631fd4d17 100644
--- a/doc/development/bulk_import.md
+++ b/doc/development/bulk_import.md
@@ -37,9 +37,9 @@ The current [project](../user/project/settings/import_export.md#migrate-projects
 [group](../user/project/settings/import_export.md#migrate-groups-by-uploading-an-export-file-deprecated) imports are file based, so
 they require an export step to generate the file to be imported.
 
-Group migration by direct transfer leverages the [GitLab API](../api/rest/index.md) to speed the migration.
+Group migration by direct transfer leverages the [GitLab API](../api/rest/_index.md) to speed the migration.
 
-And, because we're on the road to [GraphQL](../api/graphql/index.md),
+And, because we're on the road to [GraphQL](../api/graphql/_index.md),
 Group migration by direct transfer can contribute to expanding GraphQL API coverage, which benefits both GitLab
 and its users.
 
diff --git a/doc/development/code_suggestions/_index.md b/doc/development/code_suggestions/_index.md
index 37c8911d305f7b2bb4e2f4e160b31c48aa4ff5a2..3765fa235bbc6769822b9b0af53bf33709fdc978 100644
--- a/doc/development/code_suggestions/_index.md
+++ b/doc/development/code_suggestions/_index.md
@@ -103,7 +103,7 @@ with the deployed staging AI gateway. To do this:
 After purchasing the Duo add-on, existing eligible users can be assigned/un-assigned to the Duo `add_on_purchase` in bulk. There are a few ways to perform this action, that apply for both SaaS and Self-managed instances,
 
 1. [Duo users management UI](../../subscriptions/subscription-add-ons.md#assign-gitlab-duo-seats)
-1. [GraphQL endpoint](../../api/graphql/assign_gitlab_duo_seats.md#assign-gitlab-duo-seats-by-using-graphql)
+1. [GraphQL endpoint](../../api/graphql/assign_gitlab_duo_seats.md)
 1. [Rake task](../../raketasks/user_management.md#bulk-assign-users-to-gitlab-duo-pro)
 
 The above methods make use of the [BulkAssignService](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/services/gitlab_subscriptions/duo/bulk_assign_service.rb)/[BulkUnassignService](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/services/gitlab_subscriptions/duo/bulk_unassign_service.rb), which evaluates eligibility criteria preliminarily before assigning/un-assigning the passed users in a single SQL operation.
diff --git a/doc/development/database/pagination_guidelines.md b/doc/development/database/pagination_guidelines.md
index 25d28c14e0838c9a6a5efb2f956cedf2ed2089aa..93c80a2c7ca77a08e528b4fe6f3ad03508f12afe 100644
--- a/doc/development/database/pagination_guidelines.md
+++ b/doc/development/database/pagination_guidelines.md
@@ -65,7 +65,7 @@ Offset-based pagination is the easiest way to paginate over records, however, it
 - Avoid using page numbers, use next and previous page buttons.
   - Keyset pagination doesn't support page numbers.
 - For APIs, advise against building URLs for the next page by "hand".
-  - Promote the usage of the [`Link` header](../../api/rest/index.md#pagination-link-header) where the URLs for the next and previous page are provided by the backend.
+  - Promote the usage of the [`Link` header](../../api/rest/_index.md#pagination-link-header) where the URLs for the next and previous page are provided by the backend.
   - This way changing the URL structure is possible without breaking backward compatibility.
 
 NOTE:
@@ -219,7 +219,7 @@ We can argue that a typical user does not visit these pages. However, API users
 
 Keyset pagination addresses the performance concerns of "skipping" previous rows when requesting a large page, however, it's not a drop-in replacement for offset-based pagination. When moving an API endpoint from offset-based pagination to keyset-based pagination, both must be supported. Removing one type of pagination entirely is a [breaking changes](../../update/terminology.md#breaking-change).
 
-Keyset pagination used in both the [GraphQL API](../graphql_guide/pagination.md#keyset-pagination) and the [REST API](../../api/rest/index.md#keyset-based-pagination).
+Keyset pagination used in both the [GraphQL API](../graphql_guide/pagination.md#keyset-pagination) and the [REST API](../../api/rest/_index.md#keyset-based-pagination).
 
 Consider the following `issues` table:
 
diff --git a/doc/development/deprecation_guidelines/_index.md b/doc/development/deprecation_guidelines/_index.md
index b0db181770dde82fac65efc2f94d85ab0ffc94f2..6995af1f4cba5a9683a2932c8ad8c7ec44773c8c 100644
--- a/doc/development/deprecation_guidelines/_index.md
+++ b/doc/development/deprecation_guidelines/_index.md
@@ -73,7 +73,7 @@ Features or configuration can only be removed/changed in a major release.
 
 They must be [deprecated in advance](https://handbook.gitlab.com/handbook/marketing/blog/release-posts/#update-the-deprecations-doc).
 
-For API removals, see the [GraphQL](../../api/graphql/index.md#deprecation-and-removal-process) and [GitLab API](../documentation/restful_api_styleguide.md#deprecations) guidelines.
+For API removals, see the [GraphQL](../../api/graphql/_index.md#deprecation-and-removal-process) and [GitLab API](../documentation/restful_api_styleguide.md#deprecations) guidelines.
 
 For configuration removals, see the [Omnibus deprecation policy](../../administration/package_information/deprecation_policy.md).
 
diff --git a/doc/development/documentation/styleguide/deprecations_and_removals.md b/doc/development/documentation/styleguide/deprecations_and_removals.md
index 9afd06d94701b33c496fda35adb18f049eb4d558..7f28e17c3712ae14833e3fb2c0ab067c623e1ee1 100644
--- a/doc/development/documentation/styleguide/deprecations_and_removals.md
+++ b/doc/development/documentation/styleguide/deprecations_and_removals.md
@@ -13,7 +13,7 @@ If a feature is not generally available, you can delete the content outright ins
 
 NOTE:
 REST API docs [have a separate deprecation style](../restful_api_styleguide.md#deprecations).
-The GraphQL API [has a separate deprecation process](../../../api/graphql/index.md#deprecation-and-removal-process),
+The GraphQL API [has a separate deprecation process](../../../api/graphql/_index.md#deprecation-and-removal-process),
 and [style for the deprecation reason](../../api_graphql_styleguide.md#deprecation-reason-style-guide).
 
 ## Features not actively being developed
diff --git a/doc/development/fe_guide/migrating_from_vuex.md b/doc/development/fe_guide/migrating_from_vuex.md
index 8ce9f9fd69b3a345bd387073145d1277dda3c44b..cabbd011008abd5ef4f9fb734a84ac11aeb7e778 100644
--- a/doc/development/fe_guide/migrating_from_vuex.md
+++ b/doc/development/fe_guide/migrating_from_vuex.md
@@ -9,7 +9,7 @@ title: Migrating from Vuex
 
 ## Why?
 
-We have defined the [GraphQL API](../../api/graphql/index.md) as the primary choice for all user-facing features.
+We have defined the [GraphQL API](../../api/graphql/_index.md) as the primary choice for all user-facing features.
 We can safely assume that whenever GraphQL is present, so will the Apollo Client.
 We [do not want to use Vuex with Apollo](graphql.md#using-with-vuex), so the VueX stores count
 will naturally decline over time as we move from the REST API to GraphQL.
diff --git a/doc/development/fe_guide/storybook.md b/doc/development/fe_guide/storybook.md
index 6cde49bef20e6066cf1c3a06e49b0fe1d03fb961..915c205e28c7587169932a5b350b874804095d7c 100644
--- a/doc/development/fe_guide/storybook.md
+++ b/doc/development/fe_guide/storybook.md
@@ -56,8 +56,8 @@ For instructions on how to write stories, refer to the [official Storybook instr
 
 ## Using GitLab REST and GraphQL APIs
 
-You can write stories for components that use either the GitLab [REST](../../api/rest/index.md) or
-[GraphQL](../../api/graphql/index.md) APIs.
+You can write stories for components that use either the GitLab [REST](../../api/rest/_index.md) or
+[GraphQL](../../api/graphql/_index.md) APIs.
 
 ### Set up API access token and GitLab instance URL
 
diff --git a/doc/development/feature_categorization/_index.md b/doc/development/feature_categorization/_index.md
index a2f22d21b9c174782c3f98423e28c92b56353e24..990c6bf55979e26d3363a151760956d750827db8 100644
--- a/doc/development/feature_categorization/_index.md
+++ b/doc/development/feature_categorization/_index.md
@@ -164,7 +164,7 @@ the actions used in configuration still exist as routes.
 
 ## API endpoints
 
-The [GraphQL API](../../api/graphql/index.md) is currently categorized
+The [GraphQL API](../../api/graphql/_index.md) is currently categorized
 as `not_owned`. For now, no extra specification is needed. For more
 information, see
 [`gitlab-com/gl-infra/scalability#583`](https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/583/).
diff --git a/doc/development/feature_development.md b/doc/development/feature_development.md
index 87c46523e6b06a7bf99718883556c3fa371b4992..4de1fedba6d4d10c8eb5822e4070b1564c76e79b 100644
--- a/doc/development/feature_development.md
+++ b/doc/development/feature_development.md
@@ -65,7 +65,7 @@ Consult these topics for information on contributing to specific GitLab features
 
 - [API style guide](api_styleguide.md) for contributing to the API
 - [GraphQL API style guide](api_graphql_styleguide.md) for contributing to the
-  [GraphQL API](../api/graphql/index.md)
+  [GraphQL API](../api/graphql/_index.md)
 
 ### GitLab components and features
 
diff --git a/doc/development/graphql_guide/_index.md b/doc/development/graphql_guide/_index.md
index fee6294490d6d210f2d35eecb379ecc4d6b5f450..96c3f4aa81f29b19c803c29f11024f4bff4a34dc 100644
--- a/doc/development/graphql_guide/_index.md
+++ b/doc/development/graphql_guide/_index.md
@@ -15,7 +15,7 @@ feedback, and suggestions.
   GraphQL.
 - [GraphQL API documentation style guide](../documentation/graphql_styleguide.md): documentation
   style guide for GraphQL.
-- [GraphQL API](../../api/graphql/index.md): user documentation for the GitLab GraphQL API.
+- [GraphQL API](../../api/graphql/_index.md): user documentation for the GitLab GraphQL API.
 - [GraphQL authorization](authorization.md): guide to using authorization in GraphQL.
 - [GraphQL BatchLoader](batchloader.md): development documentation on the BatchLoader.
 - [GraphQL pagination](pagination.md): development documentation on pagination.
diff --git a/doc/development/graphql_guide/reviewing.md b/doc/development/graphql_guide/reviewing.md
index 02747a8ff61d0d9946874e01445b9208e131408b..2e8c12c90125445786ec6e1ab6ef540a298bae5c 100644
--- a/doc/development/graphql_guide/reviewing.md
+++ b/doc/development/graphql_guide/reviewing.md
@@ -29,7 +29,7 @@ Check the MR for any [breaking changes](../api_graphql_styleguide.md#breaking-ch
 
 If a feature is marked as an [experiment](../api_graphql_styleguide.md#mark-schema-items-as-experiments), you can make breaking changes immediately, with no deprecation period.
 
-For more information, see [deprecation and removal process](../../api/graphql/index.md#deprecation-and-removal-process).
+For more information, see [deprecation and removal process](../../api/graphql/_index.md#deprecation-and-removal-process).
 
 ### Multiversion compatibility
 
diff --git a/doc/development/internal_api/_index.md b/doc/development/internal_api/_index.md
index c605aeb7be4e2a4f13c441551f48b968510217f6..def6a60b2e75947a8b53524ceac4c2c89856a1e3 100644
--- a/doc/development/internal_api/_index.md
+++ b/doc/development/internal_api/_index.md
@@ -505,7 +505,7 @@ agent to be authorized is [not yet implemented](https://gitlab.com/gitlab-org/gi
 
 | Attribute | Type   | Required | Description |
 |:----------|:-------|:---------|:------------|
-| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../../api/rest/index.md#namespaced-paths) |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../../api/rest/_index.md#namespaced-paths) |
 
 ```plaintext
 GET /internal/kubernetes/project_info
diff --git a/doc/development/internal_api/gitlab_subscriptions.md b/doc/development/internal_api/gitlab_subscriptions.md
index 4b80481076b6b8fbf3ab140d8ce8b1e99484bf07..838b0ff5b24b787941b2c95269d2a18629e94c24 100644
--- a/doc/development/internal_api/gitlab_subscriptions.md
+++ b/doc/development/internal_api/gitlab_subscriptions.md
@@ -86,7 +86,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | ID or [URL-encoded path of the namespace](../../api/rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | ID or [URL-encoded path of the namespace](../../api/rest/_index.md#namespaced-paths) |
 
 Example request:
 
@@ -131,7 +131,7 @@ Parameters:
 
 | Attribute | Type           | Required | Description |
 | --------- | -------------- | -------- | ----------- |
-| `id`      | integer/string | yes      | ID or [URL-encoded path of the namespace](../../api/rest/index.md#namespaced-paths) |
+| `id`      | integer/string | yes      | ID or [URL-encoded path of the namespace](../../api/rest/_index.md#namespaced-paths) |
 | `shared_runners_minutes_limit` | integer | no | Compute minutes quota |
 | `extra_shared_runners_minutes_limit` |  integer | no | Extra compute minutes |
 | `additional_purchased_storage_size` |  integer | no | Additional storage size |
diff --git a/doc/development/real_time.md b/doc/development/real_time.md
index 8dd6bd493a98cff6b20b9fe97211eda3f5924722..f4c340276ff265eb8fbecdf11f77e9d9084d0a9f 100644
--- a/doc/development/real_time.md
+++ b/doc/development/real_time.md
@@ -522,7 +522,7 @@ subscribe.
 ### GraphQL subscriptions: Backend
 
 GitLab supports [GraphQL](https://graphql.org) for clients to request structured data from the server
-using GraphQL queries. Refer to the [GitLab GraphQL overview](../api/graphql/index.md) to learn about why we adopted GraphQL.
+using GraphQL queries. Refer to the [GitLab GraphQL overview](../api/graphql/_index.md) to learn about why we adopted GraphQL.
 GraphQL support in the GitLab backend is provided by the [`graphql-ruby`](https://graphql-ruby.org) gem.
 
 Ordinarily, GraphQL queries are client-initiated HTTP POST requests that follow the standard request-response cycle.
diff --git a/doc/development/sec/analyzer_development_guide.md b/doc/development/sec/analyzer_development_guide.md
index 2289ffeff39dd11052a523ba954b2a44eea9fc78..6dd60d6c33c8b61bac164ec195edd7716e6140ab 100644
--- a/doc/development/sec/analyzer_development_guide.md
+++ b/doc/development/sec/analyzer_development_guide.md
@@ -223,7 +223,7 @@ After the above steps have been completed, the automatic release process execute
 1. A project maintainer merges an MR into the default branch.
 1. The default pipeline is triggered, and the `upsert git tag` job is executed.
    - If the most recent version in the `CHANGELOG.md` matches one of the Git tags, the job is a no-op.
-   - Else, this job automatically creates a new release and Git tag using the [releases API](../../api/releases/index.md#create-a-release). The version and message is obtained from the most recent entry in the `CHANGELOG.md` file for the project.
+   - Else, this job automatically creates a new release and Git tag using the [releases API](../../api/releases/_index.md#create-a-release). The version and message is obtained from the most recent entry in the `CHANGELOG.md` file for the project.
 1. A pipeline is automatically triggered for the new Git tag. This pipeline releases the `latest`, `major`, `minor` and `patch` Docker images of the analyzer.
 
 ### Service account used in the automatic release process
diff --git a/doc/development/spam_protection_and_captcha/_index.md b/doc/development/spam_protection_and_captcha/_index.md
index 6800a785762743179c37f660777d3003a89c5e95..73b8d1719f8baaebec9cbb7d9c59acace60e3a3f 100644
--- a/doc/development/spam_protection_and_captcha/_index.md
+++ b/doc/development/spam_protection_and_captcha/_index.md
@@ -20,7 +20,7 @@ To add this support, you must implement the following areas as applicable:
    [REST API documentation](../../api/rest/troubleshooting.md#requests-detected-as-spam).
 1. [GraphQL API](graphql_api.md): The changes needed to add spam or CAPTCHA support to GraphQL
    mutations. Refer to the related
-   [GraphQL API documentation](../../api/graphql/index.md#resolve-mutations-detected-as-spam).
+   [GraphQL API documentation](../../api/graphql/_index.md#resolve-mutations-detected-as-spam).
 1. [Web UI](web_ui.md): The various possible scenarios encountered when adding
    spam/CAPTCHA support to the web UI, depending on whether the UI is JavaScript API-based (Vue or
    plain JavaScript) or HTML-form (HAML) based.
@@ -46,7 +46,7 @@ The possible values include:
 
 ## Related topics
 
-- [Spam and CAPTCHA support in the GraphQL API](../../api/graphql/index.md#resolve-mutations-detected-as-spam)
+- [Spam and CAPTCHA support in the GraphQL API](../../api/graphql/_index.md#resolve-mutations-detected-as-spam)
 - [Spam and CAPTCHA support in the REST API](../../api/rest/troubleshooting.md#requests-detected-as-spam)
 - [reCAPTCHA Spam and Anti-bot Protection](../../integration/recaptcha.md)
 - [Akismet and spam logs](../../integration/akismet.md)
diff --git a/doc/development/spam_protection_and_captcha/graphql_api.md b/doc/development/spam_protection_and_captcha/graphql_api.md
index 2709ad0a22f276e606e2b6ccdb8a1a7d6a93bb17..be3a70e662306939005d520aa396940ac49f50c0 100644
--- a/doc/development/spam_protection_and_captcha/graphql_api.md
+++ b/doc/development/spam_protection_and_captcha/graphql_api.md
@@ -24,7 +24,7 @@ The main steps are:
       - Raises a `GraphQL::ExecutionError` exception.
       - Includes the relevant information added as error fields to the response via the `extensions:` parameter.
         For more details on these fields, refer to the section in the GraphQL API documentation on
-        [Resolve mutations detected as spam](../../api/graphql/index.md#resolve-mutations-detected-as-spam).
+        [Resolve mutations detected as spam](../../api/graphql/_index.md#resolve-mutations-detected-as-spam).
 
    NOTE:
    If you use the standard ApolloLink or Axios interceptor CAPTCHA support described
diff --git a/doc/development/testing_guide/end_to_end/beginners_guide/resources.md b/doc/development/testing_guide/end_to_end/beginners_guide/resources.md
index 1358f604d068155f15aaf83b53620213b2daf260..f46e665357e2bd01474c260ea5e3c4324580d8f5 100644
--- a/doc/development/testing_guide/end_to_end/beginners_guide/resources.md
+++ b/doc/development/testing_guide/end_to_end/beginners_guide/resources.md
@@ -48,7 +48,7 @@ create the resource via the public GitLab API:
 - `#api_post_path`: The `POST` path to create a new resource.
 - `#api_post_body`: The `POST` body (as a Ruby hash) to create a new resource.
 
-> Be aware that many API resources are [paginated](../../../../api/rest/index.md#pagination).
+> Be aware that many API resources are [paginated](../../../../api/rest/_index.md#pagination).
 > If you don't find the results you expect, check if there is more that one page of results.
 
 Let's take the `Shirt` resource class, and add these three API methods:
diff --git a/doc/index.md b/doc/index.md
index 997cc31ad0720e81561712e8d760c09ca5aa1d91..07d3f037ce1be90352325f09f3f1b1d4cba47147 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -34,7 +34,7 @@ View some of the most popular topics:
 | Popular topic                                                                  | Description |
 |:-------------------------------------------------------------------------------|:------------|
 | [CI/CD YAML syntax reference](ci/yaml/index.md)                                | Available configuration options for `.gitlab-ci.yml` files. |
-| [REST API](api/rest/index.md)                                                  | Use the REST API to extend GitLab. |
+| [REST API](api/rest/_index.md)                                                  | Use the REST API to extend GitLab. |
 | [Environments and deployments](ci/environments/index.md)                       | Deploy your application to different environments. |
 | [Configuring runners](ci/runners/configure_runners.md)                         | Get started using runners. |
 | [Two-factor authentication](user/profile/account/two_factor_authentication.md) | Improve the security of your GitLab account. |
@@ -66,11 +66,11 @@ If you are coming to GitLab from another platform:
 
 To build integrations with GitLab:
 
-| Topic                                      | Description |
-|:-------------------------------------------|:------------|
-| [GitLab REST API](api/rest/index.md)           | Integrate with GitLab using our REST API. |
-| [GitLab GraphQL API](api/graphql/index.md) | Integrate with GitLab using our GraphQL API. |
-| [Integrations](integration/index.md)      | Integrations with third-party products. |
+| Topic                                       | Description |
+|:--------------------------------------------|:------------|
+| [GitLab REST API](api/rest/_index.md)       | Integrate with GitLab using our REST API. |
+| [GitLab GraphQL API](api/graphql/_index.md) | Integrate with GitLab using our GraphQL API. |
+| [Integrations](integration/index.md)        | Integrations with third-party products. |
 
 ## Contribute to GitLab
 
diff --git a/doc/integration/snowflake.md b/doc/integration/snowflake.md
index 825de3bd341e0c7c86b0cf452ba8aa9efc4229d7..fb0c2b18c255c4869323767f3677e146b34a6f95 100644
--- a/doc/integration/snowflake.md
+++ b/doc/integration/snowflake.md
@@ -14,7 +14,7 @@ DETAILS:
 
 The Snowflake [GitLab Data Connector](https://app.snowflake.com/marketplace/listing/GZTYZXESENG/gitlab-gitlab-data-connector) pulls data into [Snowflake](https://www.snowflake.com/en/).
 
-In Snowflake you can then view, combine, manipulate, and report on all of the data. The GitLab Data Connector is based on [GitLab REST APIs](../api/rest/index.md) and
+In Snowflake you can then view, combine, manipulate, and report on all of the data. The GitLab Data Connector is based on [GitLab REST APIs](../api/rest/_index.md) and
 requires both Snowflake and GitLab configuration.
 
 ## Prerequisites
diff --git a/doc/security/hardening_nist_800_53.md b/doc/security/hardening_nist_800_53.md
index d672f68e02203dfb094f645d730c178f3a227d39..13832fe98ff98cd38a765de59ed4f567d60fe2a7 100644
--- a/doc/security/hardening_nist_800_53.md
+++ b/doc/security/hardening_nist_800_53.md
@@ -690,8 +690,8 @@ which includes concepts such as:
 #### Leveraging APIs
 
 GitLab provides a robust set of APIs to support the application,
-including [REST](../api/rest/index.md) and
-[GraphQL](../api/graphql/index.md) APIs.
+including [REST](../api/rest/_index.md) and
+[GraphQL](../api/graphql/_index.md) APIs.
 Securing APIs starts with the proper configuration of authentication for
 users and jobs calling the API endpoints. GitLab recommends configuring
 access tokens (personal access tokens not supported by FIPS) and OAuth
diff --git a/doc/security/user_file_uploads.md b/doc/security/user_file_uploads.md
index a0d1dffbad102c57b055f4deddf53c1ebae0b9e6..4d82adc3df3a618ae719fa7a877339458a6d2e33 100644
--- a/doc/security/user_file_uploads.md
+++ b/doc/security/user_file_uploads.md
@@ -68,7 +68,7 @@ You cannot select this option for public projects.
 
 You should delete an uploaded file when that file contains sensitive or confidential information. When you have deleted that file, users cannot access the file and the direct URL returns a 404 error.
 
-Project Owners and Maintainers can use the [interactive GraphQL explorer](../api/graphql/index.md#interactive-graphql-explorer) to access a [GraphQL endpoint](../api/graphql/reference/_index.md#mutationuploaddelete) and delete an uploaded file.
+Project Owners and Maintainers can use the [interactive GraphQL explorer](../api/graphql/_index.md#interactive-graphql-explorer) to access a [GraphQL endpoint](../api/graphql/reference/_index.md#mutationuploaddelete) and delete an uploaded file.
 
 For example:
 
diff --git a/doc/user/analytics/dora_metrics.md b/doc/user/analytics/dora_metrics.md
index bb8bffb4b65571298f4cace5af6a9751891a6028..210f2f6dc9282d5c1e58cfc844b90af7c73696bc 100644
--- a/doc/user/analytics/dora_metrics.md
+++ b/doc/user/analytics/dora_metrics.md
@@ -227,7 +227,7 @@ DORA metrics are displayed in the following analytics features:
 - [Value Streams Dashboard](value_streams_dashboard.md) includes the [DORA metrics comparison panel](value_streams_dashboard.md#devsecops-metrics-comparison-panels) and [DORA Performers score panel](value_streams_dashboard.md#dora-performers-score-panel).
 - [CI/CD analytics charts](ci_cd_analytics.md) show the history of DORA metrics over time.
 - [Insights reports](../project/insights/index.md) provide the option to create custom charts with [DORA query parameters](../../user/project/insights/index.md#dora-query-parameters).
-- [GraphQL API](../../api/graphql/reference/_index.md) (with the interactive [GraphQL explorer](../../api/graphql/index.md#interactive-graphql-explorer)) and [REST API](../../api/dora/metrics.md) support the retrieval of metrics data.
+- [GraphQL API](../../api/graphql/reference/_index.md) (with the interactive [GraphQL explorer](../../api/graphql/_index.md#interactive-graphql-explorer)) and [REST API](../../api/dora/metrics.md) support the retrieval of metrics data.
 
 ## Project and group availability
 
diff --git a/doc/user/application_security/vulnerabilities/risk_assessment_data.md b/doc/user/application_security/vulnerabilities/risk_assessment_data.md
index 03e2bb45e0a14979f0723f83beb4239ce5466028..69ccce55acd2c995dc481f8da2f6806b38d96fd4 100644
--- a/doc/user/application_security/vulnerabilities/risk_assessment_data.md
+++ b/doc/user/application_security/vulnerabilities/risk_assessment_data.md
@@ -46,7 +46,7 @@ score, and KEV status for the vulnerability. EPSS scores are rounded to the seco
 
 For example, the following GraphQL API query returns all vulnerabilities in a given project and
 their CVE ID, EPSS score, and KEV status (`isKnownExploit`). Run the query in the
-[GraphQL explorer](../../../api/graphql/index.md#interactive-graphql-explorer) or any other GraphQL
+[GraphQL explorer](../../../api/graphql/_index.md#interactive-graphql-explorer) or any other GraphQL
 client.
 
 ```graphql
diff --git a/doc/user/custom_roles.md b/doc/user/custom_roles.md
index 3fb87f798227d0b75071a4b03c0155b8cfb9439e..f3d26bc3f63bdbb0fa4237a97399c261e0b09573 100644
--- a/doc/user/custom_roles.md
+++ b/doc/user/custom_roles.md
@@ -198,7 +198,7 @@ If you are assigning a custom role to an existing:
 
    Where:
 
-   - `<project_id` and `<group_id>`: The `id` or [URL-encoded path of the project or group](../api/rest/index.md#namespaced-paths) associated with the membership receiving the custom role.
+   - `<project_id` and `<group_id>`: The `id` or [URL-encoded path of the project or group](../api/rest/_index.md#namespaced-paths) associated with the membership receiving the custom role.
    - `<member_role_id>`: The `id` of the member role created in the previous section.
    - `<user_id>`: The `id` of the user receiving a custom role.
 
diff --git a/doc/user/gitlab_com/index.md b/doc/user/gitlab_com/index.md
index f7b18b201fdddbe70fcdce7555c04a1d1faa4e0c..4da3f39366d105ea1feee10b9cc8d8328c8745a4 100644
--- a/doc/user/gitlab_com/index.md
+++ b/doc/user/gitlab_com/index.md
@@ -467,7 +467,7 @@ To resolve this issue, use [SSH keys to communicate with GitLab](../ssh.md).
 
 ### Pagination response headers
 
-For performance reasons, if a query returns more than 10,000 records, [GitLab excludes some headers](../../api/rest/index.md#pagination-response-headers).
+For performance reasons, if a query returns more than 10,000 records, [GitLab excludes some headers](../../api/rest/_index.md#pagination-response-headers).
 
 ### Visibility settings
 
diff --git a/doc/user/group/index.md b/doc/user/group/index.md
index 378e20587616c3225ed1c5281eaaf2b52f387611..65368cc8900581c2b0f79a7af151d903aaba6c5a 100644
--- a/doc/user/group/index.md
+++ b/doc/user/group/index.md
@@ -153,7 +153,7 @@ You can access a group by using its ID instead of its name at `https://gitlab.ex
 For example, if your group `example-group` has an ID `123456`, you can access the group either at
 `https://gitlab.example.com/example-group` or `https://gitlab.example.com/-/g/123456`.
 
-You might need the group ID if you want to interact with it using the [GitLab API](../../api/index.md).
+You might need the group ID if you want to interact with it using the [GitLab API](../../api/_index.md).
 
 To copy the Group ID:
 
diff --git a/doc/user/group/manage.md b/doc/user/group/manage.md
index 1023c4187f8208c9b66656fb80b01b73b3afe623..84e4c970bc4bc904dafd572bbe1411d9807d0e95 100644
--- a/doc/user/group/manage.md
+++ b/doc/user/group/manage.md
@@ -55,7 +55,7 @@ member with the Owner role.
 
 Changing a group's path (group URL) can have unintended side effects. Read how redirects behave
 for [projects](../project/repository/index.md#repository-path-changes)
-and in the [API](../../api/rest/index.md#redirects)
+and in the [API](../../api/rest/_index.md#redirects)
 before you proceed.
 
 If you are changing the path so it can be claimed by another group or user,
diff --git a/doc/user/packages/helm_repository/index.md b/doc/user/packages/helm_repository/index.md
index bd0d6677c12a69d8245a0d3c775cfae3da9214d8..f5b8fa9f8aedf8a19afec7ab95a6bc2b2f0a01d9 100644
--- a/doc/user/packages/helm_repository/index.md
+++ b/doc/user/packages/helm_repository/index.md
@@ -57,7 +57,7 @@ Once built, a chart can be uploaded to the desired channel with `curl` or `helm
   - `<username>`: the GitLab username or the deploy token username.
   - `<access_token>`: the personal access token or the deploy token.
   - `<project_id>`: the project ID (like `42`) or the
-    [URL-encoded](../../../api/rest/index.md#namespaced-paths) path of the project (like `group%2Fproject`).
+    [URL-encoded](../../../api/rest/_index.md#namespaced-paths) path of the project (like `group%2Fproject`).
   - `<channel>`: the name of the channel (like `stable`).
 
 - With the [`helm cm-push`](https://github.com/chartmuseum/helm-push/#readme) plugin:
diff --git a/doc/user/packages/pypi_repository/index.md b/doc/user/packages/pypi_repository/index.md
index e2b3f2dbec2a3a0d5696e80ee4b3c2b92de00efd..2d684e7240ac710b6455e62d1183c066a8bf4140 100644
--- a/doc/user/packages/pypi_repository/index.md
+++ b/doc/user/packages/pypi_repository/index.md
@@ -187,7 +187,7 @@ pip install --index-url https://<personal_access_token_name>:<personal_access_to
 - `<package_name>` is the package name.
 - `<personal_access_token_name>` is a personal access token name with the `read_api` scope.
 - `<personal_access_token>` is a personal access token with the `read_api` scope.
-- `<project_id>` is either the project's [URL-encoded](../../../api/rest/index.md#namespaced-paths)
+- `<project_id>` is either the project's [URL-encoded](../../../api/rest/_index.md#namespaced-paths)
   path (for example, `group%2Fproject`), or the project's ID (for example `42`).
 
 In these commands, you can use `--extra-index-url` instead of `--index-url`. If you were following the guide and want to install the
diff --git a/doc/user/packages/terraform_module_registry/index.md b/doc/user/packages/terraform_module_registry/index.md
index 9ee8a834ee5fddce2f5050ecd015ef47341f933d..7395f40ce7491c69438292530e0084439d652a21 100644
--- a/doc/user/packages/terraform_module_registry/index.md
+++ b/doc/user/packages/terraform_module_registry/index.md
@@ -62,7 +62,7 @@ PUT /projects/:id/packages/terraform/modules/:module-name/:module-system/:module
 
 | Attribute          | Type            | Required | Description                                                                                                                      |
 | -------------------| --------------- | ---------| -------------------------------------------------------------------------------------------------------------------------------- |
-| `id`               | integer/string  | yes      | The ID or [URL-encoded path of the project](../../../api/rest/index.md#namespaced-paths).                                    |
+| `id`               | integer/string  | yes      | The ID or [URL-encoded path of the project](../../../api/rest/_index.md#namespaced-paths).                                    |
 | `module-name`      | string          | yes      | The module name. **Supported syntax**: One to 64 ASCII characters, including lowercase letters (a-z) and digits (0-9). The module name can't exceed 64 characters. |
 | `module-system`    | string          | yes      | The module system. **Supported syntax**: One to 64 ASCII characters, including lowercase letters (a-z) and digits (0-9). The module system can't exceed 64 characters. More information can be found in the [Terraform Module Registry protocol documentation](https://www.terraform.io/internals/module-registry-protocol). |
 | `module-version`   | string          | yes      | The module version. It must be valid according to the [semantic versioning specification](https://semver.org/). |
diff --git a/doc/user/profile/account/two_factor_authentication.md b/doc/user/profile/account/two_factor_authentication.md
index 2ac583d0de359a866426631f150a6c01854b661e..de33131b9c2649ab84b3d1de835750a18c313326 100644
--- a/doc/user/profile/account/two_factor_authentication.md
+++ b/doc/user/profile/account/two_factor_authentication.md
@@ -25,7 +25,7 @@ If you set up a device, also set up an OTP so you can still access your account
 
 ## Use personal access tokens with two-factor authentication
 
-When 2FA is enabled, you can't use your password to authenticate with Git over HTTPS or the [GitLab API](../../../api/rest/index.md).
+When 2FA is enabled, you can't use your password to authenticate with Git over HTTPS or the [GitLab API](../../../api/rest/_index.md).
 You can use a [personal access token](../personal_access_tokens.md) instead.
 
 ## OAuth credential helpers
diff --git a/doc/user/profile/personal_access_tokens.md b/doc/user/profile/personal_access_tokens.md
index 2d1820ac239152a56d457084b839a316d7884235..8a39be97d5bece6b4ec3ddcc7222a64028dd0c48 100644
--- a/doc/user/profile/personal_access_tokens.md
+++ b/doc/user/profile/personal_access_tokens.md
@@ -169,7 +169,7 @@ To disable the enterprise users' personal access tokens:
 
 Token usage information is updated every 10 minutes. GitLab considers a token used when the token is used to:
 
-- Authenticate with the [REST](../../api/rest/index.md) or [GraphQL](../../api/graphql/index.md) APIs.
+- Authenticate with the [REST](../../api/rest/_index.md) or [GraphQL](../../api/graphql/_index.md) APIs.
 - Perform a Git operation.
 
 To view the last time a token was used, and the IP addresses from where the token was used:
diff --git a/doc/user/project/badges.md b/doc/user/project/badges.md
index e3c1fc999bdae449b71c3d8174be8dfd33d0bc0a..4290a7f1a5a6d8d44f3346892dbe811d3afd31d2 100644
--- a/doc/user/project/badges.md
+++ b/doc/user/project/badges.md
@@ -123,7 +123,7 @@ You can access a latest release badge image by using the following link:
 https://gitlab.example.com/<namespace>/<project>/-/badges/release.svg
 ```
 
-By default, the badge fetches the release sorted using the [`released_at`](../../api/releases/index.md#create-a-release)
+By default, the badge fetches the release sorted using the [`released_at`](../../api/releases/_index.md#create-a-release)
 time with the `?order_by` query parameter.
 
 ```plaintext
diff --git a/doc/user/project/import/jira_migration_options.md b/doc/user/project/import/jira_migration_options.md
index abddc52f60709805ec5d95d898b20c58c1005330..1f6d09ed084e4d24f4844015693a56de0b2644d1 100644
--- a/doc/user/project/import/jira_migration_options.md
+++ b/doc/user/project/import/jira_migration_options.md
@@ -99,8 +99,8 @@ For full control over the migration process, you can write your own custom scrip
 your Jira issues to GitLab in a way that suits your needs exactly. GitLab provides APIs to help
 automate your migration:
 
-- [REST API](../../../api/rest/index.md)
-- [GraphQL API](../../../api/graphql/index.md)
+- [REST API](../../../api/rest/_index.md)
+- [GraphQL API](../../../api/graphql/_index.md)
 
 To get started, familiarize yourself with the following GitLab API endpoints:
 
diff --git a/doc/user/project/issues/create_issues.md b/doc/user/project/issues/create_issues.md
index 84a78148d17f2c5b45bdebd5a97e9b9e2c2a70f0..9e8c02c34ebb74adb2588d56f6e52f7fb0d3f2d4 100644
--- a/doc/user/project/issues/create_issues.md
+++ b/doc/user/project/issues/create_issues.md
@@ -160,10 +160,10 @@ HTML page to create issues with certain fields prefilled.
 
 | Field                | URL parameter         | Notes                                                                                                                           |
 | -------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
-| Title                | `issue[title]`        | Must be [URL-encoded](../../../api/rest/index.md#namespaced-paths).                                                          |
+| Title                | `issue[title]`        | Must be [URL-encoded](../../../api/rest/_index.md#namespaced-paths).                                                          |
 | Issue type           | `issue[issue_type]`   | Either `incident` or `issue`.                                                                                                   |
-| Description template | `issuable_template`   | Must be [URL-encoded](../../../api/rest/index.md#namespaced-paths).                                                          |
-| Description          | `issue[description]`  | Must be [URL-encoded](../../../api/rest/index.md#namespaced-paths). If used in combination with `issuable_template` or a [default issue template](../description_templates.md#set-a-default-template-for-merge-requests-and-issues), the `issue[description]` value is appended to the template. |
+| Description template | `issuable_template`   | Must be [URL-encoded](../../../api/rest/_index.md#namespaced-paths).                                                          |
+| Description          | `issue[description]`  | Must be [URL-encoded](../../../api/rest/_index.md#namespaced-paths). If used in combination with `issuable_template` or a [default issue template](../description_templates.md#set-a-default-template-for-merge-requests-and-issues), the `issue[description]` value is appended to the template. |
 | Confidential         | `issue[confidential]` | If `true`, the issue is marked as confidential.                                                                                 |
 | Relate to…           | `add_related_issue`   | A numeric issue ID. If present, the issue form shows a [**Relate to** checkbox](#from-another-issue-or-incident) to optionally link the new issue to the specified existing issue. |
 
diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/index.md
index 3be89653652137e48bc3c00f415c1d946b94a920..c4aa2338185e1a45c513107fa5e7bd6568c5fb87 100644
--- a/doc/user/project/releases/index.md
+++ b/doc/user/project/releases/index.md
@@ -106,7 +106,7 @@ You can create a release:
 
 - [Using a job in your CI/CD pipeline](#creating-a-release-by-using-a-cicd-job).
 - [In the Releases page](#create-a-release-in-the-releases-page).
-- Using the [Releases API](../../../api/releases/index.md#create-a-release).
+- Using the [Releases API](../../../api/releases/_index.md#create-a-release).
 
 ### Create a release in the Releases page
 
@@ -209,7 +209,7 @@ project.
 
 ## Upcoming releases
 
-You can create a release ahead of time by using the [Releases API](../../../api/releases/index.md#upcoming-releases).
+You can create a release ahead of time by using the [Releases API](../../../api/releases/_index.md#upcoming-releases).
 When you set a future `released_at` date, an **Upcoming Release** badge is displayed next to the
 release tag. When the `released_at` date and time has passed, the badge is automatically removed.
 
@@ -220,7 +220,7 @@ release tag. When the `released_at` date and time has passed, the badge is autom
 > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/199429) in GitLab 15.2.
 
 You can create a release in the past using either the
-[Releases API](../../../api/releases/index.md#historical-releases) or the UI. When you set
+[Releases API](../../../api/releases/_index.md#historical-releases) or the UI. When you set
 a past `released_at` date, an **Historical release** badge is displayed next to
 the release tag. Due to being released in the past, [release evidence](release_evidence.md)
 is not available.
@@ -228,7 +228,7 @@ is not available.
 ## Edit a release
 
 To edit the details of a release after it's created, you can use the
-[Update a release API](../../../api/releases/index.md#update-a-release) or the UI.
+[Update a release API](../../../api/releases/_index.md#update-a-release) or the UI.
 
 Prerequisites:
 
@@ -254,7 +254,7 @@ Prerequisites:
 - You must have at least the Developer role. Read more about [Release permissions](#release-permissions).
 
 To delete a release, use either the
-[Delete a release API](../../../api/releases/index.md#delete-a-release) or the UI.
+[Delete a release API](../../../api/releases/_index.md#delete-a-release) or the UI.
 
 In the UI:
 
@@ -272,7 +272,7 @@ You can associate a release with one or more [project milestones](../milestones/
 [GitLab Premium](https://about.gitlab.com/pricing/) customers can specify [group milestones](../milestones/index.md#project-milestones-and-group-milestones) to associate with a release.
 
 You can do this in the user interface, or by including a `milestones` array in your request to
-the [Releases API](../../../api/releases/index.md#create-a-release).
+the [Releases API](../../../api/releases/_index.md#create-a-release).
 
 In the user interface, to associate milestones to a release:
 
diff --git a/doc/user/project/releases/release_evidence.md b/doc/user/project/releases/release_evidence.md
index 690b8a0fd1ceabdec21a7824321ba71ea9e38899..97dbbe9b3b435bd5eebf39cd365c3655b47e0072 100644
--- a/doc/user/project/releases/release_evidence.md
+++ b/doc/user/project/releases/release_evidence.md
@@ -18,7 +18,7 @@ internal processes, like external audits.
 To access the release evidence, on the Releases page, select the link to the JSON file that's listed
 under the **Evidence collection** heading.
 
-You can also [use the API](../../../api/releases/index.md#collect-release-evidence) to
+You can also [use the API](../../../api/releases/_index.md#collect-release-evidence) to
 generate release evidence for an existing release. Because of this, each release
 can have multiple release evidence snapshots. You can view the release evidence and
 its details on the Releases page.
@@ -74,7 +74,7 @@ DETAILS:
 **Tier:** Premium, Ultimate
 **Offering:** GitLab Self-Managed, GitLab Dedicated
 
-When a release is created, release evidence is automatically collected. To initiate evidence collection any other time, use an [API call](../../../api/releases/index.md#collect-release-evidence). You can collect release evidence multiple times for one release.
+When a release is created, release evidence is automatically collected. To initiate evidence collection any other time, use an [API call](../../../api/releases/_index.md#collect-release-evidence). You can collect release evidence multiple times for one release.
 
 Evidence collection snapshots are visible on the Releases page, along with the timestamp the evidence was collected.
 
diff --git a/doc/user/project/repository/branches/default.md b/doc/user/project/repository/branches/default.md
index b372b25117f84cd2b980f2809b97aba451af6c71..33a5a97c17ee16480a8be08a45149d2b4134dda1 100644
--- a/doc/user/project/repository/branches/default.md
+++ b/doc/user/project/repository/branches/default.md
@@ -291,7 +291,7 @@ To fix the problem:
 
 ### Query GraphQL for default branches
 
-You can use a [GraphQL query](../../../../api/graphql/index.md)
+You can use a [GraphQL query](../../../../api/graphql/_index.md)
 to retrieve the default branches for all projects in a group.
 
 To return all projects in a single page of results, replace `GROUPNAME` with the
diff --git a/doc/user/project/repository/index.md b/doc/user/project/repository/index.md
index c2c012612c8fecdb27d13a3b9946ee18014152e2..da77d3e2f1b000aaceb076e42cc1081e5d4488cb 100644
--- a/doc/user/project/repository/index.md
+++ b/doc/user/project/repository/index.md
@@ -154,13 +154,13 @@ When you [rename a user](../../profile/index.md#change-your-username),
   work after a rename.
 - The redirects are available as long as the original path is not claimed by
   another group, user, or project.
-- [API redirects](../../../api/rest/index.md#redirects) may need to be followed explicitly.
+- [API redirects](../../../api/rest/_index.md#redirects) may need to be followed explicitly.
 
 After you change a path, you must update the existing URL in the following resources:
 
 - [Include statements](../../../ci/yaml/includes.md) except [`include:component`](../../../ci/components/index.md),
   otherwise pipelines fail with a syntax error. CI/CD component references can follow redirects.
-- Namespaced API calls that use the [encoded path](../../../api/rest/index.md#namespaced-paths)
+- Namespaced API calls that use the [encoded path](../../../api/rest/_index.md#namespaced-paths)
   instead of the numeric namespace and project IDs.
 - [Docker image references](../../../ci/yaml/index.md#image).
 - Variables that specify a project or namespace.
diff --git a/doc/user/project/service_desk/external_participants.md b/doc/user/project/service_desk/external_participants.md
index 473a7a3f5d203b002253ed44e9b4e3f2583f0889..006e1f335af2f85bd893b620c439fde8bea6068b 100644
--- a/doc/user/project/service_desk/external_participants.md
+++ b/doc/user/project/service_desk/external_participants.md
@@ -87,7 +87,7 @@ The external participant's email address is then obfuscated in:
 
 - The author field of a Service Desk ticket.
 - All [system notes](../system_notes.md) that mention an external participant.
-- The [REST](../../../api/notes.md) and [GraphQL](../../../api/graphql/index.md) APIs.
+- The [REST](../../../api/notes.md) and [GraphQL](../../../api/graphql/_index.md) APIs.
 - The warning message below the comment editor.
 
 For example:
diff --git a/doc/user/project/working_with_projects.md b/doc/user/project/working_with_projects.md
index f2aff21a705b33615a15fc131d4694da6a776572..53cbe44020ccb48fc84f5f1f17b2997069fb1851 100644
--- a/doc/user/project/working_with_projects.md
+++ b/doc/user/project/working_with_projects.md
@@ -60,7 +60,7 @@ you can access the project either at `https://gitlab.example.com/alex/my-project
 NOTE:
 In GitLab 17.5 and later, you can also use `https://gitlab.example.com/-/p/<id>` for this endpoint.
 
-You might also need the project ID if you want to interact with the project using the [GitLab API](../../api/index.md).
+You might also need the project ID if you want to interact with the project using the [GitLab API](../../api/_index.md).
 
 To copy the project ID:
 
diff --git a/doc/user/storage_management_automation.md b/doc/user/storage_management_automation.md
index 428923b334a0ae9580a0c6f811ce62104506e541..93006ac1695186dea4abd51bb62596ed56691077 100644
--- a/doc/user/storage_management_automation.md
+++ b/doc/user/storage_management_automation.md
@@ -71,7 +71,7 @@ glab api groups/YOURGROUPNAME/projects
 
 #### Using the GitLab CLI
 
-Some API endpoints require [pagination](../api/rest/index.md#pagination) and subsequent page fetches to retrieve all results. The GitLab CLI provides the flag `--paginate`.
+Some API endpoints require [pagination](../api/rest/_index.md#pagination) and subsequent page fetches to retrieve all results. The GitLab CLI provides the flag `--paginate`.
 
 Requests that require a POST body formatted as JSON data can be written as `key=value` pairs passed to the `--raw-field` parameter.
 
diff --git a/tooling/graphql/docs/templates/default.md.haml b/tooling/graphql/docs/templates/default.md.haml
index c6be93e2e6cc1e92e5c9dff2cbb77b740bb99b04..dc5bc62af84d9a345a23eab3fa1290948c164a5f 100644
--- a/tooling/graphql/docs/templates/default.md.haml
+++ b/tooling/graphql/docs/templates/default.md.haml
@@ -5,14 +5,14 @@
 :plain
   This documentation is self-generated based on GitLab current GraphQL schema.
 
-  The API can be explored using the [interactive GraphQL explorer](../index.md#interactive-graphql-explorer). Developers can also [generate a machine-readable GraphQL schema in IDL and JSON formats](../../../development/rake_tasks.md#update-machine-readable-schema-files).
+  The API can be explored using the [interactive GraphQL explorer](../_index.md#interactive-graphql-explorer). Developers can also [generate a machine-readable GraphQL schema in IDL and JSON formats](../../../development/rake_tasks.md#update-machine-readable-schema-files).
 
   Each table below documents a GraphQL type. Types match loosely to models, but not all
   fields and methods on a model are available via GraphQL.
 
   WARNING:
   Fields that are deprecated are marked with **{warning-solid}**.
-  Items (fields, enums, etc) that have been removed according to our [deprecation process](../index.md#deprecation-and-removal-process) can be found
+  Items (fields, enums, etc) that have been removed according to our [deprecation process](../_index.md#deprecation-and-removal-process) can be found
   in [Removed Items](../removed_items.md).
 
   <!-- vale off -->