diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml
index 05d1e64b20001f2fb38f4ac3131e9586bea0ce19..98f30dfba1776773c526a0ce5a3a03b3521ef59d 100644
--- a/.gitlab/ci/docs.gitlab-ci.yml
+++ b/.gitlab/ci/docs.gitlab-ci.yml
@@ -1,15 +1,3 @@
-include:
-  - component: gitlab.com/gitlab-org/technical-writing-group/markdown-link-check/lychee@0.2.0
-    inputs:
-      job-name: docs-lint links
-      job-stage: lint
-      lychee-version: "0.14.3"
-
-# Override rules for markdown-link-check CI/CD component
-docs-lint links:
-  extends:
-    - .docs:rules:docs-lint
-
 .review-docs:
   extends:
     - .default-retry
@@ -51,6 +39,23 @@ review-docs-cleanup:
   script:
     - ./scripts/trigger-build.rb docs cleanup
 
+docs-lint links:
+  extends:
+    - .docs:rules:docs-lint
+  image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-html:alpine-3.18-ruby-3.2.2-08fa6df8
+  stage: lint
+  needs: []
+  script:
+    # Prepare docs for build
+    # The path must be 'ee/' because we have hardcoded links relying on it
+    # https://gitlab.com/gitlab-org/gitlab-docs/-/blob/887850752fc0e72856da6632db132f005ba77f16/content/index.erb#L44-63
+    - mv doc/ /tmp/gitlab-docs/content/ee
+    - cd /tmp/gitlab-docs
+    # Build HTML from Markdown
+    - make compile
+    # Check the internal links and anchors (in parallel)
+    - "parallel time bundle exec nanoc check ::: internal_links internal_anchors"
+
 .docs-markdown-lint-image:
   # When updating the image version here, update it in /scripts/lint-doc.sh too.
   image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-markdown:alpine-3.19-vale-3.0.7-markdownlint-0.39.0-markdownlint2-0.12.1
diff --git a/data/deprecations/15-6-deprecate-post-api-v4-runner.yml b/data/deprecations/15-6-deprecate-post-api-v4-runner.yml
index b1696363c4dc1675e9fc42ecd36d844d2f5478a6..5b0feeba8a1a35df5f901515b479d2ad354770ea 100644
--- a/data/deprecations/15-6-deprecate-post-api-v4-runner.yml
+++ b/data/deprecations/15-6-deprecate-post-api-v4-runner.yml
@@ -10,7 +10,7 @@
     The support for registration tokens and certain runner configuration arguments in the `POST` method operation on the `/api/v4/runners` endpoint is deprecated.
     This endpoint [registers](https://docs.gitlab.com/ee/api/runners.html#register-a-new-runner) a runner
     with a GitLab instance at the instance, group, or project level through the API. Registration tokens, and support for certain configuration arguments,
-    will start returning the HTTP `410 Gone` status code in GitLab 17.0. For more information, see [Migrating to the new runner registration workflow](https://docs.gitlab.com/ee/ci/runners/runners_scope.html).
+    will start returning the HTTP `410 Gone` status code in GitLab 17.0. For more information, see [Migrating to the new runner registration workflow](../ci/runners/new_creation_workflow.md).
 
     The configuration arguments disabled for authentication tokens are:
 
@@ -22,7 +22,7 @@
     - `--tag-list`
     - `--maintenance-note`
 
-    This change is a breaking change. You should [create a runner in the UI](https://docs.gitlab.com/ee/ci/runners/runners_scope.html) to add configurations, and use the authentication token in the `gitlab-runner register` command instead.
+    This change is a breaking change. You should [create a runner in the UI](../ci/runners/runners_scope.html) to add configurations, and use the authentication token in the `gitlab-runner register` command instead.
   end_of_support_milestone:  # (optional) Use "XX.YY" format. The milestone when support for this feature will end.
   tiers:  # (optional - may be required in the future) An array of tiers that the feature is available in currently.  e.g., [Free, Silver, Gold, Core, Premium, Ultimate]
   documentation_url: https://docs.gitlab.com/ee/api/runners.html#register-a-new-runner  # (optional) This is a link to the current documentation page
diff --git a/doc/update/deprecations.md b/doc/update/deprecations.md
index 617e3296d71f605e590e8992cb075fde43504ee2..c8a5e2d9058e40454330673691aa1884590210b0 100644
--- a/doc/update/deprecations.md
+++ b/doc/update/deprecations.md
@@ -1580,7 +1580,7 @@ While the above approach is recommended for most instances, Sidekiq can also be
 The support for registration tokens and certain runner configuration arguments in the `POST` method operation on the `/api/v4/runners` endpoint is deprecated.
 This endpoint [registers](https://docs.gitlab.com/ee/api/runners.html#register-a-new-runner) a runner
 with a GitLab instance at the instance, group, or project level through the API. Registration tokens, and support for certain configuration arguments,
-will start returning the HTTP `410 Gone` status code in GitLab 17.0. For more information, see [Migrating to the new runner registration workflow](https://docs.gitlab.com/ee/ci/runners/runners_scope.html).
+will start returning the HTTP `410 Gone` status code in GitLab 17.0. For more information, see [Migrating to the new runner registration workflow](../ci/runners/new_creation_workflow.md).
 
 The configuration arguments disabled for authentication tokens are:
 
@@ -1592,7 +1592,7 @@ The configuration arguments disabled for authentication tokens are:
 - `--tag-list`
 - `--maintenance-note`
 
-This change is a breaking change. You should [create a runner in the UI](https://docs.gitlab.com/ee/ci/runners/runners_scope.html) to add configurations, and use the authentication token in the `gitlab-runner register` command instead.
+This change is a breaking change. You should [create a runner in the UI](../ci/runners/runners_scope.html) to add configurations, and use the authentication token in the `gitlab-runner register` command instead.
 
 </div>