diff --git a/changelogs/README.md b/changelogs/README.md
index 1d1a19a0341aef1f1b7ad83b7beb32336c16e76d..24df484d6e06ff2bb4025c2c7d408edc32115aba 100644
--- a/changelogs/README.md
+++ b/changelogs/README.md
@@ -4,7 +4,7 @@ From GitLab 14.0.0 onwards, [CHANGELOG.md](../CHANGELOG.md) is generated
 by parsing [Git trailers](https://git-scm.com/docs/git-interpret-trailers)
 in commit messages.
 
-See [documentation](https://docs.gitlab.com/ee/development/changelog.html#how-to-generate-a-changelog-entry)
+See [documentation](https://docs.gitlab.com/development/changelog/#how-to-generate-a-changelog-entry)
 on how to generate changelog entries.
 
 # Changelog archival
diff --git a/danger/ce_ee_vue_templates/Dangerfile b/danger/ce_ee_vue_templates/Dangerfile
index f7715eb2a89f0a20778ba78f509bd197020c8425..4073e1f3d209adea63d211b936d80ca65b58916f 100644
--- a/danger/ce_ee_vue_templates/Dangerfile
+++ b/danger/ce_ee_vue_templates/Dangerfile
@@ -52,5 +52,5 @@ markdown(<<~MARKDOWN)
 
   An even _better_ alternative is to refactor this component to only use
   a single template for both CE and EE.  More info on this approach here:
-  https://docs.gitlab.com/ee/development/ee_features.html#template-tag
+  https://docs.gitlab.com/development/ee_features/#template-tag
 MARKDOWN
diff --git a/danger/ci_config/Dangerfile b/danger/ci_config/Dangerfile
index f29888d1ec8ffc3e08a90c020e5fa6ecad4ed6ea..dbef1fc5bed56592a4bf42b105a69ab2100168fb 100644
--- a/danger/ci_config/Dangerfile
+++ b/danger/ci_config/Dangerfile
@@ -9,7 +9,7 @@ def get_ci_config_files(files)
 end
 
 schema_path = 'app/assets/javascripts/editor/schema/ci.json'
-schema_docs_path = 'https://docs.gitlab.com/ee/development/cicd/schema.html#write-specs'
+schema_docs_path = 'https://docs.gitlab.com/development/cicd/schema/#write-specs'
 has_schema_update = all_changed_files.include?(schema_path)
 return if has_schema_update
 
diff --git a/danger/ci_tables/Dangerfile b/danger/ci_tables/Dangerfile
index 7540679cf0f4602fcc03000c7b230f4a3a51687c..5eaa43c516422ad18e58904b01a2e582d27d544c 100644
--- a/danger/ci_tables/Dangerfile
+++ b/danger/ci_tables/Dangerfile
@@ -1,9 +1,9 @@
 # frozen_string_literal: true
 
-SEE_DB_DOC = "See the [database dictionary documentation](https://docs.gitlab.com/ee/development/database/database_dictionary.html)."
+SEE_DB_DOC = "See the [database dictionary documentation](https://docs.gitlab.com/development/database/database_dictionary/)."
 
 PARTITIONING_COMMENT = <<~SUGGEST_COMMENT
-When adding new CI tables, consider [partitioning](https://docs.gitlab.com/ee/development/cicd/cicd_tables.html) the table
+When adding new CI tables, consider [partitioning](https://docs.gitlab.com/development/cicd/cicd_tables/) the table
 from the start if it references any of the larger CI tables: `ci_pipelines`, `ci_stages`, `ci_builds`, `p_ci_builds_metadata`, `ci_job_artifacts`, `ci_pipeline_variables`.
 SUGGEST_COMMENT
 
diff --git a/danger/database/Dangerfile b/danger/database/Dangerfile
index ae2a37d68fe3f58e07baaa024dd40423b764e694..6a668b769eb3d1d1b2c900e007d49579e0f7c629 100644
--- a/danger/database/Dangerfile
+++ b/danger/database/Dangerfile
@@ -17,7 +17,7 @@ changes are reviewed, take the following steps:
 1. Ensure the merge request has ~database and ~"database::review pending" labels.
    If the merge request modifies database files, Danger will do this for you.
 1. Prepare your MR for database review according to the
-   [docs](https://docs.gitlab.com/ee/development/database_review.html#how-to-prepare-the-merge-request-for-a-database-review).
+   [docs](https://docs.gitlab.com/development/database_review/#how-to-prepare-the-merge-request-for-a-database-review).
 1. Assign and mention the database reviewer suggested by Reviewer Roulette.
 MSG
 
@@ -31,7 +31,7 @@ by removing the ~database label and re-running the [`danger-review` job](#{ENV['
 MSG
 
 DB_MIGRATION_TESTING_REQUIRED_MESSAGE = <<~MSG
-The [database migration pipeline](https://docs.gitlab.com/ee/development/database/database_migration_pipeline.html)
+The [database migration pipeline](https://docs.gitlab.com/development/database/database_migration_pipeline/)
 must be triggered by the job `db:gitlabcom-database-testing` must be run before requesting
 ~database review. This job takes ~30m and will post the results to a comment on the merge
 request. Please run and review any results before passing to a reviewer.
@@ -43,7 +43,7 @@ DB_OLD_MIGRATIONS_MESSAGE = <<~MSG
 
   %<old_migrations>s
 
-  Please double check the timestamps and update them if possible. [Why does this matter?](https://docs.gitlab.com/ee/development/migration_style_guide.html#migration-timestamp-age)
+  Please double check the timestamps and update them if possible. [Why does this matter?](https://docs.gitlab.com/development/migration_style_guide/#migration-timestamp-age)
 MSG
 
 DATABASE_APPROVED_LABEL = 'database::approved'
diff --git a/danger/documentation/Dangerfile b/danger/documentation/Dangerfile
index c000a809f88148ec34ec0f27635d3b16bc1edc28..f2f72ec53c0ac059f13eb484490e5aef4d07f7a3 100644
--- a/danger/documentation/Dangerfile
+++ b/danger/documentation/Dangerfile
@@ -61,7 +61,7 @@ The review does not need to block merging this merge request. See the:
 
 - [Metadata for the `*.md` files](https://docs.gitlab.com/ee/development/documentation/#metadata) that you've changed. The first few lines of each `*.md` file identify the stage and group most closely associated with your docs change.
 - The [Technical Writer assigned](https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments) for that stage and group.
-- [Documentation workflows](https://docs.gitlab.com/ee/development/documentation/workflow.html) for information on when to assign a merge request for review.
+- [Documentation workflows](https://docs.gitlab.com/development/documentation/workflow/) for information on when to assign a merge request for review.
 MSG
 
 # Documentation should be updated for feature::addition and feature::enhancement
@@ -71,7 +71,7 @@ DOCUMENTATION_UPDATE_MISSING = <<~MSG
 For more information, see:
 
 - The Handbook page on [merge request types](https://handbook.gitlab.com/handbook/product/groups/product-analysis/engineering/metrics/#work-type-classification).
-- The [definition of done](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#definition-of-done) documentation.
+- The [definition of done](https://docs.gitlab.com/development/contributing/merge_request_workflow/#definition-of-done) documentation.
 MSG
 
 # Output messages
diff --git a/danger/gitaly/Dangerfile b/danger/gitaly/Dangerfile
index 228ed3fc1921efc789dbf1bf3387106a72783e0a..98c984d0f94bf2f5263187ceca4de59b3e1aa3b7 100644
--- a/danger/gitaly/Dangerfile
+++ b/danger/gitaly/Dangerfile
@@ -15,7 +15,7 @@ exercises a definition that is removed in the new Gitaly version, then that
 spec will fail.
 
 You must confirm the second assertion. Failing to do so will introduce a [non
-backward compatible change](https://docs.gitlab.com/ee/development/multi_version_compatibility.html),
+backward compatible change](https://docs.gitlab.com/development/multi_version_compatibility/),
 for example during canary deployment of GitLab.com, which can cause an incident.
 This type of problem can also impact customers performing zero-downtime upgrades.
 Some options:
diff --git a/danger/qa_selector/Dangerfile b/danger/qa_selector/Dangerfile
index 2781afa82df28eb8e55863aa127d44a000d9f622..6a177a331662481c8f768abf0c4860747d5c270a 100644
--- a/danger/qa_selector/Dangerfile
+++ b/danger/qa_selector/Dangerfile
@@ -54,7 +54,7 @@ if lines_with_testids.any?
 
     For the list of known failures please refer to [the latest pipeline triage issue](https://gitlab.com/gitlab-org/quality/pipeline-triage/-/issues).
 
-    If your changes are under a feature flag, please check our [Testing with feature flags](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/feature_flags.html#automatic-test-execution-when-a-feature-flag-definition-changes) documentation for instructions.
+    If your changes are under a feature flag, please check our [Testing with feature flags](https://docs.gitlab.com/development/testing_guide/end_to_end/feature_flags/#automatic-test-execution-when-a-feature-flag-definition-changes) documentation for instructions.
 
   MARKDOWN
 
@@ -84,7 +84,7 @@ if deprecated_qa_class.any?
   end
 
   markdown(<<~MARKDOWN)
-    Please ensure all deprecated data-qa-selector attributes are replaced with data-testid attributes in accordance with our [Testing Guide](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/page_objects.html#data-testid-vs-data-qa-selector).
+    Please ensure all deprecated data-qa-selector attributes are replaced with data-testid attributes in accordance with our [Testing Guide](https://docs.gitlab.com/development/testing_guide/end_to_end/page_objects/#data-testid-vs-data-qa-selector).
 
   MARKDOWN
 
diff --git a/danger/roulette/Dangerfile b/danger/roulette/Dangerfile
index 673241bde07cc10c8681d776368c135b9c2cfd56..b57dd5e3eddc614c9f105415157da2723ca338e1 100644
--- a/danger/roulette/Dangerfile
+++ b/danger/roulette/Dangerfile
@@ -12,7 +12,7 @@ MARKDOWN
 
 POST_TABLE_MESSAGE = <<MARKDOWN
 
-Please refer to [documentation page](https://docs.gitlab.com/ee/development/code_review.html#reviewer-roulette)
+Please refer to [documentation page](https://docs.gitlab.com/development/code_review/#reviewer-roulette)
 for guidance on how you can benefit from the Reviewer Roulette, or use the
 [GitLab Review Workload Dashboard](https://gitlab-org.gitlab.io/gitlab-roulette/)
 to find other available reviewers.
diff --git a/danger/rubygems/Dangerfile b/danger/rubygems/Dangerfile
index 8e404d88fc17344bdffea8f2a1d10bfc3cf9d8f8..9940262328c5e84ba7befc4e56ede1f6b6dda7ea 100644
--- a/danger/rubygems/Dangerfile
+++ b/danger/rubygems/Dangerfile
@@ -6,6 +6,6 @@ if all_changed_files.detect { |file| file == 'Gemfile' || file == 'Gemfile.lock'
   markdown <<~MSG
    ## Rubygems
 
-   This merge request adds, or changes a Rubygems dependency. Please review the [Gemfile guidelines](https://docs.gitlab.com/ee/development/gemfile.html).
+   This merge request adds, or changes a Rubygems dependency. Please review the [Gemfile guidelines](https://docs.gitlab.com/development/gemfile/).
   MSG
 end
diff --git a/danger/saas_feature/Dangerfile b/danger/saas_feature/Dangerfile
index 77c6362424ddf36fb912ae2f80e1dcfb991d9147..f2fdd2adf2cc884cc184d5e843a1fd45713b8179 100644
--- a/danger/saas_feature/Dangerfile
+++ b/danger/saas_feature/Dangerfile
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-SF_SEE_DOC = "see the [SaaS feature documentation](https://docs.gitlab.com/ee/development/ee_features.html#saas-only-feature)."
+SF_SEE_DOC = "see the [SaaS feature documentation](https://docs.gitlab.com/development/ee_features/#saas-only-feature)."
 
 SF_SUGGEST_MR_COMMENT = <<~SUGGEST_COMMENT.freeze
   ```suggestion
diff --git a/danger/secrets_initializer/Dangerfile b/danger/secrets_initializer/Dangerfile
index bfd8b9f2b235479a5366aeab24561b0f785d5c3a..e268553960f00bce4c7d6f9970f7d85ab11887aa 100644
--- a/danger/secrets_initializer/Dangerfile
+++ b/danger/secrets_initializer/Dangerfile
@@ -5,6 +5,6 @@ if helper.all_changed_files.detect { |file| file == 'config/initializers/01_secr
    ## Application secrets changes
 
    This merge request makes changes to application secrets.
-   Please review the [required steps to avoid upgrade or deployment problems](https://docs.gitlab.com/ee/development/application_secrets.html#warning-before-you-add-a-new-secret-to-application-secrets).
+   Please review the [required steps to avoid upgrade or deployment problems](https://docs.gitlab.com/development/application_secrets/#warning-before-you-add-a-new-secret-to-application-secrets).
   MSG
 end
diff --git a/danger/sidekiq_queues/Dangerfile b/danger/sidekiq_queues/Dangerfile
index de98af3cab2714ec9527e976bacc72dfe80fcf8d..4c3296f589fba4b82144ba064f25f5e0e412197c 100644
--- a/danger/sidekiq_queues/Dangerfile
+++ b/danger/sidekiq_queues/Dangerfile
@@ -3,7 +3,7 @@
 SCALABILITY_REVIEW_MESSAGE = <<~MSG
 ## Sidekiq queue changes
 
-This merge request contains changes to Sidekiq queues. Please follow the [documentation on changing a queue's urgency](https://docs.gitlab.com/ee/development/sidekiq/worker_attributes.html#job-urgency).
+This merge request contains changes to Sidekiq queues. Please follow the [documentation on changing a queue's urgency](https://docs.gitlab.com/development/sidekiq/worker_attributes/#job-urgency).
 MSG
 
 ADDED_QUEUES_MESSAGE = <<~MSG
diff --git a/lefthook.yml b/lefthook.yml
index f6522fdb023ad2a5cda81933acc6a850d0e33734..1556932662cf2f9b87e464e46d8482df1a00f071 100644
--- a/lefthook.yml
+++ b/lefthook.yml
@@ -58,7 +58,7 @@ pre-push:
       files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
       glob: '{,ee/}app/graphql/**/*.rb'
       run: bundle exec rake gitlab:graphql:check_docs
-    vale: # Requires Vale: https://docs.gitlab.com/ee/development/documentation/testing/vale.html
+    vale: # Requires Vale: https://docs.gitlab.com/development/documentation/testing/vale/
       tags: documentation style
       files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
       exclude: 'doc/api/graphql/reference/_index.md'
@@ -70,7 +70,7 @@ pre-push:
       glob: '*.{haml,rb,js,vue}'
       run: tooling/bin/gettext_extractor /dev/stdout --silent | diff - locale/gitlab.pot
       fail_text: PO files need to be updated. Try running tooling/bin/gettext_extractor locale/gitlab.pot
-    docs-metadata: # See https://docs.gitlab.com/ee/development/documentation/metadata.html
+    docs-metadata: # See https://docs.gitlab.com/development/documentation/metadata/
       tags: documentation style
       files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
       glob: 'doc/*.md'
@@ -167,7 +167,7 @@ pre-commit:
     secrets-detection:
       tags: secrets
       run: .lefthook/gitleaks.sh pre-commit
-    docs-metadata: # See https://docs.gitlab.com/ee/development/documentation/metadata.html
+    docs-metadata: # See https://docs.gitlab.com/development/documentation/metadata/
       tags: documentation style
       files: git diff --name-only --diff-filter=d --staged
       glob: 'doc/*.md'
@@ -193,7 +193,7 @@ pre-commit:
       files: git diff --name-only --diff-filter=d --staged
       glob: '{app,lib,ee,spec,doc,scripts}/**/*.md'
       run: scripts/lint/check_mermaid.mjs {files}
-    vale: # Requires Vale: https://docs.gitlab.com/ee/development/documentation/testing/vale.html
+    vale: # Requires Vale: https://docs.gitlab.com/development/documentation/testing/vale/
       tags: documentation style
       files: git diff --name-only --diff-filter=d --staged
       exclude: 'doc/api/graphql/reference/_index.md'
diff --git a/spec/tooling/danger/rubocop_inline_disable_suggestion_spec.rb b/spec/tooling/danger/rubocop_inline_disable_suggestion_spec.rb
index 6b9ff6675648446917770b0371f2e4dc8547454d..084e365929848ce4dae00da5179cccf85da2689b 100644
--- a/spec/tooling/danger/rubocop_inline_disable_suggestion_spec.rb
+++ b/spec/tooling/danger/rubocop_inline_disable_suggestion_spec.rb
@@ -23,7 +23,7 @@
 
     If that isn't possible, please provide the reason as a code comment in the
     same line where the rule is disabled separated by ` -- `.
-    See [rubocop best practices](https://docs.gitlab.com/ee/development/rubocop_development_guide.html#disabling-rules-inline).
+    See [rubocop best practices](https://docs.gitlab.com/development/rubocop_development_guide/#disabling-rules-inline).
 
     ----
 
diff --git a/spec/tooling/danger/specs/feature_category_suggestion_spec.rb b/spec/tooling/danger/specs/feature_category_suggestion_spec.rb
index a95d6276eef56a2be32f2409c85389093264f5d0..0addfbb64defa2aabd6580981dcfca781f423e04 100644
--- a/spec/tooling/danger/specs/feature_category_suggestion_spec.rb
+++ b/spec/tooling/danger/specs/feature_category_suggestion_spec.rb
@@ -21,7 +21,7 @@
     ```
 
     Consider adding `feature_category: <feature_category_name>` for this example if it is not set already.
-    See [testing best practices](https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#feature-category-metadata).
+    See [testing best practices](https://docs.gitlab.com/development/testing_guide/best_practices/#feature-category-metadata).
     SUGGESTION_MARKDOWN
   end
 
diff --git a/spec/tooling/danger/specs/project_factory_suggestion_spec.rb b/spec/tooling/danger/specs/project_factory_suggestion_spec.rb
index 078f415cc448883217753272244aed6a2ddf6946..847bf0d5cf082be17b139fe76b854119a8f4cfd2 100644
--- a/spec/tooling/danger/specs/project_factory_suggestion_spec.rb
+++ b/spec/tooling/danger/specs/project_factory_suggestion_spec.rb
@@ -23,7 +23,7 @@
 
       ⚠️ **Warning**: If your test modifies data, `let_it_be` may be unsuitable, and cause state leaks! Use `let_it_be_with_reload` or `let_it_be_with_refind` instead.
 
-      Unsure which method to use? See the [testing best practices](https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#optimize-factory-usage)
+      Unsure which method to use? See the [testing best practices](https://docs.gitlab.com/development/testing_guide/best_practices/#optimize-factory-usage)
       for background information and alternative options for optimizing factory usage.
 
       If you're concerned about causing state leaks, or if you know `let` or `let!` are the better options, ignore this comment.
diff --git a/tooling/bin/find_app_sec_approval b/tooling/bin/find_app_sec_approval
index ee70137a5e6aeca4ed1337f9b50b5db33be0ef88..db3fa0463e848b2d94741ad5a66a727e2010553b 100755
--- a/tooling/bin/find_app_sec_approval
+++ b/tooling/bin/find_app_sec_approval
@@ -3,7 +3,7 @@
 
 # We need to take some precautions when using the `gitlab` gem in this project.
 #
-# See https://docs.gitlab.com/ee/development/pipelines/internals.html#using-the-gitlab-ruby-gem-in-the-canonical-project.
+# See https://docs.gitlab.com/development/pipelines/internals/#using-the-gitlab-ruby-gem-in-the-canonical-project.
 require 'gitlab'
 
 # This script is used to confirm that AppSec has approved upstream JiHu contributions
diff --git a/tooling/bin/find_change_diffs b/tooling/bin/find_change_diffs
index 8a4e520a31f07aa527adcbed1cb357ab257e306d..cd2e3d66b6ce1e5f8ec9e88c7c1da522fea2ac16 100755
--- a/tooling/bin/find_change_diffs
+++ b/tooling/bin/find_change_diffs
@@ -3,7 +3,7 @@
 
 # We need to take some precautions when using the `gitlab` gem in this project.
 #
-# See https://docs.gitlab.com/ee/development/pipelines/internals.html#using-the-gitlab-ruby-gem-in-the-canonical-project.
+# See https://docs.gitlab.com/development/pipelines/internals/#using-the-gitlab-ruby-gem-in-the-canonical-project.
 require 'gitlab'
 require 'pathname'
 
diff --git a/tooling/danger/ai_logging.rb b/tooling/danger/ai_logging.rb
index 715920d7b249b4a10df04ece051b7ac0c4e93795..499a20a83353e64679efb81115b8c9a7bd3f1786 100644
--- a/tooling/danger/ai_logging.rb
+++ b/tooling/danger/ai_logging.rb
@@ -13,7 +13,7 @@ module AiLogging
         1. Ensure you're not logging sensitive or personal information.
         2. Consider if the logging should be gated behind the `expanded_ai_logging` feature flag - this means using `log_conditional_info` method.
 
-        For more information, see: https://docs.gitlab.com/ee/user/gitlab_duo/data_usage.html
+        For more information, see: https://docs.gitlab.com/user/gitlab_duo/data_usage/
       MSG
 
       AI_LOGGING_FILES_MESSAGE = <<~MSG
diff --git a/tooling/danger/analytics_instrumentation.rb b/tooling/danger/analytics_instrumentation.rb
index 6afa97562ad818ccbb7b484bc09e5dfe9795bfa0..736888580dfb30e8b76d5b56d2745f6a51f86068 100644
--- a/tooling/danger/analytics_instrumentation.rb
+++ b/tooling/danger/analytics_instrumentation.rb
@@ -14,7 +14,7 @@ module AnalyticsInstrumentation
         For the following files, a review from the [Data team and Analytics Instrumentation team](https://gitlab.com/groups/gitlab-org/analytics-section/analytics-instrumentation/engineers/-/group_members?with_inherited_permissions=exclude) is recommended
         Please check the ~"analytics instrumentation" [Service Ping guide](https://docs.gitlab.com/ee/development/service_ping/) or the [Snowplow guide](https://docs.gitlab.com/ee/development/snowplow/).
 
-        For MR review guidelines, see the [Internal Analytics review guidelines](https://docs.gitlab.com/ee/development/internal_analytics/review_guidelines.html).
+        For MR review guidelines, see the [Internal Analytics review guidelines](https://docs.gitlab.com/development/internal_analytics/review_guidelines/).
 
         %<changed_files>s
 
@@ -27,11 +27,11 @@ module AnalyticsInstrumentation
 
       CHANGED_USAGE_DATA_MESSAGE = <<~MSG
         Notice that implementing metrics directly in usage_data.rb has been deprecated.
-        Please use [Instrumentation Classes](https://docs.gitlab.com/ee/development/internal_analytics/metrics/metrics_instrumentation.html) instead.
+        Please use [Instrumentation Classes](https://docs.gitlab.com/development/internal_analytics/metrics/metrics_instrumentation/) instead.
       MSG
 
       CHANGE_DEPRECATED_DATA_SOURCE_MESSAGE = <<~MSG
-        Redis and RedisHLL tracking is deprecated, consider using Internal Events tracking instead https://docs.gitlab.com/ee/development/internal_analytics/internal_event_instrumentation/quick_start.html#defining-event-and-metrics
+        Redis and RedisHLL tracking is deprecated, consider using Internal Events tracking instead https://docs.gitlab.com/development/internal_analytics/internal_event_instrumentation/quick_start/#defining-event-and-metrics
       MSG
 
       WORKFLOW_LABELS = [
diff --git a/tooling/danger/bulk_database_actions.rb b/tooling/danger/bulk_database_actions.rb
index 1d3ed2918e1e3662f0e25f6a330aa33659da98de..d6bb9c1f75c6a10afd36672c4262766d9cad9819 100644
--- a/tooling/danger/bulk_database_actions.rb
+++ b/tooling/danger/bulk_database_actions.rb
@@ -7,7 +7,7 @@ module Danger
     class BulkDatabaseActions < Suggestion
       MATCH = %r{\A\+\s+(\S*\.)?((bulk_)?(insert|update|upsert|delete|destroy)(_all)?)\b}
       REPLACEMENT = nil
-      DOCUMENTATION_LINK = 'https://docs.gitlab.com/ee/development/database_review.html#preparation-when-using-bulk-update-operations'
+      DOCUMENTATION_LINK = 'https://docs.gitlab.com/development/database_review/#preparation-when-using-bulk-update-operations'
 
       SUGGESTION = <<~MESSAGE_MARKDOWN.freeze
         When using `insert`, `update`, `upsert`, `delete`, `destroy` commands, or their `bulk/all` variants (e.g., `bulk_insert`, `update_all`), you must include the full
diff --git a/tooling/danger/change_column_default.rb b/tooling/danger/change_column_default.rb
index 57ebb06a6568c346c8f84911e313423b2091f9e4..ec0037418a7c1563609747cde55589985da96777 100644
--- a/tooling/danger/change_column_default.rb
+++ b/tooling/danger/change_column_default.rb
@@ -11,7 +11,7 @@ module ChangeColumnDefault
       MIGRATION_METHODS_REGEX = /^\+\s*(.*\.)?(#{METHODS.join('|')})[(\s]/
       MIGRATION_FILES_REGEX = %r{^db/(post_)?migrate}
 
-      DOCUMENTATION = 'https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#changing-column-defaults'
+      DOCUMENTATION = 'https://docs.gitlab.com/development/database/avoiding_downtime_in_migrations/#changing-column-defaults'
       COMMENT =
         "Changing column default is difficult because of how Rails handles values that are equal to the default. " \
         "Please make sure all columns are declared as `columns_changing_default`. " \
diff --git a/tooling/danger/ci_templates.rb b/tooling/danger/ci_templates.rb
index fdd0d2b09c234dae45d2f9a8294021662f594153..dff902c951257521be29c0593c646b874c0e6db1 100644
--- a/tooling/danger/ci_templates.rb
+++ b/tooling/danger/ci_templates.rb
@@ -10,7 +10,7 @@ module CiTemplates
         1. Ensure the merge request has the ~"ci::templates" label.
         If the merge request modifies CI/CD Template files, Danger will do this for you.
         1. Prepare your MR for a CI/CD Template review according to the
-        [template development guide](https://docs.gitlab.com/ee/development/cicd/templates.html).
+        [template development guide](https://docs.gitlab.com/development/cicd/templates/).
         1. Assign and `@` mention the CI/CD Template reviewer suggested by Reviewer Roulette.
       MSG
 
diff --git a/tooling/danger/cookie_setting.rb b/tooling/danger/cookie_setting.rb
index 1a8c992f2ea641670ef8ea5d28e84077dfc1e764..5e472d7c5af62e56fec4e989b7b36fdc24c54b70 100644
--- a/tooling/danger/cookie_setting.rb
+++ b/tooling/danger/cookie_setting.rb
@@ -7,7 +7,7 @@ module Danger
     class CookieSetting < Suggestion
       MATCH = %r{cookies(?:\.encrypted|\.signed|\.permanent)*\[([^\]]+)\]\s*=[^=]}
       REPLACEMENT = nil
-      DOCUMENTATION_LINK = 'https://docs.gitlab.com/ee/development/cookies.html#cookies-on-rails'
+      DOCUMENTATION_LINK = 'https://docs.gitlab.com/development/cookies/#cookies-on-rails'
 
       SUGGESTION = <<~MESSAGE_MARKDOWN.freeze
         It looks like you are setting a server-side cookie. Please note that if you set
diff --git a/tooling/danger/ignored_model_columns.rb b/tooling/danger/ignored_model_columns.rb
index be68ab62f6fac8c0b4da37e472dfa80e10c25ef2..62ed9b47a8ee9e220285624034a53ea28eee57ad 100644
--- a/tooling/danger/ignored_model_columns.rb
+++ b/tooling/danger/ignored_model_columns.rb
@@ -12,7 +12,7 @@ module IgnoredModelColumns
       MIGRATION_METHODS_REGEX = /^\+\s*(.*\.)?(#{METHODS.join('|')})[(\s]/
       UP_METHOD_REGEX = /^.+(def\sup)/
       END_METHOD_REGEX = /^.+(end)/
-      DOC_URL = "https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html"
+      DOC_URL = "https://docs.gitlab.com/development/database/avoiding_downtime_in_migrations/"
 
       COMMENT = <<~COMMENT.freeze
         Column operations, like [dropping](#{DOC_URL}#dropping-columns), [renaming](#{DOC_URL}#renaming-columns) or
diff --git a/tooling/danger/master_pipeline_status.rb b/tooling/danger/master_pipeline_status.rb
index e949d8e63958002189f3c68fb09719e595d60647..31b4245541b5869775172a7d11b7963613d090db 100644
--- a/tooling/danger/master_pipeline_status.rb
+++ b/tooling/danger/master_pipeline_status.rb
@@ -2,7 +2,7 @@
 
 # We need to take some precautions when using the `gitlab` gem in this project.
 #
-# See https://docs.gitlab.com/ee/development/pipelines/internals.html#using-the-gitlab-ruby-gem-in-the-canonical-project.
+# See https://docs.gitlab.com/development/pipelines/internals/#using-the-gitlab-ruby-gem-in-the-canonical-project.
 require 'gitlab'
 require "net/http"
 require "uri"
diff --git a/tooling/danger/model_validations.rb b/tooling/danger/model_validations.rb
index 410c9dd434ea2c233c3a21b79982ba9df5ae77d1..e2afb3281149e99196cdfa2b6b9fccc8b7a25a05 100644
--- a/tooling/danger/model_validations.rb
+++ b/tooling/danger/model_validations.rb
@@ -15,7 +15,7 @@ module ModelValidations
       VALIDATION_METHODS = %w[validates validate validates_each validates_with validates_associated].freeze
       VALIDATIONS_REGEX = /^\+\s*(.*\.)?(#{VALIDATION_METHODS.join('|')})[( ]/
 
-      CODE_QUALITY_URL = "https://docs.gitlab.com/ee/development/code_review.html#quality"
+      CODE_QUALITY_URL = "https://docs.gitlab.com/development/code_review/#quality"
       SUGGEST_MR_COMMENT = <<~SUGGEST_COMMENT.freeze
         Did you consider new validations can break existing records?
         Please follow the [code quality guidelines about new model validations](#{CODE_QUALITY_URL}) when adding a new
diff --git a/tooling/danger/multiversion.rb b/tooling/danger/multiversion.rb
index 612881aaa1a16ce70f69d6791f5d66da6ce8aeb3..ac77c1fe28085b1b5ce60fe34cb376f6318d49c9 100644
--- a/tooling/danger/multiversion.rb
+++ b/tooling/danger/multiversion.rb
@@ -17,7 +17,7 @@ def check!
 
         To prevent an incident, ensure the updated frontend code is backwards compatible.
 
-        For more information, see the [multiversion compatibility documentation](https://docs.gitlab.com/ee/development/graphql_guide/reviewing.html#multiversion-compatibility).
+        For more information, see the [multiversion compatibility documentation](https://docs.gitlab.com/development/graphql_guide/reviewing/#multiversion-compatibility).
         MARKDOWN
       end
 
diff --git a/tooling/danger/rubocop_discourage_todo_addition.rb b/tooling/danger/rubocop_discourage_todo_addition.rb
index caca5b51bdf85674dbfcac42a480fe7bb7ad7293..c8dcdcdf84304a2c6cc69bb0ecc76f392aa30394 100644
--- a/tooling/danger/rubocop_discourage_todo_addition.rb
+++ b/tooling/danger/rubocop_discourage_todo_addition.rb
@@ -14,7 +14,7 @@ class RubocopDiscourageTodoAddition < Suggestion
         Adding exclusions to RuboCop TODO files manually is discouraged.
 
         If it is not possible to resolve the exception, then
-        [inline disabling](https://docs.gitlab.com/ee/development/rubocop_development_guide.html#disabling-rules-inline)
+        [inline disabling](https://docs.gitlab.com/development/rubocop_development_guide/#disabling-rules-inline)
         should be used.
 
         ----
diff --git a/tooling/danger/rubocop_inline_disable_suggestion.rb b/tooling/danger/rubocop_inline_disable_suggestion.rb
index 589816a5937f8647cff3711d1c898a8c8bf2c8df..ef09a478626699cc1128e2f2a608fcb1c85bbe88 100644
--- a/tooling/danger/rubocop_inline_disable_suggestion.rb
+++ b/tooling/danger/rubocop_inline_disable_suggestion.rb
@@ -13,7 +13,7 @@ class RubocopInlineDisableSuggestion < Suggestion
 
         If that isn't possible, please provide the reason as a code comment in the
         same line where the rule is disabled separated by ` -- `.
-        See [rubocop best practices](https://docs.gitlab.com/ee/development/rubocop_development_guide.html#disabling-rules-inline).
+        See [rubocop best practices](https://docs.gitlab.com/development/rubocop_development_guide/#disabling-rules-inline).
 
         ----
 
diff --git a/tooling/danger/rubocop_new_todo.rb b/tooling/danger/rubocop_new_todo.rb
index 17c09ccc10cdbde5c401e4941d4d9fc850ea36b7..49a673f816a85e1d8e60d92c4d1231562d634425 100644
--- a/tooling/danger/rubocop_new_todo.rb
+++ b/tooling/danger/rubocop_new_todo.rb
@@ -10,7 +10,7 @@ class RubocopNewTodo < Suggestion
       REPLACEMENT = nil
 
       SUGGESTION = <<~MARKDOWN
-        Please review RuboCop documentation related to [Enabling a new cop](https://docs.gitlab.com/ee/development/rubocop_development_guide.html#enabling-a-new-cop) and ensure you have followed all of the steps before resolving this comment.
+        Please review RuboCop documentation related to [Enabling a new cop](https://docs.gitlab.com/development/rubocop_development_guide/#enabling-a-new-cop) and ensure you have followed all of the steps before resolving this comment.
 
         ----
 
diff --git a/tooling/danger/sidekiq_args.rb b/tooling/danger/sidekiq_args.rb
index 6d813d6b8972ba08dd53717abec3a562e834909c..12e8d40973dbb07af1f35ee9cf8d7befa2ead139 100644
--- a/tooling/danger/sidekiq_args.rb
+++ b/tooling/danger/sidekiq_args.rb
@@ -13,11 +13,11 @@ module SidekiqArgs
       AFTER_DEF_PERFORM_REGEX = /^[\s+]*def perform\b/
 
       MR_WARNING_COMMENT = <<~WARNING_COMMENT
-        Please follow the [Sidekiq development guidelines](https://docs.gitlab.com/ee/development/sidekiq/compatibility_across_updates.html#changing-the-arguments-for-a-worker) when changing Sidekiq worker arguments.
+        Please follow the [Sidekiq development guidelines](https://docs.gitlab.com/development/sidekiq/compatibility_across_updates/#changing-the-arguments-for-a-worker) when changing Sidekiq worker arguments.
       WARNING_COMMENT
 
       SUGGEST_MR_COMMENT = <<~SUGGEST_COMMENT
-        Please follow the [Sidekiq development guidelines](https://docs.gitlab.com/ee/development/sidekiq/compatibility_across_updates.html#changing-the-arguments-for-a-worker) when changing Sidekiq worker arguments.
+        Please follow the [Sidekiq development guidelines](https://docs.gitlab.com/development/sidekiq/compatibility_across_updates/#changing-the-arguments-for-a-worker) when changing Sidekiq worker arguments.
 
         In particular, check whether you are updating callers of this method in this MR, and ensure that your change will be backwards compatible across updates.
       SUGGEST_COMMENT
diff --git a/tooling/danger/specs/feature_category_suggestion.rb b/tooling/danger/specs/feature_category_suggestion.rb
index c34f6e23ab89cd976883c93c343ab4142ae60d6c..41ec24c1c36a336338e6e4ce189ebbd71573f5dd 100644
--- a/tooling/danger/specs/feature_category_suggestion.rb
+++ b/tooling/danger/specs/feature_category_suggestion.rb
@@ -9,7 +9,7 @@ class FeatureCategorySuggestion < Suggestion
         RSPEC_TOP_LEVEL_DESCRIBE_REGEX = /^\+.?RSpec\.describe(.+)/
         SUGGESTION = <<~SUGGESTION_MARKDOWN
           Consider adding `feature_category: <feature_category_name>` for this example if it is not set already.
-          See [testing best practices](https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#feature-category-metadata).
+          See [testing best practices](https://docs.gitlab.com/development/testing_guide/best_practices/#feature-category-metadata).
         SUGGESTION_MARKDOWN
         FEATURE_CATEGORY_KEYWORD = 'feature_category'
 
diff --git a/tooling/danger/specs/project_factory_suggestion.rb b/tooling/danger/specs/project_factory_suggestion.rb
index 8f9a05a0abab18c51fda6443f8339154a96c5486..31f2e12703d366f8eba00f358701f42983d434c4 100644
--- a/tooling/danger/specs/project_factory_suggestion.rb
+++ b/tooling/danger/specs/project_factory_suggestion.rb
@@ -32,7 +32,7 @@ class ProjectFactorySuggestion < Suggestion
 
           ⚠️ **Warning**: If your test modifies data, `let_it_be` may be unsuitable, and cause state leaks! Use `let_it_be_with_reload` or `let_it_be_with_refind` instead.
 
-          Unsure which method to use? See the [testing best practices](https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#optimize-factory-usage)
+          Unsure which method to use? See the [testing best practices](https://docs.gitlab.com/development/testing_guide/best_practices/#optimize-factory-usage)
           for background information and alternative options for optimizing factory usage.
 
           If you're concerned about causing state leaks, or if you know `let` or `let!` are the better options, ignore this comment.
diff --git a/tooling/danger/stable_branch.rb b/tooling/danger/stable_branch.rb
index 13e867b843232f00e265198ef7aefa9ecd92a8e4..287102f74546dca3f211edbd21b22fb40e24a16c 100644
--- a/tooling/danger/stable_branch.rb
+++ b/tooling/danger/stable_branch.rb
@@ -21,7 +21,7 @@ module StableBranch
 
       TEMPLATE_SOURCE_REGEX = %r{\s*template\s+sourced\s+from\s+(https?://\S+)}i
 
-      MAINTENANCE_POLICY_URL = 'https://docs.gitlab.com/ee/policy/maintenance.html'
+      MAINTENANCE_POLICY_URL = 'https://docs.gitlab.com/policy/maintenance/'
 
       MAINTENANCE_POLICY_MESSAGE = <<~MSG
       See the [release and maintenance policy](#{MAINTENANCE_POLICY_URL}) for more information.
@@ -36,7 +36,7 @@ module StableBranch
       MSG
 
       VERSION_WARNING_MESSAGE = <<~MSG
-      Backporting to older releases requires an [exception request process](https://docs.gitlab.com/ee/policy/maintenance.html#backporting-to-older-releases)
+      Backporting to older releases requires an [exception request process](https://docs.gitlab.com/policy/maintenance/#backporting-to-older-releases)
       MSG
 
       FAILED_VERSION_REQUEST_MESSAGE = <<~MSG