Repository: gohugoio/hugo (language: go)

Issue:
Remove trailing slash from void elements in internal templates
### What version of Hugo are you using (`hugo version`)?

<pre>
~ $ hugo version
hugo v0.121.2+extended linux/amd64 BuildDate=unknown
</pre>

### Does this issue reproduce with the latest release?

yes

hugo generates the tags with a trailing slash & the W3C validator complains about it.

find the report of the build I tested [here](https://validator.w3.org/nu/?doc=https%3A%2F%2Fvishnusanal.github.io%2F).

should the trailing slash be removed? or am I missing something here? CMIIW!

PS: this is the same issue as #11576 & creating a new issue since that is locked.


Discussion / hints:

Fix patch:
diff --git a/tpl/tplimpl/embedded/templates/opengraph.html b/tpl/tplimpl/embedded/templates/opengraph.html
index bbe4e5dd0b5..135019b36c3 100644
--- a/tpl/tplimpl/embedded/templates/opengraph.html
+++ b/tpl/tplimpl/embedded/templates/opengraph.html
@@ -1,25 +1,25 @@
-<meta property="og:title" content="{{ .Title }}" />
-<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}" />
-<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" />
-<meta property="og:url" content="{{ .Permalink }}" />
+<meta property="og:title" content="{{ .Title }}">
+<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
+<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
+<meta property="og:url" content="{{ .Permalink }}">
 
 {{- $images := partial "_funcs/get-page-images" . -}}
 {{- range first 6 $images -}}
-  <meta property="og:image" content="{{ .Permalink }}" />
+  <meta property="og:image" content="{{ .Permalink }}">
 {{- end -}}
 
 {{- if .IsPage }}
 {{- $iso8601 := "2006-01-02T15:04:05-07:00" -}}
-<meta property="article:section" content="{{ .Section }}" />
-{{ with .PublishDate }}<meta property="article:published_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }}
-{{ with .Lastmod }}<meta property="article:modified_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }}
+<meta property="article:section" content="{{ .Section }}">
+{{ with .PublishDate }}<meta property="article:published_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }}>{{ end }}
+{{ with .Lastmod }}<meta property="article:modified_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }}>{{ end }}
 {{- end -}}
 
-{{- with .Params.audio }}<meta property="og:audio" content="{{ . }}" />{{ end }}
-{{- with .Params.locale }}<meta property="og:locale" content="{{ . }}" />{{ end }}
-{{- with .Site.Params.title }}<meta property="og:site_name" content="{{ . }}" />{{ end }}
+{{- with .Params.audio }}<meta property="og:audio" content="{{ . }}">{{ end }}
+{{- with .Params.locale }}<meta property="og:locale" content="{{ . }}">{{ end }}
+{{- with .Site.Params.title }}<meta property="og:site_name" content="{{ . }}">{{ end }}
 {{- with .Params.videos }}{{- range . }}
-<meta property="og:video" content="{{ . | absURL }}" />
+<meta property="og:video" content="{{ . | absURL }}">
 {{ end }}{{ end }}
 
 {{- /* If it is part of a series, link to related articles */}}
@@ -29,7 +29,7 @@
 {{ with .Params.series }}{{- range $name := . }}
   {{- $series := index $siteSeries ($name | urlize) }}
   {{- range $page := first 6 $series.Pages }}
-    {{- if ne $page.Permalink $permalink }}<meta property="og:see_also" content="{{ $page.Permalink }}" />{{ end }}
+    {{- if ne $page.Permalink $permalink }}<meta property="og:see_also" content="{{ $page.Permalink }}">{{ end }}
   {{- end }}
 {{ end }}{{ end }}
 {{- end }}
@@ -38,7 +38,7 @@
 {{- with site.Params.social }}
   {{- if reflect.IsMap . }}
     {{- with .facebook_admin }}
-      <meta property="fb:admins" content="{{ . }}" />
+      <meta property="fb:admins" content="{{ . }}">
     {{- end }}
   {{- end }}
 {{- end }}
diff --git a/tpl/tplimpl/embedded/templates/twitter_cards.html b/tpl/tplimpl/embedded/templates/twitter_cards.html
index c445efdfc2c..14c92274bf1 100644
--- a/tpl/tplimpl/embedded/templates/twitter_cards.html
+++ b/tpl/tplimpl/embedded/templates/twitter_cards.html
@@ -1,12 +1,12 @@
 {{- $images := partial "_funcs/get-page-images" . -}}
 {{- with index $images 0 -}}
-<meta name="twitter:card" content="summary_large_image" />
-<meta name="twitter:image" content="{{ .Permalink }}" />
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:image" content="{{ .Permalink }}">
 {{- else -}}
-<meta name="twitter:card" content="summary"/>
+<meta name="twitter:card" content="summary">
 {{- end -}}
-<meta name="twitter:title" content="{{ .Title }}"/>
-<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}"/>
+<meta name="twitter:title" content="{{ .Title }}">
+<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}">
 
 {{- $twitterSite := "" }}
 {{- with site.Params.social }}
@@ -16,7 +16,7 @@
       {{- if not (strings.HasPrefix . "@") }}
         {{- $content = printf "@%v" . }}
       {{- end }}
-      <meta name="twitter:site" content="{{ $content }}"/>
+      <meta name="twitter:site" content="{{ $content }}">
     {{- end }}
   {{- end }}
 {{- end }}


Test patch:
diff --git a/hugolib/embedded_templates_test.go b/hugolib/embedded_templates_test.go
index 5ef92597c5a..d9575a45f52 100644
--- a/hugolib/embedded_templates_test.go
+++ b/hugolib/embedded_templates_test.go
@@ -60,13 +60,13 @@ title: My Site
 	b.Build(BuildCfg{})
 
 	b.AssertFileContent("public/mybundle/index.html", `
-<meta name="twitter:image" content="https://example.org/mybundle/featured-sunset.jpg" />
-<meta name="twitter:title" content="My Bundle"/>
-<meta property="og:title" content="My Bundle" />
-<meta property="og:url" content="https://example.org/mybundle/" />
-<meta property="og:image" content="https://example.org/mybundle/featured-sunset.jpg" />
-<meta property="article:published_time" content="2021-02-26T18:02:00-01:00" />
-<meta property="article:modified_time" content="2021-05-22T19:25:00-01:00" />
+<meta name="twitter:image" content="https://example.org/mybundle/featured-sunset.jpg">
+<meta name="twitter:title" content="My Bundle">
+<meta property="og:title" content="My Bundle">
+<meta property="og:url" content="https://example.org/mybundle/">
+<meta property="og:image" content="https://example.org/mybundle/featured-sunset.jpg">
+<meta property="article:published_time" content="2021-02-26T18:02:00-01:00">
+<meta property="article:modified_time" content="2021-05-22T19:25:00-01:00">
 <meta itemprop="name" content="My Bundle">
 <meta itemprop="image" content="https://example.org/mybundle/featured-sunset.jpg">
 <meta itemprop="datePublished" content="2021-02-26T18:02:00-01:00">
@@ -74,13 +74,13 @@ title: My Site
 
 `)
 	b.AssertFileContent("public/mypage/index.html", `
-<meta name="twitter:image" content="https://example.org/pageimg1.jpg" />
-<meta property="og:image" content="https://example.org/pageimg1.jpg" />
-<meta property="og:image" content="https://example.org/pageimg2.jpg" />
-<meta property="og:image" content="https://example.local/logo.png" />
-<meta property="og:image" content="https://example.org/mypage/sample.jpg" />
-<meta property="article:published_time" content="2021-02-26T18:02:00+01:00" />
-<meta property="article:modified_time" content="2021-05-22T19:25:00+01:00" />
+<meta name="twitter:image" content="https://example.org/pageimg1.jpg">
+<meta property="og:image" content="https://example.org/pageimg1.jpg">
+<meta property="og:image" content="https://example.org/pageimg2.jpg">
+<meta property="og:image" content="https://example.local/logo.png">
+<meta property="og:image" content="https://example.org/mypage/sample.jpg">
+<meta property="article:published_time" content="2021-02-26T18:02:00+01:00">
+<meta property="article:modified_time" content="2021-05-22T19:25:00+01:00">
 <meta itemprop="image" content="https://example.org/pageimg1.jpg">
 <meta itemprop="image" content="https://example.org/pageimg2.jpg">
 <meta itemprop="image" content="https://example.local/logo.png">
@@ -89,8 +89,8 @@ title: My Site
 <meta itemprop="dateModified" content="2021-05-22T19:25:00+01:00">
 `)
 	b.AssertFileContent("public/mysite/index.html", `
-<meta name="twitter:image" content="https://example.org/siteimg1.jpg" />
-<meta property="og:image" content="https://example.org/siteimg1.jpg" />
+<meta name="twitter:image" content="https://example.org/siteimg1.jpg">
+<meta property="og:image" content="https://example.org/siteimg1.jpg">
 <meta itemprop="image" content="https://example.org/siteimg1.jpg">
 `)
 }