diff --git a/changelog.d/12860.misc b/changelog.d/12860.misc
new file mode 100644
index 0000000000000000000000000000000000000000..b7d29430234ed4959a88b69cf9b29c048bdc3b80
--- /dev/null
+++ b/changelog.d/12860.misc
@@ -0,0 +1 @@
+Correct a type annotation in the URL preview source code.
diff --git a/synapse/rest/media/v1/preview_html.py b/synapse/rest/media/v1/preview_html.py
index ca73965fc28f4ab3f3e3b398cbd7afc6c33e6a1e..e72c8987ccb4cfdebe285457c162ed0cca036942 100644
--- a/synapse/rest/media/v1/preview_html.py
+++ b/synapse/rest/media/v1/preview_html.py
@@ -281,7 +281,7 @@ def parse_html_description(tree: "etree.Element") -> Optional[str]:
 
 
 def _iterate_over_text(
-    tree: "etree.Element", *tags_to_ignore: Iterable[Union[str, "etree.Comment"]]
+    tree: "etree.Element", *tags_to_ignore: Union[str, "etree.Comment"]
 ) -> Generator[str, None, None]:
     """Iterate over the tree returning text nodes in a depth first fashion,
     skipping text nodes inside certain tags.