diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index f74ce75d0..06d8d4e8a 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -1547,10 +1547,10 @@ inlineToHtml opts inline = do
_ -> do report $ InlineNotRendered inline
return mempty
(Link attr txt (s,_)) | "mailto:" `T.isPrefixOf` s -> do
- linkText <- inlineListToHtml opts txt
+ linkText <- inlineListToHtml opts (removeLinks txt)
obfuscateLink opts attr linkText s
(Link (ident,classes,kvs) txt (s,tit)) -> do
- linkText <- inlineListToHtml opts txt
+ linkText <- inlineListToHtml opts (removeLinks txt)
slideVariant <- gets stSlideVariant
let s' = case T.uncons s of
Just ('#',xs) -> let prefix = if slideVariant == RevealJsSlides
@@ -1731,3 +1731,11 @@ isRawHtml f = do
html5 <- gets stHtml5
return $ f == Format "html" ||
((html5 && f == Format "html5") || f == Format "html4")
+
+-- We need to remove links from link text, because an element is
+-- not allowed inside another element.
+removeLinks :: [Inline] -> [Inline]
+removeLinks = walk go
+ where
+ go (Link attr ils _) = Span attr ils
+ go x = x
diff --git a/test/command/html-writer-a-in-a.md b/test/command/html-writer-a-in-a.md
new file mode 100644
index 000000000..219496d28
--- /dev/null
+++ b/test/command/html-writer-a-in-a.md
@@ -0,0 +1,7 @@
+a is not allowed inside a in HTML, so we remove links in link text:
+```
+% pandoc -f native -t html
+[ Link ("",[],[]) [Link ("",[],[]) [Str "Lo"] ("url2","") ] ("url","") ]
+^D
+Lo
+```