BOT FLAG #3 -- Invalid Graphics Processing Units (GPUs)
To put it as simply as possible, a graphics processing unit (GPU) is a computer chip that controls the output to a display screen. Assuming that you're reading this on a screen (and how else would you read it?), then a graphics card helped get it there.
If you're on a windows computer, you can see the manufacturer of your graphics card, by going into the search bar and typing in "dxdiag" + enter.
A windows tool will pop up called "DirectX Diagnostic Tool." Then click on the “Display” tab. You’ll see something like the below:
I can see that I have a computer with an Intel(R) UHD Graphics 620. And through the use of a JavaScript library called “WebGL” most analytics platforms can see this too.
WebGL was originally designed for browsers to render 2D / 3D graphics without the use of additional plugins. Does anyone here who was active online in the 90’s remember things like downloading flash or shockwave plugins? WebGL was designed to help avoid some of that. But in order to properly render an image, you need to know what GPU the user had, so WebGL enables this kind of functionality.
If you want more information, read here:
https://dev.opera.com/articles/introduction-to-webgl-part-1/
The thing is, clever ad networks / ad verification vendors realized that they could use the same parameter to help identify the graphics card that a browser was using. When you visit a website or load an ad, the ad itself actually renders on the page. It uses a your graphics card to load the content. These vendors through the use of WebGL can see that you’re in a real browser, loading real content. To confirm, go to
https://browserleaks.com/webgl.
If you scroll down, the Unmasked Renderer field, collected via WebGL, should match your graphics card pretty closely (as should the other WebGL parameters). “Should” and “closely” being the operative words. I’m going to include some technical details below because I think they’re interesting, but if you don’t really care, you can skip the next few paragraphs.
As you can see, my detected GPU is: “ANGLE (Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0)”. The Intel(R) UHD Graphics 620 is from our DxDiag.
ANGLE stands for “Almost Native Graphics Layer Engine.” It’s a product developed by Google whose goal is to “allow users to seamlessly run WebGL and other content” by translating OpenGL calls to one of the hardware-supported APIs available for the browser user’s (in this case, my own) operating system. Basically this makes using a web brower (like Chrome) faster.
In my case, because I’m using a Microsoft computer, ANGLE is using Direct3D11 (a Microsoft 3D graphics rendering API) to render the graphics on the page.
As for “vs_5_0 ps_5_0”:
- “vs” stands for “vertex shader” version 5.0
- “ps” stands for “pixel shader” version 5.0
This is just instructing Direct3D11 how to render the graphics on the screen using vertex shader v5.0 and pixel shader v5.0.
The point of all this is that the WebGL library has identified that we have a graphics card, and a valid graphics card (ad networks check for both).
That means that the page rendered and any ads ran likely rendered too.
However, there are such things as headless browsers where the browser itself runs in the background, but you don’t see it. In this case, WebGL wouldn’t actually detect anything, because Headless Browsers run in the background without utilizing the graphics card. Instead, it’ll return results such as the ones below:
- Google SwiftShader
- Microsoft Basic Render Driver
- llvmpipe (LLVM 6.0, 256 bits)
Google SwiftShader is when a Chrome/Chromium based browser renders in the background and it doesn’t connect to your actual graphics card. Microsoft Basic Render Driver is the same thing, but with non-chrome browsers on windows devices. llvmpipe (LLVM 6.0, 256 bits) is when it’s a Linux computer (probably a server) with no graphics card at all! There are other bot indicators, but I'm sure you get the idea. An example from my tracking pixel below.
TL;DR -- If a computer doesn’t have a valid graphics card, then it’s likely a bot and will get flagged.
One more thing to note--typically when a bot is a bot, they have a LOT of these flags set off simultaneously. This has a bad user agent (covered in the future), a data center IP address, and no valid graphics card.