Most of them rely on Javascript or some other "modern" browser feature.
Not very reliable when user disables it or uses client that does not support it.
HTTP headers are malleable yet I still see the big tech companies appearing to treat them as reliably identifying a program/device. A new user-agent string or set of HTTP headers is not necessarily a new program/device.