Follow these recommendations to check content structure and verify that content compression is not interfering.
If you are expecting to see the Browser agent added automatically but do not, check whether any of these restrictions might apply.
The Content-Type for the HTML response must be text/html.
The Content-Encoding response header cannot be set.
The Content-Disposition response header cannot mark the response as an attachment.
The Content-Disposition specified in an http-equiv meta tag within the HTML<head> element cannot mark the response as an attachment.
The <body> element of the HTML response must appear within the first 64 kbytes.
If you are generating HTML page responses and using the Content-Type of application/xhtml+xml, you can override the allowed content types to list both this content type and text/html in your agent configuration file.
Make sure the browser_monitoring.content_typeis a space-separated list of content types.
When adding application/xhtml+xml as an allowed content type for automatic instrumentation, be aware that the resulting page will no longer validate correctly as application/xhtml+xml, although the page should still be loaded and rendered correctly by browsers.
If you are using a WSGI or web framework middleware or a plugin that encodes the response content, such as when doing response compression, automatic instrumentation may not work. The Python agent provides specific support for Django GZipMiddleware and Flask-Compress with auto-instrumentation. However, currently this is not supported for paste.gzipper, because it contains a bug which makes it unusable in conjunction with the agent's WSGI middleware that adds the browser monitoring instrumentation.
If you encounter this problem, use manual instrumentation, or switch to using your web server or front-end proxy to compress the response content, rather than performing compression within your web application. The latter solution may also offer performance benefits.
When inspecting your page source, you see the Browser agent inserted incorrectly inside a conditional block.