Differences between Fetch and Render, Googlebot and the Mobile friendly test

If you spot an issue with the JS on your page in fetch and render (F&R) or the mobile testing tool (MTT), what are the chances Googlebot is actually having that issue?

Do those three different methods render JS in notably different ways? Let's find out out?

For those of you who are impatient: no, no they do not.

  • With the exceptions of timeouts (Googlebot won't wait as long as the other two tools), they don't appear to be very different.
  • The Mobile Testing Tool appears very very similar to Googlebot.
  • There are some slight differences between F&R and those two, but again nothing huge.

For those who want a little more granularity, you have the rest of this post! There are a couple small interesting differences and some fun things to note. Let's take a look:

Preface: Where is this data from?

There are more details at the bottom for those interested. The quick summary is:

What are the differences between fetch and render, the mobile testing tool and Googlebot

Unless otherwise specified the MTT had the same results as Googlebot, so I'll just refer to the MTT below unless they differed.

(It's worth noting, this is a small sample size. For things like user agent where Googlebot will occasionally change the agent its using, I've only shown what I saw in the test period.)

Aside: More things worth noting: Google has indexed the page in the test and posted to the endpoint, but it hasn't yet run fingerprintjs2. If it does I'll update the response, in the meantime we're going off everything else. It's definitely executed some JS, but unclear whether or not Google ignores the fingerprinting library or whether I'm still waiting on the WRS.)

  • User agent

    • F&R has the standard desktop Googlebot user agent. MTT has a mobile user agent version of Googlebot. Pretty much what you'd expect, nothing mind blowing to see here folks.
  • Platform

    • F&R and MTT run on different platforms. The first runs on 32bit Linux, the second runs on Linux armv8l, which ties up with the fact the user-agent also states it's running on android. (Or at least emulated Android, armv8l is a type of chip architecture commonly used in phones.)
  • Feature detection

    • As mentioned I've used the feature detection library modernizr, along with fingerprintjs2, to detect common browser features and see if there is any difference in support.
    • Shocking discovery: F&R supports Emoji's and the mobile testing tool doesn't. If you've been wondering why they wouldn't render correctly in the Mobile Testing tool, well wonder no more...
    • The only other difference is the mobile testing tool allows the event ontouchstart, they are however for all reasonable rendering purposes identical.
  • Caching

    • F&R and the MTT differ ever so slightly in caching behaviour, but unless your server is incorrectly set-up it shouldn't be an issue. MTT sends no-store as well as no-cache, where as F&R only sends no-cache. A quote from here, summarizes it well.

    no-cache doesn't mean "don't cache this" (that would be no-store). no-cache means don't use this for normal loads unless the resource is revalidated for freshness. History navigations are not normal loads.

    • Google on the other hand, doesn't send a no-cache header. Again this is what you would expect in the difference between a testing tool and a crawler.
  • Resolution

    • Running with the mobile theme, the MTT and F&R also have different resolutions. F&R works at 1024*768 and the MTT at 732*412, as you would expect from a mobile testing tool.

Extracted values for anything mentioned above

Note: When crawling Googlebot uses multiple useragents, I've only listed the one which appeared in this experiment here._

-

Method User-agent
Fetch and render "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Mobile testing tool "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Googlebot "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

-

Method Platform
Fetch and render Linux x86_64
Mobile testing tool Linux armv8l
Googlebot Linux armv8l

-

Method Difference in supported features
Fetch and render no-cache
Mobile testing tool no-store, no-cache
Googlebot

-

Method Resolution
Fetch and render 1024*768
Mobile testing tool 732*412
Googlebot --

Full output of fingerprinting

For those of you who are real gluttons for punishment, here is the full output for each of fingerprints.

Fetch and render information dump

Navigator object:
 {
    "appCodeName": "Mozilla",
    "appName": "Netscape",
    "appVersion": "5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "connection": {
        "ontypechange": null,
        "type": "other"
    },
    "cookieEnabled": true,
    "doNotTrack": null,
    "geolocation": {},
    "hardwareConcurrency": 1,
    "language": "en-US",
    "languages": [
        "en-US"
    ],
    "maxTouchPoints": 0,
    "mimeTypes": {
        "length": 0
    },
    "onLine": true,
    "platform": "Linux x86_64",
    "plugins": {
        "length": 0
    },
    "product": "Gecko",
    "productSub": "20030107",
    "userAgent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "vendor": "Google Inc.",
    "vendorSub": "",
    "webkitPersistentStorage": {},
    "webkitTemporaryStorage": {}
}

 Modernizr Results:
 [
    "ambientlight: Disabled",
    "applicationcache: Enabled",
    "audio: Enabled",
    "batteryapi: Disabled",
    "blobconstructor: Enabled",
    "canvas: Enabled",
    "canvastext: Enabled",
    "contenteditable: Enabled",
    "contextmenu: Disabled",
    "cookies: Enabled",
    "cors: Enabled",
    "cryptography: Disabled",
    "customelements: Disabled",
    "customprotocolhandler: Disabled",
    "customevent: Enabled",
    "dart: Disabled",
    "dataview: Enabled",
    "emoji: Enabled",
    "eventlistener: Enabled",
    "exiforientation: Disabled",
    "flash: Disabled",
    "forcetouch: Disabled",
    "fullscreen: Enabled",
    "gamepads: Enabled",
    "geolocation: Enabled",
    "hashchange: Enabled",
    "hiddenscroll: Enabled",
    "history: Enabled",
    "htmlimports: Enabled",
    "ie8compat: Disabled",
    "indexeddb: Disabled",
    "indexeddbblob: Disabled",
    "input: Enabled",
    "search: Disabled",
    "inputtypes: Enabled",
    "typedarrays: Enabled",
    "unicoderange: Enabled",
    "websockets: Disabled",
    "canvaswinding: Enabled",
    "getrandomvalues: Enabled",
    "cssall: Enabled",
    "cssanimations: Enabled",
    "appearance: Enabled",
    "backdropfilter: Disabled",
    "backgroundblendmode: Enabled",
    "backgroundcliptext: Enabled",
    "bgpositionshorthand: Enabled",
    "bgpositionxy: Enabled",
    "bgrepeatspace: Enabled",
    "bgrepeatround: Enabled",
    "backgroundsize: Enabled",
    "borderimage: Enabled",
    "boxshadow: Enabled",
    "csscalc: Enabled",
    "csschunit: Enabled",
    "cssgrid: Disabled",
    "cssgridlegacy: Disabled",
    "display-runin: Disabled",
    "cssescape: Disabled",
    "cssexunit: Enabled",
    "flexbox: Enabled",
    "flexboxlegacy: Enabled",
    "flexwrap: Enabled",
    "focuswithin: Disabled",
    "generatedcontent: Enabled",
    "hairline: Disabled",
    "hsla: Enabled",
    "cssinvalid: Enabled",
    "lastchild: Enabled",
    "mediaqueries: Enabled",
    "nthchild: Enabled",
    "objectfit: Enabled",
    "overflowscrolling: Disabled",
    "csspositionsticky: Disabled",
    "csspseudotransitions: Enabled",
    "regions: Disabled",
    "cssresize: Enabled",
    "rgba: Enabled",
    "scrollsnappoints: Disabled",
    "shapes: Enabled",
    "subpixelfont: Enabled",
    "target: Enabled",
    "textalignlast: Disabled",
    "csstransforms: Enabled",
    "csstransformslevel2: Disabled",
    "userselect: Enabled",
    "cssvhunit: Enabled",
    "cssvminunit: Enabled",
    "willchange: Enabled",
    "wrapflow: Disabled",
    "createelementattrs,: Disabled",
    "createelement-attrs,: Disabled",
    "documentfragment: Enabled",
    "hidden: Enabled",
    "microdata: Disabled",
    "details: Enabled",
    "picture: Enabled",
    "ruby: Enabled",
    "time: Disabled",
    "unknownelements: Enabled",
    "es5array: Enabled",
    "es5date: Enabled",
    "es5function: Enabled",
    "es5object: Enabled",
    "es5: Enabled",
    "strictmode: Enabled",
    "es5string: Enabled",
    "es5syntax: Enabled",
    "es5undefined: Enabled",
    "es6array: Disabled",
    "arrow: Disabled",
    "es6collections: Enabled",
    "contains: Disabled",
    "generators: Enabled",
    "es6math: Enabled",
    "es6number: Enabled",
    "es6object: Disabled",
    "promises: Enabled",
    "es6string: Enabled",
    "devicemotion,: Disabled",
    "deviceorientation: Enabled",
    "oninput: Enabled",
    "filereader: Enabled",
    "filesystem: Enabled",
    "sandbox: Enabled",
    "seamless: Disabled",
    "srcdoc: Enabled",
    "apng: Disabled",
    "imgcrossorigin: Enabled",
    "jpeg2000: Disabled",
    "jpegxr: Disabled",
    "sizes: Enabled",
    "srcset: Enabled",
    "webpalpha: Disabled",
    "webpanimation: Disabled",
    "webplossless,: Disabled",
    "webp-lossless: Disabled",
    "webp: Disabled",
    "inputformaction: Enabled",
    "inputformenctype: Enabled",
    "inputformmethod: Enabled",
    "inputformtarget: Disabled",
    "hovermq: Disabled",
    "pointermq: Enabled",
    "beacon: Disabled",
    "lowbandwidth: Disabled",
    "speechsynthesis: Enabled",
    "sessionstorage: Enabled",
    "stylescoped: Disabled",
    "svgasimg: Enabled",
    "svgforeignobject: Enabled",
    "inlinesvg: Enabled",
    "smil: Enabled",
    "videopreload: Enabled",
    "websocketsbinary: Disabled"
]

 Headers:
 {
    "Accept": "*/*",
    "Accept-Encoding": "gzip,deflate,br",
    "Accept-Language": "en-US",
    "Cache-Control": "no-cache",
    "Connection": "close",
    "Content-Length": "49653",
    "Content-Type": "text/plain;charset=UTF-8",
    "From": "googlebot(at)googlebot.com",
    "Host": "example.com",
    "Origin": "https://example.com",
    "Referer": "https://example.com/page1?fetch=true",
    "User-Agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "X-Forwarded-For": "66.249.65.128",
    "X-Forwarded-Proto": "https",
    "X-Real-Ip": "66.249.65.128"
}

 Fingerprinting2 JS:
 [
    {
        "key": "user_agent",
        "value": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    },
    {
        "key": "language",
        "value": "en-US"
    },
    {
        "key": "color_depth",
        "value": 24
    },
    {
        "key": "device_memory",
        "value": -1
    },
    {
        "key": "hardware_concurrency",
        "value": 1
    },
    {
        "key": "resolution",
        "value": [
            1024,
            768
        ]
    },
    {
        "key": "available_resolution",
        "value": [
            1024,
            768
        ]
    },
    {
        "key": "timezone_offset",
        "value": 420
    },
    {
        "key": "session_storage",
        "value": 1
    },
    {
        "key": "local_storage",
        "value": 1
    },
    {
        "key": "cpu_class",
        "value": "unknown"
    },
    {
        "key": "navigator_platform",
        "value": "Linux x86_64"
    },
    {
        "key": "regular_plugins",
        "value": []
    },
    {
        "key": "adblock",
        "value": false
    },
    {
        "key": "has_lied_languages",
        "value": false
    },
    {
        "key": "has_lied_resolution",
        "value": false
    },
    {
        "key": "has_lied_os",
        "value": true
    },
    {
        "key": "has_lied_browser",
        "value": false
    },
    {
        "key": "touch_support",
        "value": [
            0,
            false,
            false
        ]
    },
    {
        "key": "js_fonts",
        "value": [
            "Andale Mono",
            "Arial",
            "Arial Black",
            "Arial Unicode MS",
            "Bitstream Vera Sans Mono",
            "Comic Sans MS",
            "Courier",
            "Courier New",
            "Georgia",
            "Helvetica",
            "Impact",
            "MS Gothic",
            "MS PGothic",
            "Times",
            "Times New Roman",
            "Trebuchet MS",
            "Verdana"
        ]
    }
]

Full space separated list of classes added by Modernizr:

htmlimports
no-proximity
no-audiopreload
sizes
no-videoautoplay
no-flash
no-indexeddb
transferables
applicationcache
blobconstructor
blob-constructor
cookies
cors
no-customelements
no-customprotocolhandler
customevent
dataview
eventlistener
geolocation
history
no-ie8compat
json
notification
postmessage
queryselector
no-serviceworker
svg
templatestrings
typedarrays
no-websockets
no-xdomainrequest
no-webaudio
no-cssescape
no-focuswithin
supports
target
no-microdata
mutationobserver
no-passiveeventlisteners
picture
es5array
es5date
es5function
es5object
strictmode
es5string
es5syntax
es5undefined
es5
no-es6array
no-arrow
es6collections
generators
es6math
es6number
no-es6object
promises
es6string
devicemotion
deviceorientation
filereader
no-lowbandwidth
eventsource
fetch
xhrresponsetype
xhr2
speechsynthesis
localstorage
sessionstorage
no-websqldatabase
svgfilters
urlparser
no-urlsearchparams
no-getusermedia
no-websocketsbinary
atobbtoa
atob-btoa
no-framed
no-sharedworkers
webworkers
no-contains
no-contextmenu
cssall
willchange
classlist
documentfragment
svgasimg
no-ambientlight
hashchange
inputsearchevent
no-pointerevents
audio
canvas
canvastext
contenteditable
emoji
olreversed
no-userdata
video
no-vml
webanimations
no-webgl
adownload
audioloop
canvasblending
todataurljpeg
todataurlpng
todataurlwebp
canvaswinding
bgpositionshorthand
csscalc
cubicbezierrange
cssgradients
multiplebgs
opacity
csspointerevents
no-csspositionsticky
cssremunit
rgba
preserve3d
dataset
hidden
outputelem
progressbar
meter
ruby
template
no-time
texttrackapi
track
unknownelements
no-capture
fileinput
fileinputdirectory
formattribute
placeholder
sandbox
no-seamless
srcdoc
imgcrossorigin
srcset
inputformaction
input-formaction
inputformenctype
input-formenctype
inputformmethod
no-inputformtarget
no-input-formtarget
scriptasync
scriptdefer
no-stylescoped
inlinesvg
textareamaxlength
videocrossorigin
videoloop
videopreload
mediaqueries
no-hovermq
pointermq
hiddenscroll
no-mathml
no-touchevents
unicoderange
unicode
checked
displaytable
display-table
fontface
generatedcontent
no-hairline
cssinvalid
lastchild
nthchild
cssscrollbar
siblinggeneral
subpixelfont
cssvalid
details
oninput
formvalidation
datalistelem
no-localizednumber
csschunit
cssexunit
hsla
bdi
cssvhunit
cssvmaxunit
cssvminunit
cssvwunit
xhrresponsetypearraybuffer
xhrresponsetypeblob
xhrresponsetypedocument
xhrresponsetypejson
xhrresponsetypetext
svgclippaths
svgforeignobject
smil
textshadow
no-batteryapi
no-battery-api
crypto
no-dart
no-forcetouch
fullscreen
gamepads
intl
pagevisibility
performance
pointerlock
quotamanagement
requestanimationframe
raf
vibrate
no-webintents
no-lowbattery
getrandomvalues
backgroundblendmode
objectfit
object-fit
no-regions
no-wrapflow
filesystem
no-requestautocomplete
no-speechrecognition
bloburls
no-peerconnection
no-datachannel
matchmedia
ligatures
cssanimations
csspseudoanimations
appearance
no-backdropfilter
backgroundcliptext
bgpositionxy
bgrepeatround
bgrepeatspace
backgroundsize
bgsizecover
borderimage
borderradius
boxshadow
boxsizing
csscolumns
csscolumns-width
csscolumns-span
no-csscolumns-fill
csscolumns-gap
csscolumns-rule
csscolumns-rulecolor
csscolumns-rulestyle
csscolumns-rulewidth
csscolumns-breakbefore
csscolumns-breakafter
csscolumns-breakinside
no-cssgridlegacy
no-cssgrid
ellipsis
cssfilters
flexbox
flexboxlegacy
no-flexboxtweener
flexwrap
cssmask
no-overflowscrolling
cssreflections
cssresize
no-scrollsnappoints
shapes
no-textalignlast
csstransforms
csstransforms3d
no-csstransformslevel2
csstransitions
csspseudotransitions
userselect
no-variablefonts
no-exiforientation
webpalpha
webpanimation
webp
no-apng
no-jpeg2000
no-jpegxr
webp-alpha
webp-animation
datauri
blobworkers
no-dataworkers

Mobile testing tool render results

Navigator object:
 {
    "appCodeName": "Mozilla",
    "appName": "Netscape",
    "appVersion": "5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "connection": {
        "ontypechange": null,
        "type": "other"
    },
    "cookieEnabled": true,
    "doNotTrack": null,
    "geolocation": {},
    "hardwareConcurrency": 1,
    "language": "en-US",
    "languages": [
        "en-US"
    ],
    "maxTouchPoints": 0,
    "mimeTypes": {
        "length": 0
    },
    "onLine": true,
    "platform": "Linux armv8l",
    "plugins": {
        "length": 0
    },
    "product": "Gecko",
    "productSub": "20030107",
    "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "vendor": "Google Inc.",
    "vendorSub": "",
    "webkitPersistentStorage": {},
    "webkitTemporaryStorage": {}
}

Modernizr Results:
 [
    "ambientlight: Disabled",
    "applicationcache: Enabled",
    "audio: Enabled",
    "batteryapi: Disabled",
    "blobconstructor: Enabled",
    "canvas: Enabled",
    "canvastext: Enabled",
    "contenteditable: Enabled",
    "contextmenu: Disabled",
    "cookies: Enabled",
    "cors: Enabled",
    "cryptography: Disabled",
    "customelements: Disabled",
    "customprotocolhandler: Disabled",
    "customevent: Enabled",
    "dart: Disabled",
    "dataview: Enabled",
    "emoji: Disabled",
    "eventlistener: Enabled",
    "exiforientation: Disabled",
    "flash: Disabled",
    "forcetouch: Disabled",
    "fullscreen: Enabled",
    "gamepads: Enabled",
    "geolocation: Enabled",
    "hashchange: Enabled",
    "hiddenscroll: Enabled",
    "history: Enabled",
    "htmlimports: Enabled",
    "ie8compat: Disabled",
    "indexeddb: Disabled",
    "indexeddbblob: Disabled",
    "input: Enabled",
    "search: Disabled",
    "inputtypes: Enabled",
    "typedarrays: Enabled",
    "unicoderange: Enabled",
    "websockets: Disabled",
    "canvaswinding: Enabled",
    "getrandomvalues: Enabled",
    "cssall: Enabled",
    "cssanimations: Enabled",
    "appearance: Enabled",
    "backdropfilter: Disabled",
    "backgroundblendmode: Enabled",
    "backgroundcliptext: Enabled",
    "bgpositionshorthand: Enabled",
    "bgpositionxy: Enabled",
    "bgrepeatspace: Enabled",
    "bgrepeatround: Enabled",
    "backgroundsize: Enabled",
    "borderimage: Enabled",
    "boxshadow: Enabled",
    "csscalc: Enabled",
    "csschunit: Enabled",
    "cssgrid: Disabled",
    "cssgridlegacy: Disabled",
    "display-runin: Disabled",
    "cssescape: Disabled",
    "cssexunit: Enabled",
    "flexbox: Enabled",
    "flexboxlegacy: Enabled",
    "flexwrap: Enabled",
    "focuswithin: Disabled",
    "generatedcontent: Enabled",
    "hairline: Disabled",
    "hsla: Enabled",
    "cssinvalid: Enabled",
    "lastchild: Enabled",
    "mediaqueries: Enabled",
    "nthchild: Enabled",
    "objectfit: Enabled",
    "overflowscrolling: Disabled",
    "csspositionsticky: Disabled",
    "csspseudotransitions: Enabled",
    "regions: Disabled",
    "cssresize: Enabled",
    "rgba: Enabled",
    "scrollsnappoints: Disabled",
    "shapes: Enabled",
    "subpixelfont: Enabled",
    "target: Enabled",
    "textalignlast: Disabled",
    "csstransforms: Enabled",
    "csstransformslevel2: Disabled",
    "userselect: Enabled",
    "cssvhunit: Enabled",
    "cssvminunit: Enabled",
    "willchange: Enabled",
    "wrapflow: Disabled",
    "createelementattrs,: Disabled",
    "createelement-attrs,: Disabled",
    "documentfragment: Enabled",
    "hidden: Enabled",
    "microdata: Disabled",
    "details: Enabled",
    "picture: Enabled",
    "ruby: Enabled",
    "time: Disabled",
    "unknownelements: Enabled",
    "es5array: Enabled",
    "es5date: Enabled",
    "es5function: Enabled",
    "es5object: Enabled",
    "es5: Enabled",
    "strictmode: Enabled",
    "es5string: Enabled",
    "es5syntax: Enabled",
    "es5undefined: Enabled",
    "es6array: Disabled",
    "arrow: Disabled",
    "es6collections: Enabled",
    "contains: Disabled",
    "generators: Enabled",
    "es6math: Enabled",
    "es6number: Enabled",
    "es6object: Disabled",
    "promises: Enabled",
    "es6string: Enabled",
    "devicemotion,: Disabled",
    "deviceorientation: Enabled",
    "oninput: Enabled",
    "filereader: Enabled",
    "filesystem: Enabled",
    "sandbox: Enabled",
    "seamless: Disabled",
    "srcdoc: Enabled",
    "apng: Disabled",
    "imgcrossorigin: Enabled",
    "jpeg2000: Disabled",
    "jpegxr: Disabled",
    "sizes: Enabled",
    "srcset: Enabled",
    "webpalpha: Disabled",
    "webpanimation: Disabled",
    "webplossless,: Disabled",
    "webp-lossless: Disabled",
    "webp: Disabled",
    "inputformaction: Enabled",
    "inputformenctype: Enabled",
    "inputformmethod: Enabled",
    "inputformtarget: Disabled",
    "hovermq: Disabled",
    "pointermq: Enabled",
    "beacon: Disabled",
    "lowbandwidth: Disabled",
    "speechsynthesis: Enabled",
    "sessionstorage: Enabled",
    "stylescoped: Disabled",
    "svgasimg: Enabled",
    "svgforeignobject: Enabled",
    "inlinesvg: Enabled",
    "smil: Enabled",
    "videopreload: Enabled",
    "websocketsbinary: Disabled"
]

Headers:
 {
    "Accept": "*/*",
    "Accept-Encoding": "gzip,deflate,br",
    "Accept-Language": "en-US",
    "Cache-Control": "no-store, no-cache",
    "Connection": "close",
    "Content-Length": "50030",
    "Content-Type": "text/plain;charset=UTF-8",
    "From": "googlebot(at)googlebot.com",
    "Host": "testmebabyonemoretime.com",
    "Origin": "https://testmebabyonemoretime.com",
    "Referer": "https://testmebabyonemoretime.com/recipe1?mobile=true",
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "X-Forwarded-For": "66.249.65.128",
    "X-Forwarded-Proto": "https",
    "X-Real-Ip": "66.249.65.128"
}

Fingerprinting2 JS:
 [
    {
        "key": "user_agent",
        "value": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    },
    {
        "key": "language",
        "value": "en-US"
    },
    {
        "key": "color_depth",
        "value": 24
    },
    {
        "key": "device_memory",
        "value": -1
    },
    {
        "key": "hardware_concurrency",
        "value": 1
    },
    {
        "key": "resolution",
        "value": [
            732,
            412
        ]
    },
    {
        "key": "available_resolution",
        "value": [
            732,
            412
        ]
    },
    {
        "key": "timezone_offset",
        "value": 420
    },
    {
        "key": "session_storage",
        "value": 1
    },
    {
        "key": "local_storage",
        "value": 1
    },
    {
        "key": "cpu_class",
        "value": "unknown"
    },
    {
        "key": "navigator_platform",
        "value": "Linux armv8l"
    },
    {
        "key": "regular_plugins",
        "value": []
    },
    {
        "key": "adblock",
        "value": false
    },
    {
        "key": "has_lied_languages",
        "value": false
    },
    {
        "key": "has_lied_resolution",
        "value": false
    },
    {
        "key": "has_lied_os",
        "value": false
    },
    {
        "key": "has_lied_browser",
        "value": false
    },
    {
        "key": "touch_support",
        "value": [
            0,
            false,
            true
        ]
    },
    {
        "key": "js_fonts",
        "value": [
            "Andale Mono",
            "Arial",
            "Arial Black",
            "Arial Unicode MS",
            "Bitstream Vera Sans Mono",
            "Comic Sans MS",
            "Courier",
            "Courier New",
            "Georgia",
            "Helvetica",
            "Impact",
            "MS Gothic",
            "MS PGothic",
            "Times",
            "Times New Roman",
            "Trebuchet MS",
            "Verdana"
        ]
    }
]

Full space separated list of classes added by Modernizr:

htmlimports
no-proximity
no-audiopreload
sizes
no-videoautoplay
no-flash
no-indexeddb
transferables
applicationcache
blobconstructor
blob-constructor
cookies
cors
no-customelements
no-customprotocolhandler
customevent
dataview
eventlistener
geolocation
history
no-ie8compat
json
notification
postmessage
queryselector
no-serviceworker
svg
templatestrings
typedarrays
no-websockets
no-xdomainrequest
no-webaudio
no-cssescape
no-focuswithin
supports
target
no-microdata
mutationobserver
no-passiveeventlisteners
picture
es5array
es5date
es5function
es5object
strictmode
es5string
es5syntax
es5undefined
es5
no-es6array
no-arrow
es6collections
generators
es6math
es6number
no-es6object
promises
es6string
devicemotion
deviceorientation
filereader
no-lowbandwidth
eventsource
fetch
xhrresponsetype
xhr2
speechsynthesis
localstorage
sessionstorage
no-websqldatabase
svgfilters
urlparser
no-urlsearchparams
no-getusermedia
no-websocketsbinary
atobbtoa
atob-btoa
no-framed
no-sharedworkers
webworkers
no-contains
no-contextmenu
cssall
willchange
classlist
documentfragment
svgasimg
no-ambientlight
hashchange
inputsearchevent
no-pointerevents
audio
canvas
canvastext
contenteditable
no-emoji
olreversed
no-userdata
video
no-vml
webanimations
no-webgl
adownload
audioloop
canvasblending
todataurljpeg
todataurlpng
todataurlwebp
canvaswinding
bgpositionshorthand
csscalc
cubicbezierrange
cssgradients
multiplebgs
opacity
csspointerevents
no-csspositionsticky
cssremunit
rgba
preserve3d
dataset
hidden
outputelem
progressbar
meter
ruby
template
no-time
texttrackapi
track
unknownelements
no-capture
fileinput
fileinputdirectory
formattribute
placeholder
sandbox
no-seamless
srcdoc
imgcrossorigin
srcset
inputformaction
input-formaction
inputformenctype
input-formenctype
inputformmethod
no-inputformtarget
no-input-formtarget
scriptasync
scriptdefer
no-stylescoped
inlinesvg
textareamaxlength
videocrossorigin
videoloop
videopreload
mediaqueries
no-hovermq
pointermq
hiddenscroll
no-mathml
touchevents
unicoderange
unicode
checked
displaytable
display-table
fontface
generatedcontent
no-hairline
cssinvalid
lastchild
nthchild
cssscrollbar
siblinggeneral
subpixelfont
cssvalid
details
oninput
formvalidation
datalistelem
no-localizednumber
csschunit
cssexunit
hsla
bdi
cssvhunit
cssvmaxunit
cssvminunit
cssvwunit
xhrresponsetypearraybuffer
xhrresponsetypeblob
xhrresponsetypedocument
xhrresponsetypejson
xhrresponsetypetext
svgclippaths
svgforeignobject
smil
textshadow
no-batteryapi
no-battery-api
crypto
no-dart
no-forcetouch
fullscreen
gamepads
intl
pagevisibility
performance
pointerlock
quotamanagement
requestanimationframe
raf
vibrate
no-webintents
no-lowbattery
getrandomvalues
backgroundblendmode
objectfit
object-fit
no-regions
no-wrapflow
filesystem
no-requestautocomplete
no-speechrecognition
bloburls
no-peerconnection
no-datachannel
matchmedia
ligatures
cssanimations
csspseudoanimations
appearance
no-backdropfilter
backgroundcliptext
bgpositionxy
bgrepeatround
bgrepeatspace
backgroundsize
bgsizecover
borderimage
borderradius
boxshadow
boxsizing
csscolumns
csscolumns-width
csscolumns-span
no-csscolumns-fill
csscolumns-gap
csscolumns-rule
csscolumns-rulecolor
csscolumns-rulestyle
csscolumns-rulewidth
csscolumns-breakbefore
csscolumns-breakafter
csscolumns-breakinside
no-cssgridlegacy
no-cssgrid
ellipsis
cssfilters
flexbox
flexboxlegacy
no-flexboxtweener
flexwrap
cssmask
no-overflowscrolling
cssreflections
cssresize
no-scrollsnappoints
shapes
no-textalignlast
csstransforms
csstransforms3d
no-csstransformslevel2
csstransitions
csspseudotransitions
userselect
no-variablefonts
no-exiforientation
webpalpha
webpanimation
webp
no-apng
no-jpeg2000
no-jpegxr
webp-alpha
webp-animation
datauri
blobworkers
no-dataworkers

Googlebot render testing results

navigator:
{
    "appCodeName": "Mozilla",
    "appName": "Netscape",
    "appVersion": "5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "connection": {
        "ontypechange": null,
        "type": "other"
    },
    "cookieEnabled": true,
    "doNotTrack": null,
    "geolocation": {},
    "hardwareConcurrency": 1,
    "language": "en-US",
    "languages": [
        "en-US"
    ],
    "maxTouchPoints": 0,
    "mimeTypes": {
        "length": 0
    },
    "onLine": true,
    "platform": "Linux armv8l",
    "plugins": {
        "length": 0
    },
    "product": "Gecko",
    "productSub": "20030107",
    "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
    "vendor": "Google Inc.",
    "vendorSub": "",
    "webkitPersistentStorage": {},
    "webkitTemporaryStorage": {}
}

modernizr:
[
    "ambientlight: Disabled",
    "applicationcache: Enabled",
    "audio: Enabled",
    "batteryapi: Disabled",
    "blobconstructor: Enabled",
    "canvas: Enabled",
    "canvastext: Enabled",
    "contenteditable: Enabled",
    "contextmenu: Disabled",
    "cookies: Enabled",
    "cors: Enabled",
    "cryptography: Disabled",
    "customelements: Disabled",
    "customprotocolhandler: Disabled",
    "customevent: Enabled",
    "dart: Disabled",
    "dataview: Enabled",
    "emoji: Disabled",
    "eventlistener: Enabled",
    "exiforientation: Disabled",
    "flash: Disabled",
    "forcetouch: Disabled",
    "fullscreen: Enabled",
    "gamepads: Enabled",
    "geolocation: Enabled",
    "hashchange: Enabled",
    "hiddenscroll: Enabled",
    "history: Enabled",
    "htmlimports: Enabled",
    "ie8compat: Disabled",
    "indexeddb: Disabled",
    "indexeddbblob: Disabled",
    "input: Enabled",
    "search: Disabled",
    "inputtypes: Enabled",
    "typedarrays: Enabled",
    "unicoderange: Enabled",
    "websockets: Disabled",
    "canvaswinding: Enabled",
    "getrandomvalues: Enabled",
    "cssall: Enabled",
    "cssanimations: Enabled",
    "appearance: Enabled",
    "backdropfilter: Disabled",
    "backgroundblendmode: Enabled",
    "backgroundcliptext: Enabled",
    "bgpositionshorthand: Enabled",
    "bgpositionxy: Enabled",
    "bgrepeatspace: Enabled",
    "bgrepeatround: Enabled",
    "backgroundsize: Enabled",
    "borderimage: Enabled",
    "boxshadow: Enabled",
    "csscalc: Enabled",
    "csschunit: Enabled",
    "cssgrid: Disabled",
    "cssgridlegacy: Disabled",
    "display-runin: Disabled",
    "cssescape: Disabled",
    "cssexunit: Enabled",
    "flexbox: Enabled",
    "flexboxlegacy: Enabled",
    "flexwrap: Enabled",
    "focuswithin: Disabled",
    "generatedcontent: Enabled",
    "hairline: Disabled",
    "hsla: Enabled",
    "cssinvalid: Enabled",
    "lastchild: Enabled",
    "mediaqueries: Enabled",
    "nthchild: Enabled",
    "objectfit: Enabled",
    "overflowscrolling: Disabled",
    "csspositionsticky: Disabled",
    "csspseudotransitions: Enabled",
    "regions: Disabled",
    "cssresize: Enabled",
    "rgba: Enabled",
    "scrollsnappoints: Disabled",
    "shapes: Enabled",
    "subpixelfont: Enabled",
    "target: Enabled",
    "textalignlast: Disabled",
    "csstransforms: Enabled",
    "csstransformslevel2: Disabled",
    "userselect: Enabled",
    "cssvhunit: Enabled",
    "cssvminunit: Enabled",
    "willchange: Enabled",
    "wrapflow: Disabled",
    "createelementattrs,: Disabled",
    "createelement-attrs,: Disabled",
    "documentfragment: Enabled",
    "hidden: Enabled",
    "microdata: Disabled",
    "details: Enabled",
    "picture: Enabled",
    "ruby: Enabled",
    "time: Disabled",
    "unknownelements: Enabled",
    "es5array: Enabled",
    "es5date: Enabled",
    "es5function: Enabled",
    "es5object: Enabled",
    "es5: Enabled",
    "strictmode: Enabled",
    "es5string: Enabled",
    "es5syntax: Enabled",
    "es5undefined: Enabled",
    "es6array: Disabled",
    "arrow: Disabled",
    "es6collections: Enabled",
    "contains: Disabled",
    "generators: Enabled",
    "es6math: Enabled",
    "es6number: Enabled",
    "es6object: Disabled",
    "promises: Enabled",
    "es6string: Enabled",
    "devicemotion,: Disabled",
    "deviceorientation: Enabled",
    "oninput: Enabled",
    "filereader: Enabled",
    "filesystem: Enabled",
    "sandbox: Enabled",
    "seamless: Disabled",
    "srcdoc: Enabled",
    "apng: Disabled",
    "imgcrossorigin: Enabled",
    "jpeg2000: Disabled",
    "jpegxr: Disabled",
    "sizes: Enabled",
    "srcset: Enabled",
    "webpalpha: Disabled",
    "webpanimation: Disabled",
    "webplossless,: Disabled",
    "webp-lossless: Disabled",
    "webp: Disabled",
    "inputformaction: Enabled",
    "inputformenctype: Enabled",
    "inputformmethod: Enabled",
    "inputformtarget: Disabled",
    "hovermq: Disabled",
    "pointermq: Enabled",
    "beacon: Disabled",
    "lowbandwidth: Disabled",
    "speechsynthesis: Enabled",
    "sessionstorage: Enabled",
    "stylescoped: Disabled",
    "svgasimg: Enabled",
    "svgforeignobject: Enabled",
    "inlinesvg: Enabled",
    "smil: Enabled",
    "videopreload: Enabled",
    "websocketsbinary: Disabled"
]
headers:
{
    'Accept': '*/*'
    'Accept-Language': 'en-US',
    'Accept-Encoding': 'gzip,deflate,br',
    'Connection': 'close',
    'Content-Length': '8460',
    'Content-Type': 'text/plain;charset=UTF-8',
    'From': 'googlebot(at)googlebot.com',
    'Host': 'testmebabyonemoretime.com',
    'Origin': 'https://testmebabyonemoretime.com',
    'Referer': 'https://testmebabyonemoretime.com/recipe5',
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
    'X-Forwarded-For': '66.249.65.159',
    'X-Forwarded-Proto': 'https',
    'X-Real-Ip': '66.249.65.159',
}

Full space separated list of classes added by Modernizr:

htmlimports
no-proximity
no-audiopreload
sizes
no-videoautoplay
no-flash
no-indexeddb
transferables
applicationcache
blobconstructor
blob-constructor
cookies
cors
no-customelements
no-customprotocolhandler
customevent
dataview
eventlistener
geolocation
history
no-ie8compat
json
notification
postmessage
queryselector
no-serviceworker
svg
templatestrings
typedarrays
no-websockets
no-xdomainrequest
no-webaudio
no-cssescape
no-focuswithin
supports
target
no-microdata
mutationobserver
no-passiveeventlisteners
picture
es5array
es5date
es5function
es5object
strictmode
es5string
es5syntax
es5undefined
es5
no-es6array
no-arrow
es6collections
generators
es6math
es6number
no-es6object
promises
es6string
devicemotion
deviceorientation
filereader
no-lowbandwidth
eventsource
fetch
xhrresponsetype
xhr2
speechsynthesis
localstorage
sessionstorage
no-websqldatabase
svgfilters
urlparser
no-urlsearchparams
no-getusermedia
no-websocketsbinary
atobbtoa
atob-btoa
no-framed
no-sharedworkers
webworkers
no-contains
no-contextmenu
cssall
willchange
classlist
documentfragment
svgasimg
no-ambientlight
hashchange
inputsearchevent
no-pointerevents
audio
canvas
canvastext
contenteditable
no-emoji
olreversed
no-userdata
video
no-vml
webanimations
no-webgl
adownload
audioloop
canvasblending
todataurljpeg
todataurlpng
todataurlwebp
canvaswinding
bgpositionshorthand
csscalc
cubicbezierrange
cssgradients
multiplebgs
opacity
csspointerevents
no-csspositionsticky
cssremunit
rgba
preserve3d
dataset
hidden
outputelem
progressbar
meter
ruby
template
no-time
texttrackapi
track
unknownelements
no-capture
fileinput
fileinputdirectory
formattribute
placeholder
sandbox
no-seamless
srcdoc
imgcrossorigin
srcset
inputformaction
input-formaction
inputformenctype
input-formenctype
inputformmethod
no-inputformtarget
no-input-formtarget
scriptasync
scriptdefer
no-stylescoped
inlinesvg
textareamaxlength
videocrossorigin
videoloop
videopreload
mediaqueries
no-hovermq
pointermq
hiddenscroll
no-mathml
touchevents
unicoderange
unicode
checked
displaytable
display-table
fontface
generatedcontent
no-hairline
cssinvalid
lastchild
nthchild
cssscrollbar
siblinggeneral
subpixelfont
cssvalid
details
oninput
formvalidation
datalistelem
no-localizednumber
csschunit
cssexunit
hsla
bdi
cssvhunit
cssvmaxunit
cssvminunit
cssvwunit
xhrresponsetypearraybuffer
xhrresponsetypeblob
xhrresponsetypedocument
xhrresponsetypejson
xhrresponsetypetext
svgclippaths
svgforeignobject
smil
textshadow
no-batteryapi
no-battery-api
crypto
no-dart
no-forcetouch
fullscreen
gamepads
intl
pagevisibility
performance
pointerlock
quotamanagement
requestanimationframe
raf
vibrate
no-webintents
no-lowbattery
getrandomvalues
backgroundblendmode
objectfit
object-fit
no-regions
no-wrapflow
filesystem
no-requestautocomplete
no-speechrecognition
bloburls
no-peerconnection
no-datachannel
matchmedia
ligatures
cssanimations
csspseudoanimations
appearance
no-backdropfilter
backgroundcliptext
bgpositionxy
bgrepeatround
bgrepeatspace
backgroundsize
bgsizecover
borderimage
borderradius
boxshadow
boxsizing
csscolumns
csscolumns-width
csscolumns-span
no-csscolumns-fill
csscolumns-gap
csscolumns-rule
csscolumns-rulecolor
csscolumns-rulestyle
csscolumns-rulewidth
csscolumns-breakbefore
csscolumns-breakafter
csscolumns-breakinside
no-cssgridlegacy
no-cssgrid
ellipsis
cssfilters
flexbox
flexboxlegacy
no-flexboxtweener
flexwrap
cssmask
no-overflowscrolling
cssreflections
cssresize
no-scrollsnappoints
shapes
no-textalignlast
csstransforms
csstransforms3d
no-csstransformslevel2
csstransitions
csspseudotransitions
userselect
no-variablefonts

Details: How did I get these results?

These results came from:

  • A small test site which runs a standalone Flask app.
  • When you load a page on this website, a JS script runs which then pulls down various pieces of information and sends then to POST endpoint.
  • The various pieces of information are:

    • Headers
    • Output of Modernizr.js
    • Output of fingerprint2.js
    • Rendered DOM
    • A timestamp
  • The post endpoint then writes the details to a file.
  • Here's the Git repo for the flask app if you're interested. Improvements welcome. My JS is not good.
Dominic Woodman
By Dominic Woodman. This bio is mostly here because it looked good in mock-ups.

Comments