diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index ea88a9f85599a0239a09d5ad8b312f44b859d38b..de24928f93ee84085c628398f536628dc292aa44 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -674,7 +674,7 @@ We recommend you use only _one_ of these methods, or you'll get confused.
 We recommend that you also tell Renovate what `versioning` to use.
 If the `versioning` field is missing, then Renovate defaults to using `semver` versioning.
 
-For more details and examples about it, see our [documentation for the `regex` manager](/modules/manager/regex/).
+For more details and examples about it, see our [documentation for the `regex` manager](modules/manager/regex/index.md).
 For template fields, use the triple brace `{{{ }}}` notation to avoid Handlebars escaping any special characters.
 
 <!-- prettier-ignore -->
@@ -1180,7 +1180,7 @@ Example:
 }
 ```
 
-For the full list of available managers, see the [Supported Managers](https://docs.renovatebot.com/modules/manager/#supported-managers) documentation.
+For the full list of available managers, see the [Supported Managers](modules/manager/index.md#supported-managers) documentation.
 
 ## encrypted
 
@@ -1344,7 +1344,7 @@ Because `fileMatch` is mergeable, you don't need to duplicate the defaults and c
 ```
 
 If you configure `fileMatch` then it must be within a manager object (e.g. `dockerfile` in the above example).
-The full list of supported managers can be found [here](https://docs.renovatebot.com/modules/manager/).
+The full list of supported managers can be found [here](modules/manager/index.md#supported-managers).
 
 ## filterUnavailableUsers
 
@@ -2412,7 +2412,7 @@ This field supports Regular Expressions if they begin and end with `/`, otherwis
 
 Use `matchCategories` to restrict rules to a particular language or group.
 Matching is done using "any" logic, i.e. "match any of the following categories".
-The categories can be found in the [manager documentation](./modules/manager/index.md).
+The categories can be found in the [manager documentation](modules/manager/index.md).
 
 <!-- prettier-ignore -->
 !!! note
@@ -2493,7 +2493,7 @@ Use this field to restrict rules to a particular package manager. e.g.
 }
 ```
 
-For the full list of available managers, see the [Supported Managers](https://docs.renovatebot.com/modules/manager/#supported-managers) documentation.
+For the full list of available managers, see the [Supported Managers](modules/manager/index.md#supported-managers) documentation.
 
 ### matchDatasources
 
@@ -2565,8 +2565,8 @@ Consider using instead `matchCurrentValue` if you wish to match against the raw
 }
 ```
 
-The syntax of the version range must follow the [versioning scheme](https://docs.renovatebot.com/modules/versioning/#supported-versioning) used by the matched package(s).
-This is usually defined by the [manager](https://docs.renovatebot.com/modules/manager/#supported-managers) which discovered them or by the default versioning for the package's [datasource](https://docs.renovatebot.com/modules/datasource/).
+The syntax of the version range must follow the [versioning scheme](modules/versioning/index.md#supported-versioning) used by the matched package(s).
+This is usually defined by the [manager](modules/manager/index.md#supported-managers) which discovered them or by the default versioning for the package's [datasource](modules/datasource/index.md).
 For example, a Gradle package would typically need Gradle constraint syntax (e.g. `[,7.0)`) and not SemVer syntax (e.g. `<7.0`).
 
 This field also supports Regular Expressions which must begin and end with `/`.
@@ -3335,18 +3335,18 @@ You can use the `registryAliases` object to set registry aliases.
 
 This feature works with the following managers:
 
-- [`ansible`](/modules/manager/ansible)
-- [`bitbucket-pipelines`](/modules/manager/bitbucket-pipelines)
-- [`docker-compose`](/modules/manager/docker-compose)
-- [`dockerfile`](/modules/manager/dockerfile)
-- [`droneci`](/modules/manager/droneci)
-- [`gitlabci`](/modules/manager/gitlabci/)
-- [`helm-requirements`](/modules/manager/helm-requirements/)
-- [`helmfile`](/modules/manager/helmfile/)
-- [`helmv3`](/modules/manager/helmv3/)
-- [`kubernetes`](/modules/manager/kubernetes)
-- [`terraform`](/modules/manager/terraform)
-- [`woodpecker`](/modules/manager/woodpecker)
+- [`ansible`](modules/manager/ansible/index.md)
+- [`bitbucket-pipelines`](modules/manager/bitbucket-pipelines/index.md)
+- [`docker-compose`](modules/manager/docker-compose/index.md)
+- [`dockerfile`](modules/manager/dockerfile/index.md)
+- [`droneci`](modules/manager/droneci/index.md)
+- [`gitlabci`](modules/manager/gitlabci/index.md)
+- [`helm-requirements`](modules/manager/helm-requirements/index.md)
+- [`helmfile`](modules/manager/helmfile/index.md)
+- [`helmv3`](modules/manager/helmv3/index.md)
+- [`kubernetes`](modules/manager/kubernetes/index.md)
+- [`terraform`](modules/manager/terraform/index.md)
+- [`woodpecker`](modules/manager/woodpecker/index.md)
 
 ```json
 {
diff --git a/docs/usage/key-concepts/automerge.md b/docs/usage/key-concepts/automerge.md
index 0dee6792045e1d6a7aa8ca9d5c8bbf785bc47a16..43095d66b7ded77d3db3b11bed0b70384a1b07df 100644
--- a/docs/usage/key-concepts/automerge.md
+++ b/docs/usage/key-concepts/automerge.md
@@ -27,7 +27,7 @@ For example, if you have Jest or Mocha as a development dependency, and it has a
 If you have a linter like ESLint or TSLint and its update passes... automerge them!
 If you have an API with 100% test coverage and Express is updated... automerge it!
 
-![Automerged PR](/assets/images/automerged-pr.png){ loading=lazy }
+![Automerged PR](../assets/images/automerged-pr.png){ loading=lazy }
 
 ## Configuration examples
 
diff --git a/docs/usage/modules/manager/index.md b/docs/usage/modules/manager/index.md
index b54adfa5fb8c78583f40d9d0c95df67bde9a74a6..b93c2eb75c0859dd467eaee31d4033b20cc2afae 100644
--- a/docs/usage/modules/manager/index.md
+++ b/docs/usage/modules/manager/index.md
@@ -48,9 +48,9 @@ If the default `fileMatch` regular expression for a manager does not match again
 
 #### Ignoring files that match the default fileMatch
 
-Renovate will _extend_ the existing [`fileMatch`](/configuration-options/#filematch), meaning you don't need to include the default regular expressions like `Dockerfile` in your own array.
+Renovate will _extend_ the existing [`fileMatch`](../../configuration-options/index.md#filematch), meaning you don't need to include the default regular expressions like `Dockerfile` in your own array.
 In other words, the regular expression are "additive".
-If a manager matches a file that you _don't_ want it to, ignore it using the [`ignorePaths`](/configuration-options/#ignorepaths) configuration option.
+If a manager matches a file that you _don't_ want it to, ignore it using the [`ignorePaths`](../../configuration-options/index.md#ignorepaths) configuration option.
 Also, if you ever find that Renovate is _not_ matching a file name that you're certain it should, check your preset config isn't the cause of it.
 The `config:recommended` preset ignores common test and example directory names, for example.
 
@@ -80,7 +80,7 @@ If there was a manager called `some-new-manager` you would enable it like this:
 }
 ```
 
-Please check the [list of supported managers](https://docs.renovatebot.com/modules/manager/#supported-managers).
+Please check the [list of supported managers](#supported-managers).
 
 #### Limiting enabled managers
 
diff --git a/lib/modules/manager/batect/readme.md b/lib/modules/manager/batect/readme.md
index fda38459df1b10f879a8147af4d92b41d7277f41..f89df62939285d2d2e200ac117340578582c6cdb 100644
--- a/lib/modules/manager/batect/readme.md
+++ b/lib/modules/manager/batect/readme.md
@@ -1,6 +1,6 @@
 Extracts all Docker images and Batect bundles from Batect configuration files.
 
-For updates to Batect itself, see [batect-wrapper](../batect-wrapper).
+For updates to Batect itself, see [batect-wrapper](../batect-wrapper/index.md).
 
 ### Files searched
 
@@ -28,6 +28,6 @@ For example:
 
 ### Bundle versioning
 
-This manager assumes that any bundles referenced use tags for versioning, and that these tags use [SemVer](../versioning/semver).
+This manager assumes that any bundles referenced use tags for versioning, and that these tags use [SemVer](../versioning/semver/index.md).
 The implementation of SemVer is strict - versions must follow the `X.Y.Z` or `vX.Y.Z` format.
 Versions that don't match this format (eg. `X.Y`) will be ignored.
diff --git a/lib/modules/manager/terragrunt/readme.md b/lib/modules/manager/terragrunt/readme.md
index e2484bcfaee4780c47270d8948eae89e0e39c6f6..97b423862fe357120fc48eb80597810b6b45a2fa 100644
--- a/lib/modules/manager/terragrunt/readme.md
+++ b/lib/modules/manager/terragrunt/readme.md
@@ -1,6 +1,6 @@
 Currently by default, Terragrunt support is limited to Terraform registry sources and GitHub sources that include SemVer refs, e.g. like `github.com/hashicorp/example?ref=v1.0.0`.
 
-You can create a custom [versioning config](/configuration-options/#versioning) to support non-SemVer references.
+You can create a custom [versioning config](../../../configuration-options/index.md#versioning) to support non-SemVer references.
 For example, if you want to reference a tag like `module-v1.2.5`, a block like this would work:
 
 ```json
@@ -21,5 +21,5 @@ terraform {
 
 ### Terraform lockfiles
 
-The Terragrunt manager supports [lock file maintenance](https://docs.renovatebot.com/configuration-options/#lockfilemaintenance) for `.terraform.lock.hcl` artifacts.
+The Terragrunt manager supports [lock file maintenance](../../../configuration-options/index.md#lockfilemaintenance) for `.terraform.lock.hcl` artifacts.
 These artifacts will be updated if and only if the update type is `lockFileMaintenance`.
diff --git a/lib/modules/platform/azure/readme.md b/lib/modules/platform/azure/readme.md
index 7b0b6f9f10ddce2b53ca81dbab2a6394b2200568..aa5a43302b822aca5795d803904f6ff72e61613c 100644
--- a/lib/modules/platform/azure/readme.md
+++ b/lib/modules/platform/azure/readme.md
@@ -20,12 +20,12 @@ Remember to set `platform=azure` somewhere in your Renovate config file.
 ### Setting up a new pipeline
 
 Create a brand new pipeline within Azure DevOps, and select your source:
-![Azure DevOps create new pipeline](/assets/images/azure-devops-setup-1.png){ loading=lazy }
+![Azure DevOps create new pipeline](../../../assets/images/azure-devops-setup-1.png){ loading=lazy }
 
 Then select your repository.
 
 Within _Configure your pipeline_ select: **Starter pipeline**
-![Azure DevOps starter pipeline template](/assets/images/azure-devops-setup-2.png){ loading=lazy }
+![Azure DevOps starter pipeline template](../../../assets/images/azure-devops-setup-2.png){ loading=lazy }
 
 Replace _all_ content in the starter pipeline with:
 
@@ -126,7 +126,7 @@ always-auth=true
 ### Add renovate.json file
 
 Additionally, you can create a `renovate.json` file (which holds the Renovate configuration) in the root of the repository you want to update.
-[Read more about the Renovate configuration options](https://docs.renovatebot.com/configuration-options/)
+[Read more about the Renovate configuration options](../../../configuration-options/index.md)
 
 ### Using a single pipeline to update multiple repositories
 
diff --git a/tools/docs/manager.ts b/tools/docs/manager.ts
index 9ac4a846e7ef3e9653c5af1151a5eef1d653f18f..26efb57c41540cd8f12a396f0c8133a01bdd2459 100644
--- a/tools/docs/manager.ts
+++ b/tools/docs/manager.ts
@@ -119,7 +119,7 @@ sidebar_label: ${displayName}
           md += '\n```\n\n';
         }
       }
-      md += `For details on how to extend a manager's \`fileMatch\` value, please follow [this link](/modules/manager/#file-matching).\n\n`;
+      md += `For details on how to extend a manager's \`fileMatch\` value, please follow [this link](../index.md#file-matching).\n\n`;
       md += '## Supported datasources\n\n';
       const escapedDatasources = (supportedDatasources || [])
         .map(
diff --git a/tools/docs/templates.ts b/tools/docs/templates.ts
index 32df7ac21cd8ab53ccb1186d5e5419976442fce9..71524ceae52c17b2a03461003983327c3b732233 100644
--- a/tools/docs/templates.ts
+++ b/tools/docs/templates.ts
@@ -8,7 +8,8 @@ export async function generateTemplates(dist: string): Promise<void> {
   exposedConfigOptionsText +=
     exposedConfigOptions
       .map(
-        (field) => `[${field}](/configuration-options/#${field.toLowerCase()})`,
+        (field) =>
+          `[${field}](configuration-options.md#${field.toLowerCase()})`,
       )
       .join(', ') + '.';