hako/internal/archival/rules/url_cleaner.go

51 lines
1.5 KiB
Go

package rules
import (
"net/url"
)
// trackingParameters is a set of query parameter names that should be removed from URLs
var trackingParameters = map[string]struct{}{
"utm_source": {}, // UTM parameter - marketing campaign source
"utm_medium": {}, // UTM parameter - marketing campaign medium
"utm_campaign": {}, // UTM parameter - marketing campaign name
"utm_term": {}, // UTM parameter - marketing campaign term
"utm_content": {}, // UTM parameter - marketing campaign content
"fbclid": {}, // Facebook click ID
"gclid": {}, // Google click ID
"ref_src": {}, // Twitter/X referrer source
"ref_url": {}, // Twitter/X referrer URL
}
// CleanURL removes tracking and social network parameters from a URL.
// Other query parameters are preserved. If the URL cannot be parsed, it returns the original URL.
func CleanURL(urlStr string) string {
parsedURL, err := url.Parse(urlStr)
if err != nil {
// If URL cannot be parsed, return original
return urlStr
}
// If there are no query parameters, return original URL
if parsedURL.RawQuery == "" {
return urlStr
}
// Parse query parameters
query := parsedURL.Query()
// Remove tracking parameters
for param := range trackingParameters {
query.Del(param)
}
// Reconstruct URL with cleaned query parameters
parsedURL.RawQuery = query.Encode()
// If all query parameters were removed, clear the query string
if parsedURL.RawQuery == "" {
parsedURL.RawQuery = ""
}
return parsedURL.String()
}