How to detect users setting do-not-track

Navigator.doNotTrack

If you want to use client-side JavaScript to check whether or not a user has the dnt request header set, you can use navigator.doNotTrack.

This property returns the value of the dnt HTTP header (i.e., "1", "0", or "unspecified").

You can access this value via PHP by POSTing this value via AJAX.

const is_not_trackable = navigator.doNotTrack === '1';

console.log(is_not_trackable); // True if user has requested privacy via DNT
console.log(navigator.doNotTrack); // Current value of DNT header

Note: At the time of posting, navigator.doNotTrack is still considered experimental technology. Expect behavior to change in the future, and proceed with caution before using it in your application. See Browser Compatibility.


$do_not_track_requested = ! empty( $_SERVER[ 'HTTP_DNT' ] );

All HTTP headers are present in $_SERVER, prefixed with HTTP_.

https://www.php.net/manual/en/reserved.variables.server.php#89567


It's sent as an HTTP header:

function dnt_enabled()
{
   return (isset($_SERVER['HTTP_DNT']) && $_SERVER['HTTP_DNT'] == 1);
}

if dnt_enabled() {
    // do stuff...
}

Or, if you're using PHP 7:

function dnt_enabled(): bool
{
   return (bool)$_SERVER['HTTP_DNT'] ?? false;
}