diff --git a/changelog.d/11069.doc b/changelog.d/11069.doc
new file mode 100644
index 0000000000000000000000000000000000000000..dae4ae1777e2a6b66bf106c35d8b47ff890395ac
--- /dev/null
+++ b/changelog.d/11069.doc
@@ -0,0 +1 @@
+Fix broken links relating to module API deprecation in the upgrade notes.
diff --git a/docs/upgrade.md b/docs/upgrade.md
index 18ecb2678ee68c40e27fc064e26900a4da95d563..8de96cb3e7046ed8e2afc05d2dcfcadd3fa940b1 100644
--- a/docs/upgrade.md
+++ b/docs/upgrade.md
@@ -187,8 +187,8 @@ of this endpoint modifying the media store.
 
 The current third-party rules module interface is deprecated in favour of the new generic
 modules system introduced in Synapse v1.37.0. Authors of third-party rules modules can refer
-to [this documentation](modules.md#porting-an-existing-module-that-uses-the-old-interface)
-to update their modules. Synapse administrators can refer to [this documentation](modules.md#using-modules)
+to [this documentation](modules/porting_legacy_module.md)
+to update their modules. Synapse administrators can refer to [this documentation](modules/index.md)
 to update their configuration once the modules they are using have been updated.
 
 We plan to remove support for the current third-party rules interface in September 2021.
@@ -237,9 +237,9 @@ SQLite databases are unaffected by this change.
 
 The current spam checker interface is deprecated in favour of a new generic modules system.
 Authors of spam checker modules can refer to [this
-documentation](modules.md#porting-an-existing-module-that-uses-the-old-interface)
+documentation](modules/porting_legacy_module.md
 to update their modules. Synapse administrators can refer to [this
-documentation](modules.md#using-modules)
+documentation](modules/index.md)
 to update their configuration once the modules they are using have been updated.
 
 We plan to remove support for the current spam checker interface in August 2021.