diff --git a/template/functions.go b/template/functions.go
index d4ca80edb4056229c2aa421a0d8d5be707732c36..b86b059e2be99ad72b2b959ca6bb413825fba17b 100644
--- a/template/functions.go
+++ b/template/functions.go
@@ -75,7 +75,7 @@ func (f *funcMap) Map() template.FuncMap {
 		"contains": func(str, substr string) bool {
 			return strings.Contains(str, substr)
 		},
-		"replace": func(str, old string, new string) string {
+		"replace": func(str, old, new string) string {
 			return strings.Replace(str, old, new, 1)
 		},
 		"isodate": func(ts time.Time) string {
@@ -86,7 +86,7 @@ func (f *funcMap) Map() template.FuncMap {
 		},
 		"icon": func(iconName string) template.HTML {
 			return template.HTML(fmt.Sprintf(
-				`<svg class="icon" aria-hidden="true"><use xlink:href="%s#icon-%s"></svg>`,
+				`<svg class="icon" aria-hidden="true"><use xlink:href="%s#icon-%s"/></svg>`,
 				route.Path(f.router, "appIcon", "filename", "sprite.svg"),
 				iconName,
 			))
diff --git a/template/templates/common/layout.html b/template/templates/common/layout.html
index efdedbb55bf4d2c7919869d8fedafa1318ff5560..eb171d6d1ca08fef8074397506c05f6de2e3e3ee 100644
--- a/template/templates/common/layout.html
+++ b/template/templates/common/layout.html
@@ -29,20 +29,17 @@
     <link rel="apple-touch-icon" sizes="167x167" href="{{ route "appIcon" "filename" "icon-167.png" }}">
     <link rel="apple-touch-icon" sizes="180x180" href="{{ route "appIcon" "filename" "icon-180.png" }}">
 
-    {{ if .csrf }}
-        <meta name="X-CSRF-Token" value="{{ .csrf }}">
-    {{ end }}
-
     <meta name="theme-color" content="{{ theme_color .theme }}">
     <link rel="stylesheet" type="text/css" href="{{ route "stylesheet" "name" .theme }}?{{ .theme_checksum }}">
     {{ if and .user .user.Stylesheet }}
     <link rel="stylesheet" type="text/css" href="{{ route "stylesheet" "name" "custom_css" }}?{{ rand }}">
     {{ end }}
 
-    <script type="text/javascript" src="{{ route "javascript" "name" "app" }}?{{ .app_js_checksum }}" defer></script>
-    <script type="text/javascript" src="{{ route "javascript" "name" "service-worker" }}?{{ .sw_js_checksum }}" defer id="service-worker-script"></script>
+    <script src="{{ route "javascript" "name" "app" }}?{{ .app_js_checksum }}" defer></script>
+    <script src="{{ route "javascript" "name" "service-worker" }}?{{ .sw_js_checksum }}" defer id="service-worker-script"></script>
 </head>
 <body
+    {{ if .csrf }}data-csrf-token="{{ .csrf }}"{{ end }}
     data-entries-status-url="{{ route "updateEntriesStatus" }}"
     data-refresh-all-feeds-url="{{ route "refreshAllFeeds" }}"
     {{ if .user }}{{ if not .user.KeyboardShortcuts }}data-disable-keyboard-shortcuts="true"{{ end }}{{ end }}>
diff --git a/ui/static/js/request_builder.js b/ui/static/js/request_builder.js
index 4a41f6477b831779394013ef32707ba17282aace..140d6bca229b3ad19f2faede454368bb843a2683 100644
--- a/ui/static/js/request_builder.js
+++ b/ui/static/js/request_builder.js
@@ -30,9 +30,9 @@ class RequestBuilder {
     }
 
     getCsrfToken() {
-        let element = document.querySelector("meta[name=X-CSRF-Token]");
+        let element = document.querySelector("body[data-csrf-token");
         if (element !== null) {
-            return element.getAttribute("value");
+            return element.dataset.csrfToken;
         }
 
         return "";