"Opting out" DuckDuckGo search result click tracking
Table of Contents
Despite some search-related ad search results, DuckDuckGo implements a redirect-based tracking for search results, which looks like:
https://duckduckgo.com/l/?uddg=<URL>&rut=<SOME_TRACKING_CODE>
Concerning this annoyance, an convenient config you can use while surfing lite.duckduckgo.com is the kd GET parameter.
If you want to disable "safe search" as well, use kp.
Parameters Table
See below reference table for the more relevant query parameters. It was sourced from their official documentation: How To Use URL Parameters To Change Your DuckDuckGo Search Settings - DuckDuc…
| Name | Parameter | Values |
|---|---|---|
| Safe Search | kp | 1 for On; -1 for Moderate; -2 for Off |
| Redirect | kd | 1 for On; -1 for Off |
| Advertisements | k1 | 1 for On (default); -1 for Off |
Final URL
const params = new URLSearchParams({ kd: -1, // Disable tracking redirect kp: -2, // Disable safe search k1: -1, // Disable ads q: "your query here" }); return "https://lite.duckduckgo.com/lite/?" + params
'https://lite.duckduckgo.com/lite/?kd=-1&kp=-2&k1=-1&q=your+query+here'
Now, you can configure your browser! Examples:
Emacs EWW:
(setq eww-search-prefix "https://lite.duckduckgo.com/lite/?kd=-1&kp=-2&k1=-1&q=")
Chawan:
[omnirule.ddg] match = '^ddg:' substitute-url = '(x) => "https://lite.duckduckgo.com/lite/?kd=-1&kp=-2&k1=-1&q=" + encodeURIComponent(x.split(":").slice(1).join(":"))'
But note, the custom parameters might create a more specific fingerprint to your browsing, they'll be one of the few users that configures via GET parameters.
Either way, I think it's better than letting they know which search result I chose.
Outro
This might be another 1% in your journey, but a more private approach is to avoid searching on unified search engines as DuckDuckGo. If possible, search directly in the website you're aiming.
Thanks for reading, stay safe :p