How to check is canonicalized domains are being used? Apache 301 redirect does not preserve referrer

An referrer is not the same as a redirect.

If you call a page e.g. http://www.example.com and on the page you have one or more resource like Images, CSS and JavaScript files, the browser will get them as well. If the Browser do so he send the original page, in our case this is http://www.example.com as a referrer to the server. Even this is optimal all modern browser do so. There is only one exception if the origin page is a https URL but the resources is http.

Now a redirect is something completely different. If you request is going to a server and the server responds with a 301 redirect the browser understand that the location has changed and therefor requesting the new location.

But if a 301 is for a resource (image,css,js,etc.) the refer will usually send again to the new location. The same exception applies here with https and http (see above).

A referrer will not be send by the Browser if a user enter a URL into the browser e.g http://example.com and this URL will be redirected to http://www.example.com, because http://example.com is not the referring page it was just redirected to a new location.

Now to the possible solution: you could add some UTM Parameters to your redirect https://en.wikipedia.org/wiki/UTM_parameters . This will be tract by Google Analytics. So you see if a page was called with this UTM Parameters and that means that it was called by a redirect. You can do statistic of how many times that page is called with this parameter or what source was the most used etc. Of course if someone have disabled JS or have any Anti-Tracking plug in than you will not see this call in your statistic.

## Redirect non www to www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com$1?utm_source=%{HTTP_HOST}/%{REQUEST_URI}%?{QUERY_STRING}&utm_campaign=redirect [R=301,QSA,L]