about summary refs log tree commit diff
path: root/bskyweb
diff options
context:
space:
mode:
authorCaidan Williams <caidan@internet.dev>2025-08-25 15:24:57 -0700
committerCaidan Williams <caidan@internet.dev>2025-08-25 16:04:45 -0700
commit60a1be6de0c10286a658ae7b9bcf0d891965dc55 (patch)
tree0f5430bf94f5bc91f48e0282a7c249c9025cbe37 /bskyweb
parent27c591f031fbe8b3a5837c4ef7082b2ce146a050 (diff)
downloadvoidsky-60a1be6de0c10286a658ae7b9bcf0d891965dc55.tar.zst
feat(seo): add canonical URL filter to remove query parameters
Addresses community feedback about canonical URLs being misleading
when they include UTM parameters. The new Pongo2 filter creates
clean canonical URLs while preserving tracking parameters for
social sharing.
Diffstat (limited to 'bskyweb')
-rw-r--r--bskyweb/cmd/bskyweb/filters.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/bskyweb/cmd/bskyweb/filters.go b/bskyweb/cmd/bskyweb/filters.go
new file mode 100644
index 000000000..0b882780b
--- /dev/null
+++ b/bskyweb/cmd/bskyweb/filters.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"net/url"
+
+	"github.com/flosch/pongo2/v6"
+)
+
+func init() {
+	pongo2.RegisterFilter("canonical", filterCanonical)
+}
+
+func filterCanonical(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
+	urlStr := in.String()
+
+	parsedURL, err := url.Parse(urlStr)
+	if err != nil {
+		// If parsing fails, return the original URL
+		return in, nil
+	}
+
+	// Remove query parameters and fragment
+	parsedURL.RawQuery = ""
+	parsedURL.Fragment = ""
+
+	// Return the cleaned URL
+	return pongo2.AsValue(parsedURL.String()), nil
+}