Add a BlackFriday option for rel="nofollow" on external links
authorStefan Neuhaus <stefan@stefanneuhaus.org>
Sun, 27 May 2018 21:14:34 +0000 (23:14 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 27 May 2018 23:21:36 +0000 (01:21 +0200)
Add a configuration option "nofollowLinks". When set to "true" the "HTML_NOFOLLOW_LINKS" flag is being passed to Blackfriday. Thereby all *absolute* links will get a "nofollow" value for the "rel" attribute.

Fixes #4722

docs/content/en/readfiles/bfconfig.md
helpers/content.go
helpers/content_test.go

index 2d62c310d893aa93c02e384e93f2c083f4a35a84..a7e74566a8c056aced24eb718bb0655f12220a3b 100644 (file)
     Blackfriday flag: **`HTML_HREF_TARGET_BLANK`** <br>
     Purpose: `true` opens <s>external links</s> **absolute** links in a new window or tab. While the `target="_blank"` attribute is typically used for external links, Blackfriday does that for _all_ absolute links ([ref](https://discourse.gohugo.io/t/internal-links-in-same-tab-external-links-in-new-tab/11048/8)). One needs to make note of this if they use absolute links throughout, for internal links too (for example, by setting `canonifyURLs` to `true` or via `absURL`).
 
+`nofollowLinks`
+: default: **`false`** <br>
+    Blackfriday flag: **`HTML_NOFOLLOW_LINKS`** <br>
+    Purpose: `true` creates <s>external links</s> **absolute** links with `nofollow` being added to their `rel` attribute. Thereby crawlers are advised to not follow the link. While the `rel="nofollow"` attribute is typically used for external links, Blackfriday does that for _all_ absolute links. One needs to make note of this if they use absolute links throughout, for internal links too (for example, by setting `canonifyURLs` to `true` or via `absURL`).
+
 `plainIDAnchors`
 : default **`true`** <br>
     Blackfriday flag: **`FootnoteAnchorPrefix` and `HeaderIDSuffix`** <br>
index d42995519f477c72f1c4b56178600ad054a403e8..4a46ecb77c765b89517268311c95ce71198f51fc 100644 (file)
@@ -108,6 +108,7 @@ type BlackFriday struct {
        AngledQuotes          bool
        Fractions             bool
        HrefTargetBlank       bool
+       NofollowLinks         bool
        SmartDashes           bool
        LatexDashes           bool
        TaskLists             bool
@@ -124,6 +125,7 @@ func newBlackfriday(config map[string]interface{}) *BlackFriday {
                "smartypantsQuotesNBSP": false,
                "fractions":             true,
                "hrefTargetBlank":       false,
+               "nofollowLinks":         false,
                "smartDashes":           true,
                "latexDashes":           true,
                "plainIDAnchors":        true,
@@ -277,6 +279,10 @@ func (c *ContentSpec) getHTMLRenderer(defaultFlags int, ctx *RenderingContext) b
                htmlFlags |= blackfriday.HTML_HREF_TARGET_BLANK
        }
 
+       if ctx.Config.NofollowLinks {
+               htmlFlags |= blackfriday.HTML_NOFOLLOW_LINKS
+       }
+
        if ctx.Config.SmartDashes {
                htmlFlags |= blackfriday.HTML_SMARTYPANTS_DASHES
        }
index 2f8884c55f2fc70224a52ab37f9929aa862b944c..fe670bd7473135f71146e1b4efeba6a4b6271cb4 100644 (file)
@@ -204,6 +204,7 @@ func TestGetHTMLRendererAllFlags(t *testing.T) {
                {blackfriday.HTML_SMARTYPANTS_ANGLED_QUOTES},
                {blackfriday.HTML_SMARTYPANTS_FRACTIONS},
                {blackfriday.HTML_HREF_TARGET_BLANK},
+               {blackfriday.HTML_NOFOLLOW_LINKS},
                {blackfriday.HTML_SMARTYPANTS_DASHES},
                {blackfriday.HTML_SMARTYPANTS_LATEX_DASHES},
        }
@@ -212,6 +213,7 @@ func TestGetHTMLRendererAllFlags(t *testing.T) {
        ctx.Config.AngledQuotes = true
        ctx.Config.Fractions = true
        ctx.Config.HrefTargetBlank = true
+       ctx.Config.NofollowLinks = true
        ctx.Config.LatexDashes = true
        ctx.Config.PlainIDAnchors = true
        ctx.Config.SmartDashes = true