diff --git a/doc/development/ai_architecture.md b/doc/development/ai_architecture.md
index 545cebef8eb0c64b261b83a3f07993746a23962b..e19320d7e2c2603206577dc9ab76376003e166bc 100644
--- a/doc/development/ai_architecture.md
+++ b/doc/development/ai_architecture.md
@@ -68,7 +68,7 @@ AIGW -down-> Models : prompts
 
 ## SaaS-based AI abstraction layer
 
-GitLab currently operates a cloud-hosted AI architecture. We will allow access to it for licensed self managed instances using the AI-gateway. See [the blueprint](../architecture/blueprints/ai_gateway) for details.
+GitLab currently operates a cloud-hosted AI architecture. We will allow access to it for licensed self managed instances using the AI-gateway. See [the blueprint](../architecture/blueprints/ai_gateway/index.md) for details.
 
 There are two primary reasons for this: the best AI models are cloud-based as they often depend on specialized hardware designed for this purpose, and operating self-managed infrastructure capable of AI at-scale and with appropriate performance is a significant undertaking. We are actively [tracking self-managed customers interested in AI](https://gitlab.com/gitlab-org/gitlab/-/issues/409183).
 
diff --git a/doc/development/ai_features/duo_chat.md b/doc/development/ai_features/duo_chat.md
index d855a0c589cc15b62e0d0274de292fb4fb3cdb8c..ab5b31ac4c4e36f6af0f17c166f9fa48a981df41 100644
--- a/doc/development/ai_features/duo_chat.md
+++ b/doc/development/ai_features/duo_chat.md
@@ -342,9 +342,9 @@ run the `rspec-ee unit gitlab-duo-chat-qa` on the `master` the branch:
    run and then manually kick off this job by selecting the "Play" icon.
 
 When the test runs on `master`, the reporter script posts the generated report as an issue,
-saves the evaluations artfacts as a snippet, and updates the tracking issue in
+saves the evaluations artifacts as a snippet, and updates the tracking issue in
 [`GitLab-org/ai-powered/ai-framework/qa-evaluation#1`](https://gitlab.com/gitlab-org/ai-powered/ai-framework/qa-evaluation/-/issues/1)
-in the project [`GitLab-org/ai-powered/ai-framework/qa-evaluation`](<https://gitlab.com/gitlab-org/ai-powered/ai-framework/qa-evaluation>).
+in the project [`GitLab-org/ai-powered/ai-framework/qa-evaluation`](https://gitlab.com/gitlab-org/ai-powered/ai-framework/qa-evaluation).
 
 ## GraphQL Subscription
 
diff --git a/doc/development/documentation/experiment_beta.md b/doc/development/documentation/experiment_beta.md
index 776b25ba67c404fdd06ca6af43006bf0e3d994fc..b7bbac100e28e79ce5ff646c9ba6b160ec2dc23f 100644
--- a/doc/development/documentation/experiment_beta.md
+++ b/doc/development/documentation/experiment_beta.md
@@ -28,7 +28,7 @@ For example:
 DETAILS:
 **Status:** Experiment
 
-> - [Introduced](link) in GitLab 15.10. This feature is an [experiment](<link_to>/policy/experiment-beta-support.md).
+> - [Introduced](https://issue-link) in GitLab 15.10. This feature is an [experiment](<link_to>/policy/experiment-beta-support.md).
 
 FLAG:
 On self-managed GitLab, by default this feature is not available.
@@ -39,7 +39,7 @@ Use this new feature when you need to do this new thing.
 
 This feature is an [experiment](<link_to>/policy/experiment-beta-support.md). To join
 the list of users testing this feature, do this thing. If you find a bug,
-[open an issue](link).
+[open an issue](https://link).
 ```
 
 When the feature is ready for production, remove:
diff --git a/doc/development/documentation/feature_flags.md b/doc/development/documentation/feature_flags.md
index 8cbb06703954252bbc651157912b6c3ff8aa47d7..7dbb23b6cbe07b31d9b5829e57b8ab5cb6bd940b 100644
--- a/doc/development/documentation/feature_flags.md
+++ b/doc/development/documentation/feature_flags.md
@@ -49,18 +49,18 @@ When the state of a flag changes (for example, from disabled by default to enabl
 Possible history entries are:
 
 ```markdown
-> - [Introduced](issue-link) in GitLab X.X [with a flag](../../administration/feature_flags.md) named `flag_name`. Disabled by default.
-> - [Enabled on GitLab.com](issue-link) in GitLab X.X.
-> - [Enabled on self-managed and GitLab Dedicated](issue-link) in GitLab X.X.
-> - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](issue-link) in GitLab X.X.
-> - [Generally available](issue-link) in GitLab X.Y. Feature flag `flag_name` removed.
+> - [Introduced](https://issue-link) in GitLab X.X [with a flag](../../administration/feature_flags.md) named `flag_name`. Disabled by default.
+> - [Enabled on GitLab.com](https://issue-link) in GitLab X.X.
+> - [Enabled on self-managed and GitLab Dedicated](https://issue-link) in GitLab X.X.
+> - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](https://issue-link) in GitLab X.X.
+> - [Generally available](https://issue-link) in GitLab X.Y. Feature flag `flag_name` removed.
 ```
 
 These entries might not fit every scenario. You can adjust to suit your needs.
 For example, a flag might be enabled for a group, project, or subset of users only.
 In that case, you can use a history entry like:
 
-`> - [Enabled on GitLab.com](issue-link) in GitLab X.X for a subset of users.`
+`> - [Enabled on GitLab.com](https://issue-link) in GitLab X.X for a subset of users.`
 
 ## Add a flag note
 
@@ -87,7 +87,7 @@ This feature is available for testing, but not ready for production use.
 The following examples show the progression of a feature flag. Update the history with every change:
 
 ```markdown
-> - [Introduced](issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
+> - [Introduced](https://issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
 
 FLAG:
 The availability of this feature is controlled by a feature flag. For more information, see the history.
@@ -96,8 +96,8 @@ The availability of this feature is controlled by a feature flag. For more infor
 When the feature is enabled by default on GitLab.com:
 
 ```markdown
-> - [Introduced](issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
-> - [Enabled on GitLab.com](issue-link) in GitLab 13.8.
+> - [Introduced](https://issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
+> - [Enabled on GitLab.com](https://issue-link) in GitLab 13.8.
 
 FLAG:
 The availability of this feature is controlled by a feature flag. For more information, see the history.
@@ -106,9 +106,9 @@ The availability of this feature is controlled by a feature flag. For more infor
 When the feature is enabled by default for all offerings:
 
 ```markdown
-> - [Introduced](issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
-> - [Enabled on GitLab.com](issue-link) in GitLab 13.8.
-> - [Enabled on self-managed and GitLab Dedicated](issue-link) in GitLab 13.9.
+> - [Introduced](https://issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
+> - [Enabled on GitLab.com](https://issue-link) in GitLab 13.8.
+> - [Enabled on self-managed and GitLab Dedicated](https://issue-link) in GitLab 13.9.
 
 FLAG:
 The availability of this feature is controlled by a feature flag. For more information, see the history.
@@ -117,10 +117,10 @@ The availability of this feature is controlled by a feature flag. For more infor
 When the flag is removed, add a `Generally available` entry. Ensure that you delete the `FLAG` note as well:
 
 ```markdown
-> - [Introduced](issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
-> - [Enabled on GitLab.com](issue-link) in GitLab 13.8.
-> - [Enabled on self-managed and GitLab Dedicated](issue-link) in GitLab 13.9.
-> - [Generally available](issue-link) in GitLab 14.0. Feature flag `forti_token_cloud` removed.
+> - [Introduced](https://issue-link) in GitLab 13.7 [with a flag](../../administration/feature_flags.md) named `forti_token_cloud`. Disabled by default.
+> - [Enabled on GitLab.com](https://issue-link) in GitLab 13.8.
+> - [Enabled on self-managed and GitLab Dedicated](https://issue-link) in GitLab 13.9.
+> - [Generally available](https://issue-link) in GitLab 14.0. Feature flag `forti_token_cloud` removed.
 ```
 
 ## Simplify long history
@@ -132,16 +132,16 @@ Combine entries if they happened in the same release:
 - Before:
 
   ```markdown
-  > - [Introduced](issue-link) in GitLab 14.2 [with a flag](../../administration/feature_flags.md) named `ci_include_rules`. Disabled by default.
-  > - [Enabled on GitLab.com](issue-link) in GitLab 14.3.
-  > - [Enabled on self-managed and GitLab Dedicated](issue-link) in GitLab 14.3.
+  > - [Introduced](https://issue-link) in GitLab 14.2 [with a flag](../../administration/feature_flags.md) named `ci_include_rules`. Disabled by default.
+  > - [Enabled on GitLab.com](https://issue-link) in GitLab 14.3.
+  > - [Enabled on self-managed and GitLab Dedicated](https://issue-link) in GitLab 14.3.
   ```
 
 - After:
 
   ```markdown
-  > - [Introduced](issue-link) in GitLab 14.2 [with a flag](../../administration/feature_flags.md) named `ci_include_rules`. Disabled by default.
-  > - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](issue-link) in GitLab 14.3.
+  > - [Introduced](https://issue-link) in GitLab 14.2 [with a flag](../../administration/feature_flags.md) named `ci_include_rules`. Disabled by default.
+  > - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](https://issue-link) in GitLab 14.3.
   ```
 
 Delete `Enabled on GitLab.com` entries only when the feature is enabled by default for all offerings and the flag is removed:
@@ -149,16 +149,16 @@ Delete `Enabled on GitLab.com` entries only when the feature is enabled by defau
 - Before:
 
   ```markdown
-  > - [Introduced](issue-link) in GitLab 15.6 [with a flag](../../administration/feature_flags.md) named `ci_hooks_pre_get_sources_script`. Disabled by default.
-  > - [Enabled on GitLab.com](issue-link) in GitLab 15.7.
-  > - [Enabled on self-managed and GitLab Dedicated](issue-link) in GitLab 15.8.
-  > - [Generally available](issue-link) in GitLab 15.9. Feature flag `ci_hooks_pre_get_sources_script` removed.
+  > - [Introduced](https://issue-link) in GitLab 15.6 [with a flag](../../administration/feature_flags.md) named `ci_hooks_pre_get_sources_script`. Disabled by default.
+  > - [Enabled on GitLab.com](https://issue-link) in GitLab 15.7.
+  > - [Enabled on self-managed and GitLab Dedicated](https://issue-link) in GitLab 15.8.
+  > - [Generally available](https://issue-link) in GitLab 15.9. Feature flag `ci_hooks_pre_get_sources_script` removed.
   ```
 
 - After:
 
   ```markdown
-  > - [Introduced](issue-link) in GitLab 15.6 [with a flag](../../administration/feature_flags.md) named `ci_hooks_pre_get_sources_script`. Disabled by default.
-  > - [Enabled on self-managed and GitLab Dedicated](issue-link) in GitLab 15.8.
-  > - [Generally available](issue-link) in GitLab 15.9. Feature flag `ci_hooks_pre_get_sources_script` removed.
+  > - [Introduced](https://issue-link) in GitLab 15.6 [with a flag](../../administration/feature_flags.md) named `ci_hooks_pre_get_sources_script`. Disabled by default.
+  > - [Enabled on self-managed and GitLab Dedicated](https://issue-link) in GitLab 15.8.
+  > - [Generally available](https://issue-link) in GitLab 15.9. Feature flag `ci_hooks_pre_get_sources_script` removed.
   ```
diff --git a/doc/development/documentation/restful_api_styleguide.md b/doc/development/documentation/restful_api_styleguide.md
index 52b5a617f0b08f4315b8292ca5d0b2acca2405c5..6117a623dd80edc58c7dceadc3127d71c91891a1 100644
--- a/doc/development/documentation/restful_api_styleguide.md
+++ b/doc/development/documentation/restful_api_styleguide.md
@@ -106,7 +106,7 @@ for the section. For example:
 ```markdown
 ### Edit a widget
 
-> - `widget_message` [introduced](<link-to-issue>) in GitLab 14.3.
+> - `widget_message` [introduced](https://link-to-issue) in GitLab 14.3.
 ```
 
 If the API or attribute is deployed behind a feature flag,
@@ -122,7 +122,7 @@ To deprecate an attribute:
 1. Add a history note.
 
    ```markdown
-   > - `widget_name` [deprecated](<link-to-issue>) in GitLab 14.7.
+   > - `widget_name` [deprecated](https://link-to-issue) in GitLab 14.7.
    ```
 
 1. Add inline deprecation text to the description.
@@ -130,7 +130,7 @@ To deprecate an attribute:
    ```markdown
    | Attribute     | Type   | Required | Description |
    |---------------|--------|----------|-------------|
-   | `widget_name` | string | No       | [Deprecated](<link-to-issue>) in GitLab 14.7 and is planned for removal in 15.4. Use `widget_id` instead. The name of the widget. |
+   | `widget_name` | string | No       | [Deprecated](https://link-to-issue) in GitLab 14.7 and is planned for removal in 15.4. Use `widget_id` instead. The name of the widget. |
    ```
 
 To widely announce a deprecation, or if it's a breaking change,
diff --git a/doc/development/documentation/styleguide/availability_details.md b/doc/development/documentation/styleguide/availability_details.md
index 09c433e7820e82ffee91f666c5146ee0a643f0e6..1ea4da3fabdb700b00687493cecc80f920e4a12e 100644
--- a/doc/development/documentation/styleguide/availability_details.md
+++ b/doc/development/documentation/styleguide/availability_details.md
@@ -21,7 +21,7 @@ DETAILS:
 **Offering:** GitLab.com, Self-managed, GitLab Dedicated
 **Status:** Experiment
 
-> - [Introduced](<link-to-issue>) in GitLab 16.3.
+> - [Introduced](https://link-to-issue) in GitLab 16.3.
 > - Updated in GitLab 16.4.
 ```
 
diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md
index 895508ee8da1b34d2a401e3c5e44ad9ade4bb28f..21e9885c3df7c5fd2878a0f2b684f0d03cd0a51a 100644
--- a/doc/development/documentation/styleguide/index.md
+++ b/doc/development/documentation/styleguide/index.md
@@ -857,13 +857,13 @@ Follow these guidelines for link text.
 
 As much as possible, use text that follows one of these patterns:
 
-- `For more information, see [LINK TEXT](LINK)`.
-- `To [DO THIS THING], see [LINK TEXT](LINK)`
+- `For more information, see [link text](link.md)`.
+- `To [DO THIS THING], see [link text](link.md)`
 
 For example:
 
-- `For more information, see [merge requests](LINK).`
-- `To create a review app, see [review apps](LINK).`
+- `For more information, see [merge requests](link.md).`
+- `To create a review app, see [review apps](link.md).`
 
 You can expand on this text by using phrases like
 `For more information about this feature, see...`
@@ -872,8 +872,8 @@ Do not use the following constructions:
 
 - `Learn more about...`
 - `To read more...`.
-- `For more information, see the [Merge requests](LINK) page.`
-- `For more information, see the [Merge requests](LINK) documentation.`
+- `For more information, see the [Merge requests](link.md) page.`
+- `For more information, see the [Merge requests](link.md) documentation.`
 
 #### Descriptive text rather than `here`
 
@@ -881,18 +881,18 @@ Use descriptive text for links, rather than words like `here` or `this page.`
 
 For example, instead of:
 
-- `For more information, see [this page](LINK).`
-- `For more information, go [here](LINK).`
+- `For more information, see [this page](link.md).`
+- `For more information, go [here](link.md).`
 
 Use:
 
-- `For more information, see [merge requests](LINK)`.
+- `For more information, see [merge requests](link.md)`.
 
 #### Links to issues
 
 When linking to an issue, include the issue number in the link. For example:
 
-- `For more information, see [issue 12345](LINK).`
+- `For more information, see [issue 12345](link.md).`
 
 Do not use the pound sign (`issue #12345`).
 
@@ -1420,7 +1420,7 @@ videos that might be out-of-date.
 
 ```markdown
 <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
-For an overview, see [Video Title](link-to-video).
+For an overview, see [Video Title](https://link-to-video).
 <!-- Video published on YYYY-MM-DD -->
 ```
 
@@ -1489,7 +1489,7 @@ With this formatting:
 Linking to click-through demos should follow similar guidelines to [videos](#videos).
 
 ```markdown
-For a click-through demo, see [Demo Title](link-to-demo).
+For a click-through demo, see [Demo Title](https://link-to-demo).
 <!-- Demo published on YYYY-MM-DD -->
 ```
 
diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md
index 5776ce37a6aeb1ed68c5fac2f5c8fbbe040953b9..5e3d65a07cfaa1e8a162a2ee42fee4b1c3b5de57 100644
--- a/doc/development/documentation/styleguide/word_list.md
+++ b/doc/development/documentation/styleguide/word_list.md
@@ -12,7 +12,7 @@ recommends these word choices. In addition:
 
 - The GitLab handbook contains a list of
   [top misused terms](https://handbook.gitlab.com/handbook/communication/top-misused-terms/).
-- The documentation [style guide](../styleguide#language) includes details
+- The documentation [style guide](../styleguide/index.md#language) includes details
   about language and capitalization.
 - The GitLab handbook provides guidance on the [use of third-party trademarks](https://handbook.gitlab.com/handbook/legal/policies/product-third-party-trademarks-guidelines/#process-for-adding-third-party-trademarks-to-gitlab).
 
diff --git a/doc/development/documentation/topic_types/get_started.md b/doc/development/documentation/topic_types/get_started.md
index 60f03e4a5b889c0f497e37c94b8641faf503d904..9d418aa6c905ee617c05b89cebef6b608b5dc2e0 100644
--- a/doc/development/documentation/topic_types/get_started.md
+++ b/doc/development/documentation/topic_types/get_started.md
@@ -53,8 +53,8 @@ Finally, add links, in this format:
 
 For more information, see:
 
-- [Create your first abc](LINK).
-- [Learn more about abc](LINK).
+- [Create your first abc](link.md).
+- [Learn more about abc](link.md).
 
 ## Step 2: The next thing
 
@@ -62,8 +62,8 @@ Don't link in the body content. Save links for the `for more information` area.
 
 For more information, see:
 
-- [Create your first abc](LINK).
-- [Learn more about abc](LINK).
+- [Create your first abc](link.md).
+- [Learn more about abc](link.md).
 ```
 
 ## Get started page titles
diff --git a/doc/development/documentation/topic_types/index.md b/doc/development/documentation/topic_types/index.md
index da7dd50b94c0ab6985c2add39d721cb3dffcde6c..3d03b07538b39576f883e916218faf80f81f8514 100644
--- a/doc/development/documentation/topic_types/index.md
+++ b/doc/development/documentation/topic_types/index.md
@@ -64,6 +64,6 @@ full sentences, and so should not end in a period.
 ```markdown
 ## Related topics
 
-- [CI/CD variables](link-to-topic)
-- [Environment variables](link-to-topic)
+- [CI/CD variables](link-to-topic.md)
+- [Environment variables](link-to-topic.md)
 ```
diff --git a/doc/development/documentation/topic_types/task.md b/doc/development/documentation/topic_types/task.md
index 2130a28c56c170fc955daf0005cb6e9a8985ade8..c0ae98ce4845e86085be8ba21e35e55e91d1aca9 100644
--- a/doc/development/documentation/topic_types/task.md
+++ b/doc/development/documentation/topic_types/task.md
@@ -138,7 +138,7 @@ When this situation occurs:
 - If someone feels strongly that you mention the API, at the end
   of the UI task, add this sentence:
 
-  `To create an issue, you can also [use the API](link).`
+  `To create an issue, you can also [use the API](link.md).`
 
 ## Task introductions
 
diff --git a/doc/development/documentation/versions.md b/doc/development/documentation/versions.md
index 256d79ca7e696d98f7226a743c48deb35af08eb1..96a75afbf99ee07ce66e84b58fd5cf2210f5735a 100644
--- a/doc/development/documentation/versions.md
+++ b/doc/development/documentation/versions.md
@@ -37,7 +37,7 @@ For example:
 ```markdown
 ## Feature name
 
-> - [Introduced](<link-to-issue>) in GitLab 11.3.
+> - [Introduced](https://issue-link) in GitLab 11.3.
 
 This feature does something.
 ```
@@ -67,15 +67,15 @@ Start the sentence with the feature name or a gerund.
 For example, on the issue boards page:
 
 ```markdown
-> - [Introduced](<link-to-issue>) in GitLab 13.1.
-> - Creating an issue from an issue board [introduced](<link-to-issue>) in GitLab 14.1.
+> - [Introduced](https://issue-link) in GitLab 13.1.
+> - Creating an issue from an issue board [introduced](https://issue-link) in GitLab 14.1.
 ```
 
 Or on email notifications page:
 
 ```markdown
-> - [Introduced](<link-to-issue>) in GitLab 13.1.
-> - Notifications for expiring tokens [introduced](<link-to-issue>) in GitLab 14.3.
+> - [Introduced](https://issue-link) in GitLab 13.1.
+> - Notifications for expiring tokens [introduced](https://issue-link) in GitLab 14.3.
 ```
 
 #### Making features available as part of a program
@@ -83,8 +83,8 @@ Or on email notifications page:
 When a feature is made available to users as a part of a program, add a new list item.
 
 ```markdown
-> - [Introduced](<link-to-issue>) in GitLab 15.1.
-> - Merged results pipelines [added](<link-to-issue>) to the [Registration Features Program](<link-to-page>) in GitLab 16.7.
+> - [Introduced](https://issue-link) in GitLab 15.1.
+> - Merged results pipelines [added](https://issue-link) to the [Registration Features Program](https://page-link) in GitLab 16.7.
 ```
 
 #### Moving subscription tiers
@@ -92,8 +92,8 @@ When a feature is made available to users as a part of a program, add a new list
 If a feature is moved to another subscription tier, use `moved`:
 
 ```markdown
-> - [Moved](<link-to-issue>) from GitLab Ultimate to GitLab Premium in 11.8.
-> - [Moved](<link-to-issue>) from GitLab Premium to GitLab Free in 12.0.
+> - [Moved](https://issue-link) from GitLab Ultimate to GitLab Premium in 11.8.
+> - [Moved](https://issue-link) from GitLab Premium to GitLab Free in 12.0.
 ```
 
 #### Changing the feature status
@@ -101,14 +101,14 @@ If a feature is moved to another subscription tier, use `moved`:
 If the feature status changes to experiment or beta, use `changed`:
 
 ```markdown
-> - [Introduced](<link-to-issue>) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 15.7.
-> - [Changed](<link-to-issue>) to beta in GitLab 16.0.
+> - [Introduced](https://issue-link) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 15.7.
+> - [Changed](https://issue-link) to beta in GitLab 16.0.
 ```
 
 For a change to generally available, use:
 
 ```markdown
-> - [Generally available](issue-link) in GitLab 16.10.
+> - [Generally available](https://issue-link) in GitLab 16.10.
 ```
 
 #### Features introduced behind feature flags
@@ -123,7 +123,7 @@ inline with the existing text. If possible, include a link to the related issue,
 merge request, or epic. For example:
 
 ```markdown
-The voting strategy [in GitLab 13.4 and later](<link-to-issue>) requires the primary and secondary
+The voting strategy [in GitLab 13.4 and later](https://issue-link) requires the primary and secondary
 voters to agree.
 ```
 
@@ -150,8 +150,8 @@ To deprecate a page or topic:
    **Offering:** GitLab.com, Self-managed, GitLab Dedicated
 
    WARNING:
-   This feature was [deprecated](<link-to-issue>) in GitLab 14.8
-   and is planned for removal in 15.4. Use [feature X](<link-to-docs>) instead.
+   This feature was [deprecated](https://issue-link) in GitLab 14.8
+   and is planned for removal in 15.4. Use [feature X](link-to-docs.md) instead.
    ```
 
    If you're not sure when the feature will be removed or no
@@ -178,8 +178,8 @@ To deprecate a page or topic:
    **Offering:** GitLab.com, Self-managed, GitLab Dedicated
 
    WARNING:
-   This feature was [deprecated](<link-to-issue>) in GitLab 14.8
-   and is planned for removal in 15.4. Use [feature X](<link-to-docs>) instead.
+   This feature was [deprecated](https://issue-link) in GitLab 14.8
+   and is planned for removal in 15.4. Use [feature X](link-to-docs.md) instead.
 
    <!--- end_remove -->
    ```
@@ -216,9 +216,9 @@ To remove a page:
    **Tier:** Premium, Ultimate
    **Offering:** GitLab.com, Self-managed, GitLab Dedicated
 
-   This feature was [deprecated](<link-to-issue>) in GitLab X.Y
-   and [removed](<link-to-issue>) in X.Y.
-   Use [feature X](<link-to-docs>) instead.
+   This feature was [deprecated](https://issue-link) in GitLab X.Y
+   and [removed](https://issue-link) in X.Y.
+   Use [feature X](link-to-docs.md) instead.
    ```
 
 1. Remove the page's entry from the global navigation by editing [`navigation.yaml`](https://gitlab.com/gitlab-org/gitlab-docs/blob/main/content/_data/navigation.yaml) in `gitlab-docs`.
@@ -245,9 +245,9 @@ To remove a topic:
    **Tier:** Premium, Ultimate
    **Offering:** GitLab.com, Self-managed, GitLab Dedicated
 
-   This feature was [deprecated](<link-to-issue>) in GitLab X.Y
-   and [removed](<link-to-issue>) in X.Y.
-   Use [feature X](<link-to-docs>) instead.
+   This feature was [deprecated](https://issue-link) in GitLab X.Y
+   and [removed](https://issue-link) in X.Y.
+   Use [feature X](link-to-docs.md) instead.
 
    <!--- end_remove -->
    ```
@@ -316,8 +316,8 @@ We cannot guarantee future feature work, and promises
 like these can raise legal issues. Instead, say that an issue exists.
 For example:
 
-- Support for improvements is proposed in `[issue <issue_number>](LINK-TO-ISSUE)`.
-- You cannot do this thing, but `[issue 12345](LINK-TO-ISSUE)` proposes to change this behavior.
+- Support for improvements is proposed in `[issue <issue_number>](https://link-to-issue)`.
+- You cannot do this thing, but `[issue 12345](https://link-to-issue)` proposes to change this behavior.
 
 You can say that we plan to remove a feature.
 
diff --git a/doc/development/experiment_guide/experiment_rollout.md b/doc/development/experiment_guide/experiment_rollout.md
index 3dc2bba5915880af394abda179614209a16af4a0..b24b50ab4061db73d38d3a397b8fb6885a660a9e 100644
--- a/doc/development/experiment_guide/experiment_rollout.md
+++ b/doc/development/experiment_guide/experiment_rollout.md
@@ -23,7 +23,7 @@ In either case, an outcome of the experiment should be posted to the issue with
 
 When there is a case on GitLab.com (SaaS) that necessitates turning off all experiments, we have this control.
 
-You can toggle experiments on SaaS on and off using the `gitlab_experiment` [feature flag](../feature_flags).
+You can toggle experiments on SaaS on and off using the `gitlab_experiment` [feature flag](../feature_flags/index.md).
 
 This can be done via ChatOps:
 
diff --git a/doc/development/fe_guide/graphql.md b/doc/development/fe_guide/graphql.md
index 258b4afe89e74515183ae95507ab6b30a8728185..538890fb3e8858439de4c67c291e70e40c085913 100644
--- a/doc/development/fe_guide/graphql.md
+++ b/doc/development/fe_guide/graphql.md
@@ -80,7 +80,7 @@ the GraphQL extension, follow these steps:
 
 Our GraphQL API can be explored via GraphiQL at your instance's
 `/-/graphql-explorer` or at [GitLab.com](https://gitlab.com/-/graphql-explorer). Consult the
-[GitLab GraphQL API Reference documentation](../../api/graphql/reference)
+[GitLab GraphQL API Reference documentation](../../api/graphql/reference/index.md)
 where needed.
 
 To check all existing queries and mutations, on the right side of GraphiQL, select **Documentation explorer**.
diff --git a/doc/development/image_scaling.md b/doc/development/image_scaling.md
index 05792bfd5a3ef050458006f991cce78c12a7d5b6..01dca815be853372e8d9be285a37849c94a2c664 100644
--- a/doc/development/image_scaling.md
+++ b/doc/development/image_scaling.md
@@ -31,7 +31,7 @@ The hard-coded rules only permit:
 
 Furthermore, configuration in Workhorse can lead to the image scaler rejecting a request if:
 
-- The image file is too large (controlled by [`max_filesize`](- we only rescale images that do not exceed a configured size in bytes (see [`max_filesize`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/workhorse/config.toml.example#L22)))).
+- The image file is too large (controlled by `max_filesize`, we only rescale images that do not exceed a configured size in bytes, see [`max_filesize`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/workhorse/config.toml.example#L22)).
 - Too many image scalers are already running (controlled by [`max_scaler_procs`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/workhorse/config.toml.example#L21)).
 
 For instance, here are two different URLs that serve the GitLab project avatar both in its
diff --git a/doc/development/integrations/secure_partner_integration.md b/doc/development/integrations/secure_partner_integration.md
index e8bc3665246328470f26ceaa7b19ac055ae83657..5573fa49dc740f702cb29689486b3f0372d65c22 100644
--- a/doc/development/integrations/secure_partner_integration.md
+++ b/doc/development/integrations/secure_partner_integration.md
@@ -77,7 +77,7 @@ and complete an integration with the Secure stage.
 1. Get a test account to begin developing your integration. You can
    request a [GitLab.com Subscription Sandbox](https://about.gitlab.com/partners/technology-partners/integrate/#gitlabcom-subscription-sandbox-request)
    or an [EE Developer License](https://about.gitlab.com/partners/technology-partners/integrate/#requesting-ultimate-dev-license-for-rd).
-1. Provide a [pipeline job](../../development/pipelines)
+1. Provide a [pipeline job](../../development/pipelines/index.md)
    template that users could integrate into their own GitLab pipelines.
 1. Create a report artifact with your pipeline jobs.
 1. Ensure your pipeline jobs create a report artifact that GitLab can process
diff --git a/doc/development/logging.md b/doc/development/logging.md
index 70942840d08386dedf5db77f9bc5b9a7c11bb53f..c19f6562277e4c89e34da3e10ec377bf918a60e3 100644
--- a/doc/development/logging.md
+++ b/doc/development/logging.md
@@ -189,7 +189,7 @@ logger.info(a_list: ["foo", 1, true])
 Resources:
 
 - [Elasticsearch mapping - avoiding type gotchas](https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html#_avoiding_type_gotchas)
-- [Elasticsearch mapping types]( https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html)
+- [Elasticsearch mapping types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html)
 
 #### Include a class attribute
 
diff --git a/doc/development/sec/analyzer_development_guide.md b/doc/development/sec/analyzer_development_guide.md
index 879a6d084b0aa8c68fbd64142f56f628fb03f5c2..6f1d6f209cba5bbfa75d8c49dc5a2e778c673b98 100644
--- a/doc/development/sec/analyzer_development_guide.md
+++ b/doc/development/sec/analyzer_development_guide.md
@@ -39,7 +39,7 @@ Analyzers are shipped as Docker images. For example, to run the
        registry.gitlab.com/gitlab-org/security-products/analyzers/semgrep:latest /analyzer run
    ```
 
-1. The Docker container generates a report in the mounted project directory with a report filename corresponding to the analyzer category. For example, [SAST](../../user/application_security/sast) generates a file named `gl-sast-report.json`.
+1. The Docker container generates a report in the mounted project directory with a report filename corresponding to the analyzer category. For example, [SAST](../../user/application_security/sast/index.md) generates a file named `gl-sast-report.json`.
 
 ## Analyzers development
 
diff --git a/doc/development/sec/index.md b/doc/development/sec/index.md
index 9e8486b26fa6675beba8f1ce615b196a1053ad97..2e7c0573231c7f28652107fb9ed078b1bcb7d4cf 100644
--- a/doc/development/sec/index.md
+++ b/doc/development/sec/index.md
@@ -9,7 +9,7 @@ info: Any user with at least the Maintainer role can merge updates to this conte
 The Sec section is responsible for GitLab application security features, the "Sec" part of
 DevSecOps. Development guides that are specific to the Sec section are listed here.
 
-See [Terminology](../../user/application_security/terminology) for an overview of our shared terminology.
+See [Terminology](../../user/application_security/terminology/index.md) for an overview of our shared terminology.
 
 ## Architecture
 
@@ -78,7 +78,7 @@ If you are working with CI/CD templates, read the [development guide for GitLab
 Within analyzer JSON reports, the [`identifiers` field](../integrations/secure.md#identifiers) contains a collection of types and categories by which
 a vulnerability can be described (that is, a CWE family).
 
-The first item in the `identifiers` collection is known as the [primary identifier](../../user/application_security/terminology#primary-identifier),
+The first item in the `identifiers` collection is known as the [primary identifier](../../user/application_security/terminology/index.md#primary-identifier),
 a critical component to both describing and tracking vulnerabilities.
 
 In most other cases, the `identifiers` collection is unordered, where the remaining secondary identifiers act as metadata for grouping vulnerabilities
diff --git a/doc/development/sec/security_report_ingestion_overview.md b/doc/development/sec/security_report_ingestion_overview.md
index f307f5b3b9a96f4c63da022703402c4e755947c8..d959370154c1a462fc1ba6ac91ac60b31b63cbaf 100644
--- a/doc/development/sec/security_report_ingestion_overview.md
+++ b/doc/development/sec/security_report_ingestion_overview.md
@@ -60,7 +60,7 @@ An instance of the `Vulnerabilities::Remediation` class. A remediation is repres
 Assumptions:
 
 - Project uses GitLab CI
-- Project uses [security scanning tools](../../user/application_security)
+- Project uses [security scanning tools](../../user/application_security/index.md)
 - No Vulnerabilities are present in the database
 - All pipelines perform security scans
 
@@ -120,5 +120,5 @@ This style of creation was intended to be fast and seamless, but has proven diff
 The "No longer detected" badge on the vulnerability report is displayed if the `Vulnerability` record has `resolved_on_default_branch: true`.
 This is set by `Security::Ingestion::MarkAsResolvedService` when a pipeline runs on the default branch. Vulnerabilities which have
 `resolved_on_default_branch: false` and _are not_ present in the pipeline scan results are marked as resolved.
-[Secret Detection](../../user/application_security/secret_detection) and [manual](../../user/application_security/vulnerability_report#manually-add-a-vulnerability)
+[Secret Detection](../../user/application_security/secret_detection/index.md) and [manual](../../user/application_security/vulnerability_report/index.md#manually-add-a-vulnerability)
 vulnerabilities are excluded from this process.
diff --git a/doc/development/secure_coding_guidelines.md b/doc/development/secure_coding_guidelines.md
index 5b6805266ce004a2cd18d3752a1382c493f45aa5..596cc912c15beb87c85aad4d8ed9472f1ffb6e14 100644
--- a/doc/development/secure_coding_guidelines.md
+++ b/doc/development/secure_coding_guidelines.md
@@ -1361,7 +1361,7 @@ This sensitive data must be handled carefully to avoid leaks which could lead to
   - The [Gitleaks Git hook](https://gitlab.com/gitlab-com/gl-security/security-research/gitleaks-endpoint-installer) is recommended for preventing credentials from being committed.
 - Never log credentials under any circumstance. Issue [#353857](https://gitlab.com/gitlab-org/gitlab/-/issues/353857) is an example of credential leaks through log file.
 - When credentials are required in a CI/CD job, use [masked variables](../ci/variables/index.md#mask-a-cicd-variable) to help prevent accidental exposure in the job logs. Be aware that when [debug logging](../ci/variables/index.md#enable-debug-logging) is enabled, all masked CI/CD variables are visible in job logs. Also consider using [protected variables](../ci/variables/index.md#protect-a-cicd-variable) when possible so that sensitive CI/CD variables are only available to pipelines running on protected branches or protected tags.
-- Proper scanners must be enabled depending on what data those credentials are protecting. See the [Application Security Inventory Policy](hhttps://handbook.gitlab.com/handbook/security/product-security/application-security/inventory/#policies) and our [Data Classification Standards](https://handbook.gitlab.com/handbook/security/data-classification-standard/#standard).
+- Proper scanners must be enabled depending on what data those credentials are protecting. See the [Application Security Inventory Policy](https://handbook.gitlab.com/handbook/security/product-security/application-security/inventory/#policies) and our [Data Classification Standards](https://handbook.gitlab.com/handbook/security/data-classification-standard/#standard).
 - To store and/or share credentials between teams, refer to [1Password for Teams](https://handbook.gitlab.com/handbook/security/password-guidelines/#1password-for-teams) and follow [the 1Password Guidelines](https://handbook.gitlab.com/handbook/security/password-guidelines/#1password-guidelines).
 - If you need to share a secret with a team member, use 1Password. Do not share a secret over email, Slack, or other service on the Internet.
 
diff --git a/doc/development/spam_protection_and_captcha/exploratory_testing.md b/doc/development/spam_protection_and_captcha/exploratory_testing.md
index 71cf1ef814f443d0b0c342aa2c7a876ada3c0044..588f384ccfff903f5b5ce444741a248e4a3f12af 100644
--- a/doc/development/spam_protection_and_captcha/exploratory_testing.md
+++ b/doc/development/spam_protection_and_captcha/exploratory_testing.md
@@ -165,20 +165,6 @@ In this example, Akismet and CAPTCHA are enabled:
 
 1. [Initial request](#initial-request).
 
-<!-- TODO in future edit
-
-Some example videos:
-
-- REST API:
-
-![CAPTCHA REST API](/uploads/b148cbe45496e6f4a4f63d00bb9fbd8a/captcha_rest_api.mov)
-
-GraphQL API:
-
-![CAPTCHA GraphQL API](/uploads/3c7ef0fad0b84bd588572bae51519463/captcha_graphql_api.mov)
-
--->
-
 #### Initial request
 
 This initial request fails because no CAPTCHA response is provided.
diff --git a/doc/development/workhorse/index.md b/doc/development/workhorse/index.md
index 48c82ca39e8f3b2c53e9c2f15dea58dcc2566d98..ec8938a726e69ff2f9481a69faf167cbaf6964ac 100644
--- a/doc/development/workhorse/index.md
+++ b/doc/development/workhorse/index.md
@@ -142,9 +142,3 @@ for specific behavior but the high-level integration tests should have
 the first priority during development.
 
 It is OK if a feature is only covered by integration tests.
-
-<!--
-## License
-
-This code is distributed under the MIT license, see the [LICENSE](LICENSE) file.
--->