3 Commits
Author SHA1 Message Date
andwati c18147034f Allow Cloudflare Web Analytics in the CSP
Cloudflare auto-injects beacon.min.js, which the CSP was blocking.
2026-10-07 11:29:27 +03:00
andwati 916a95f692 Restore the original GA measurement ID
G-9XLTKZF07C is the ID Google Analytics issues for this property.
2026-10-07 11:26:45 +03:00
andwati e0f0ae7c7f Fix GA measurement ID and CSP, redirect legacy Hugo URLs
Use the GA4 measurement ID Search Console expects and allow Google Tag Manager/Analytics in the CSP so gtag is not blocked. Add 301s from the old /posts, /writings, /tags, /archive, /about and /index.xml URLs to their current routes to clear the Search Console 404s.
2026-10-07 11:20:31 +03:00
+58 -1
View File
@@ -7,10 +7,67 @@ ignore-hidden-files = false
[advanced]
# Legacy Hugo URLs (/posts, /writings, /tags, ...) -> current routes. First match wins,
# so the trailing-slash variants Google crawled come before the bare ones.
[[advanced.redirects]]
source = "/posts/page/{*}/"
destination = "/writing"
kind = 301
[[advanced.redirects]]
source = "/posts/page/{*}"
destination = "/writing"
kind = 301
[[advanced.redirects]]
source = "/{posts,writings,tags,archive}/"
destination = "/writing"
kind = 301
[[advanced.redirects]]
source = "/{posts,writings}/{*}/"
destination = "/writing/$2"
kind = 301
[[advanced.redirects]]
source = "/{posts,writings}/{*}"
destination = "/writing/$2"
kind = 301
[[advanced.redirects]]
source = "/{posts,writings,tags,archive}"
destination = "/writing"
kind = 301
[[advanced.redirects]]
source = "/tags/{*}/"
destination = "/writing"
kind = 301
[[advanced.redirects]]
source = "/tags/{*}"
destination = "/writing"
kind = 301
[[advanced.redirects]]
source = "/about/"
destination = "/"
kind = 301
[[advanced.redirects]]
source = "/about"
destination = "/"
kind = 301
[[advanced.redirects]]
source = "/index.xml"
destination = "/rss.xml"
kind = 301
[[advanced.headers]]
source = "**"
[advanced.headers.headers]
Content-Security-Policy = "default-src 'self'; script-src 'self' 'unsafe-inline' https://utteranc.es https://analytics.andwati.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self' https://analytics.andwati.com; frame-src https://www.youtube-nocookie.com https://utteranc.es; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
Content-Security-Policy = "default-src 'self'; script-src 'self' 'unsafe-inline' https://utteranc.es https://analytics.andwati.com https://www.googletagmanager.com https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://www.google-analytics.com https://www.googletagmanager.com; font-src 'self'; connect-src 'self' https://cloudflareinsights.com https://analytics.andwati.com https://www.google-analytics.com https://*.google-analytics.com https://*.analytics.google.com https://www.googletagmanager.com; frame-src https://www.youtube-nocookie.com https://utteranc.es; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
X-Frame-Options = "DENY"
X-Content-Type-Options = "nosniff"
Referrer-Policy = "strict-origin-when-cross-origin"