Repository: gohugoio/hugo (language: go)

Issue:
HTML lang attribute missing: Add <html lang=""> to META redirect pages (aliases)
Some SEO tools reporting missing `<html lang="">` on meta redirect pages related to `aliases` in markdown files. Can we get this added, please? (with relevant reference to `{{ .Site.LanguageCode }}`)

Example:
```
<!doctype HTML>
<HTML>
<head>
<title>https://example.com/alias-link/</title>
<link rel=canonical href=https://example.com/correct-link/>
<meta name=robots content="noindex">
<meta charset=utf-8>
<meta http-equiv=refresh content="0; url=https://example.com/alias-link/">
</head>
</html>
```



Discussion / hints:
Just for posterities sake, this should NOT be added to Hugo. See https://discourse.gohugo.io/t/add-html-lang-to-meta-redirect-pages-layout-alias-html/37433/ for argumentation. 

Fix patch:
diff --git a/tpl/tplimpl/embedded/templates/alias.html b/tpl/tplimpl/embedded/templates/alias.html
index ee3f556e517..8448760fab5 100644
--- a/tpl/tplimpl/embedded/templates/alias.html
+++ b/tpl/tplimpl/embedded/templates/alias.html
@@ -1,1 +1,10 @@
-<!DOCTYPE html><html><head><title>{{ .Permalink }}</title><link rel="canonical" href="{{ .Permalink }}"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url={{ .Permalink }}" /></head></html>
\ No newline at end of file
+<!DOCTYPE html>
+<html{{ with site.LanguageCode | default site.Language.Lang }} lang="{{ . }}"{{ end }}>
+  <head>
+    <title>{{ .Permalink }}</title>
+    <link rel="canonical" href="{{ .Permalink }}">
+    <meta name="robots" content="noindex">
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url={{ .Permalink }}">
+  </head>
+</html>


Test patch:
diff --git a/hugolib/alias_test.go b/hugolib/alias_test.go
index d5ffc06fe61..8c00f8360f0 100644
--- a/hugolib/alias_test.go
+++ b/hugolib/alias_test.go
@@ -71,8 +71,8 @@ func TestAlias(t *testing.T) {
 		// the real page
 		b.AssertFileContent("public/blog/page"+test.fileSuffix, "For some moments the old man")
 		// the alias redirectors
-		b.AssertFileContent("public/foo/bar"+test.fileSuffix, "<meta http-equiv=\"refresh\" content=\"0; url="+test.urlPrefix+"/blog/page"+test.urlSuffix+"\" />")
-		b.AssertFileContent("public/blog/rel"+test.fileSuffix, "<meta http-equiv=\"refresh\" content=\"0; url="+test.urlPrefix+"/blog/page"+test.urlSuffix+"\" />")
+		b.AssertFileContent("public/foo/bar"+test.fileSuffix, "<meta http-equiv=\"refresh\" content=\"0; url="+test.urlPrefix+"/blog/page"+test.urlSuffix+"\">")
+		b.AssertFileContent("public/blog/rel"+test.fileSuffix, "<meta http-equiv=\"refresh\" content=\"0; url="+test.urlPrefix+"/blog/page"+test.urlSuffix+"\">")
 	}
 }
 
diff --git a/hugolib/hugo_sites_build_test.go b/hugolib/hugo_sites_build_test.go
index fdfc33c5a15..35804b89a52 100644
--- a/hugolib/hugo_sites_build_test.go
+++ b/hugolib/hugo_sites_build_test.go
@@ -83,14 +83,14 @@ func doTestMultiSitesMainLangInRoot(t *testing.T, defaultInSubDir bool) {
 		c.Assert(frRelPerm, qt.Equals, "/blog/fr/sect/doc1/")
 
 		// should have a redirect on top level.
-		b.AssertFileContent("public/index.html", `<meta http-equiv="refresh" content="0; url=http://example.com/blog/fr" />`)
+		b.AssertFileContent("public/index.html", `<meta http-equiv="refresh" content="0; url=http://example.com/blog/fr">`)
 	} else {
 		// Main language in root
 		c.Assert(frPerm, qt.Equals, "http://example.com/blog/sect/doc1/")
 		c.Assert(frRelPerm, qt.Equals, "/blog/sect/doc1/")
 
 		// should have redirect back to root
-		b.AssertFileContent("public/fr/index.html", `<meta http-equiv="refresh" content="0; url=http://example.com/blog" />`)
+		b.AssertFileContent("public/fr/index.html", `<meta http-equiv="refresh" content="0; url=http://example.com/blog">`)
 	}
 	b.AssertFileContent(pathMod("public/fr/index.html"), "Home", "Bonjour")
 	b.AssertFileContent("public/en/index.html", "Home", "Hello")
diff --git a/hugolib/page_test.go b/hugolib/page_test.go
index 637ac46f77a..926fdb354bc 100644
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -1653,11 +1653,11 @@ tags:
 				th.assertFileContent(pathFunc("public/post/test0.dot/index.html"), "some content")
 
 				if uglyURLs {
-					th.assertFileContent("public/post/page/1.html", `canonical" href="/post.html"/`)
+					th.assertFileContent("public/post/page/1.html", `canonical" href="/post.html"`)
 					th.assertFileContent("public/post.html", `<body>P1|URL: /post.html|Next: /post/page/2.html</body>`)
 					th.assertFileContent("public/post/page/2.html", `<body>P2|URL: /post/page/2.html|Next: /post/page/3.html</body>`)
 				} else {
-					th.assertFileContent("public/post/page/1/index.html", `canonical" href="/post/"/`)
+					th.assertFileContent("public/post/page/1/index.html", `canonical" href="/post/"`)
 					th.assertFileContent("public/post/index.html", `<body>P1|URL: /post/|Next: /post/page/2/</body>`)
 					th.assertFileContent("public/post/page/2/index.html", `<body>P2|URL: /post/page/2/|Next: /post/page/3/</body>`)
 					th.assertFileContent("public/tags/.net/index.html", `<body>P1|URL: /tags/.net/|Next: /tags/.net/page/2/</body>`)