diff --git a/Text/Markdown.hs b/Text/Markdown.hs
--- a/Text/Markdown.hs
+++ b/Text/Markdown.hs
@@ -15,6 +15,7 @@
     , msBlankBeforeBlockquote
     , msBlockFilter
     , msAddHeadingId
+    , setNoFollowExternal
       -- * Newtype
     , Markdown (..)
       -- * Fenced handlers
@@ -33,7 +34,9 @@
 import Data.Char (isAlphaNum)
 import Data.Default (Default (..))
 import Data.List (intercalate, isInfixOf)
+import Data.Maybe (isJust)
 import Data.Text (Text)
+import qualified Data.Text as T
 import qualified Data.Text.Lazy as TL
 import Text.Blaze (toValue)
 import Text.Blaze.Html (ToMarkup (..), Html)
@@ -170,12 +173,13 @@
     go (InlineItalic is) = H.i $ gos is
     go (InlineBold is) = H.b $ gos is
     go (InlineCode t) = H.code $ toMarkup t
-    go (InlineLink url Nothing content)
-        | msLinkNewTab ms = H.a H.! HA.href (H.toValue url) H.! HA.target "_blank" $ gos content
-        | otherwise = H.a H.! HA.href (H.toValue url) $ gos content
-    go (InlineLink url (Just title) content)
-        | msLinkNewTab ms = H.a H.! HA.href (H.toValue url) H.! HA.title (H.toValue title) H.! HA.target "_blank" $ gos content
-        | otherwise = H.a H.! HA.href (H.toValue url) H.! HA.title (H.toValue title) $ gos content
+    go (InlineLink url mtitle content) =
+        H.a
+        H.! HA.href (H.toValue url)
+        H.!? (msLinkNewTab ms, HA.target "_blank")
+        H.!? (msNoFollowExternal ms && isExternalLink url, HA.rel "nofollow")
+        H.!? (isJust mtitle, HA.title $ maybe (error "impossible") H.toValue mtitle)
+        $ gos content
     go (InlineImage url Nothing content) = H.img H.! HA.src (H.toValue url) H.! HA.alt (H.toValue content)
     go (InlineImage url (Just title) content) = H.img H.! HA.src (H.toValue url) H.! HA.alt (H.toValue content) H.! HA.title (H.toValue title)
     go (InlineHtml t) = escape t
@@ -187,3 +191,13 @@
                                 (<>) = mappend
                              in H.a H.! HA.href (H.toValue $ "#ref-" <> ishown)
                                     H.! HA.id (H.toValue $ "footnote-" <> ishown) $ H.toHtml $ "[" <> ishown <> "]"
+
+-- | For external links, add the rel="nofollow" attribute
+--
+-- @since 0.1.16
+setNoFollowExternal :: MarkdownSettings -> MarkdownSettings
+setNoFollowExternal ms = ms { msNoFollowExternal = True }
+
+-- | Is the given URL an external link?
+isExternalLink :: Text -> Bool
+isExternalLink = T.isInfixOf "//"
diff --git a/Text/Markdown/Types.hs b/Text/Markdown/Types.hs
--- a/Text/Markdown/Types.hs
+++ b/Text/Markdown/Types.hs
@@ -101,6 +101,7 @@
       --
       -- Since 0.1.13
 
+    , msNoFollowExternal :: Bool
     }
 
 -- | See 'msFencedHandlers.
@@ -125,6 +126,7 @@
         , msBlankBeforeBlockquote = True
         , msBlockFilter = id
         , msAddHeadingId = False
+        , msNoFollowExternal = False
         }
 
 instance Default MarkdownSettings where
diff --git a/markdown.cabal b/markdown.cabal
--- a/markdown.cabal
+++ b/markdown.cabal
@@ -1,5 +1,5 @@
 Name:                markdown
-Version:             0.1.15
+Version:             0.1.16
 Synopsis:            Convert Markdown to HTML, with XSS protection
 Description:         This library leverages existing high-performance libraries (attoparsec, blaze-html, text, and conduit), and should integrate well with existing codebases.
 Homepage:            https://github.com/snoyberg/markdown
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -252,6 +252,17 @@
     it "comments without spaces #22" $
         check "<!--<>-->" "<!--<>-->"
 
+    describe "no follow" $ do
+        it "external 1" $ checkSet (setNoFollowExternal def)
+            "<p><a href=\"http://example.com\" rel=\"nofollow\">example</a></p>"
+            "[example](http://example.com)"
+        it "external 2" $ checkSet (setNoFollowExternal def)
+            "<p><a href=\"//example.com\" rel=\"nofollow\">example</a></p>"
+            "[example](//example.com)"
+        it "internal" $ checkSet (setNoFollowExternal def)
+            "<p><a href=\"/foo\">example</a></p>"
+            "[example](/foo)"
+
 getExamples :: IO [Spec]
 getExamples = do
     files <- getDirectoryContents dir
