WordPress heatmap and scrollmap without cookies
See at a glance where visitors click on your WordPress site and how far they scroll, without cookies and without an outside dashboard. A heatmap shows where the clicks land; a scrollmap shows how far down the page people actually get, which is the half of the picture most tools leave out. The UX Heatmap and Scrollmap plugin from TheSEO puts both straight into your own admin. You download it below, install it like any other plugin, and everything it measures stays in your own database. Further down is the reading guide that turns those maps into changes to buttons, order and layout.
manage_options, so an administrator account.A map over your page, and a scale beside it
Analytics tells you how many people were there. This tells you where they looked and where they stopped. Below is the situation from the session described further down: all the attention above the fold, the button at the bottom, and half the visitors never seeing it.
Above the fold people click, including on things that are not buttons. The hot spot at the top right sits on a menu item, the one in the middle on a heading. Those are not visitor errors but signals: that is where they expect something.
The line on the scale is the point where half of them have dropped off. Everything below it does exist, but fewer than half of them see it. A button sitting there is invisible to half your visitors.
The cool spot at the bottom is the main button. Not because the button is bad, but because almost nobody is still there.
Four patterns, and what you do about them straight away
A heatmap is only worth something once you know what to do with a blob. This is the reading guide we use ourselves: on the left what you see, on the right what you change that afternoon.
A new menu item, and behind it this
After activating, there is a line UX Heatmaps on the left of your admin screen. There you pick a page, and then you see your own page in a window with the clicks laid over it, plus four panels beside it. This is how that screen is put together.
UX Heatmap and Scrollmap
See how visitors use your pages.
Tracked pages
- /fitting-a-dormer-window/412 events, 288 clicks, 124 scroll updates
- /request-a-quote/196 events, 121 clicks, 75 scroll updates
- /about-us/88 events, 51 clicks, 37 scroll updates
How far visitors get
Most clicked elements
- a.hero-cta96 clicks
- h2.service-heading31 clicks, not a link
- a.tel22 clicks
- Measuring is running on the front of your siteEvery click is kept with its position, and per page view the deepest point reached. The events go to your own admin-ajax.php and nowhere else.
- ✓ The map is drawn over your own pageClicks as a heat layer, the scroll depth beside it, the most clicked elements underneath and a conclusion in plain sentences that names the element.
- ○ There is nothing to conclude yetMeasuring is still off right after activating, and you switch it on yourself. The conclusion says so when the data supports nothing, rather than making something up.
- ! Your site refuses to be framedWith X-Frame-Options or a Content-Security-Policy the window stays empty and the screen says so. The figures beside it are measured separately and still hold.
You cannot see where visitors really click
Analytics gives you figures, but no picture. You see how many visitors open a page, how long they stay and which channel they come in through. What you do not see: where they move their mouse or thumb, which button they ignore and at what point they drop off. That leaves important elements such as a call to action, a form or a menu item unnoticed, even when they are perfectly designed.
Our own UX Heatmap and Scrollmap plugin solves that. You look at click and scroll behaviour straight inside your own WordPress, without cookies, without outside dashboards and without a separate account. This plugin belongs to the full range of tools and plugins from TheSEO, which also holds the setup of the WhatsApp review tool (in Dutch) and the free keyword plan for Google Ads. If you want the longer explanation of how the maps come about first, read how the heatmap and scrollmap plugin works.
What the plugin does exactly
The plugin records two things on the front of your site: where visitors click, and how far down a page they get. That is drawn as a heat layer over a window with your own page in it, with the figures beside it. Here is what is in it, function by function.
- Click map per page: every click is kept with its position in the window and its position across the full page height, so a click at the bottom of a long page is drawn at the bottom too.
- Scroll depth as reach: per page view the deepest position is kept, and the panel shows what share of visitors reached 25, 50, 75 and 100 per cent.
- Filter by device: desktop, tablet and mobile are shown separately, based on the window width the browser sends along itself. Every figure on the screen follows that filter.
- List of most clicked elements: a short CSS selector per element, so you see what is being clicked and whether that element is a link at all.
- Rage clicks: three or more clicks within a second that all land within forty pixels of each other. The whole run counts as one burst rather than two, and every click inside it is marked.
- Dead clicks: a click on something that is not interactive and after which nothing changed within seven tenths of a second. Not the styling, not the address, not the scroll position, not the page height, not the focus and no text selection. Something that looks like a button and does nothing is exactly what this finds.
- The fold and the reading line: the scroll measuring scale beside the example draws where the average visitor enters the page and how far half your visitors get.
- Segments side by side: desktop, tablet, mobile, started here and arrived from another page, each with page views, clicks, rage clicks, dead clicks and the median depth. New against returning is deliberately not in there, because that cannot be done without a cookie or browser storage and this plugin uses neither.
- A conclusion in plain sentences per page, naming the element, which says only what the data supports and says so when it supports nothing.
- Retention period: a daily job deletes events older than the period you set. You choose 30, 90, 180 or 365 days or keep everything; the default is ninety days. There is a button that wipes everything and a button under the example that wipes only this page, both with a confirmation in front of them.
- Everything stays inside your own WordPress: the plugin makes no request to any other server. The events go to your own
admin-ajax.phpand into a table of their own in your own database.
Measuring is still off after activating. You switch it on yourself under UX Heatmaps and then Settings, and you can stop it again at any moment without the collected data disappearing.
How to install it, in four steps
You do not have to be a developer. It is an ordinary plugin zip that you upload like any other. Count on five minutes, including the first measurement.
Click the download button above. You get wp-ux-heatmap-2.1.0.zip, 82 KB. Do not unpack it: WordPress wants the zip itself.
In WordPress go to Plugins, then Add New Plugin, then Upload Plugin. Choose the zip file, click Install Now and then Activate Plugin.
Measuring is off by default. Go to UX Heatmaps, then Settings, and turn Enable tracking on. Logged in administrators are not tracked, unless you tick that box.
Open your site in a window where you are logged out and click around a bit. Then open UX Heatmaps and pick your page from the list on the left.
If something does not work, it is nearly always one of two things. If the list of pages stays empty, Enable tracking is still off, or you are logged in yourself while logged in visitors are not counted. If the window with your page stays white while the figures beside it are right, your site forbids framing through a security header, and that is a setting of your site and not of the plugin.
If you would rather have the installation guided, our WordPress specialist can look over your shoulder.
What it does, and what it does not do
This plugin does a few things well and a lot of things not at all. That is not modesty but a choice: everything it does not do was not needed to see where a page seizes up. Both lists, so you know what you are bringing in.
- A click map over your own page, with the click position measured across the full page height and not only inside the window.
- Scroll reach per page view, in four steps of 25 per cent.
- Desktop, tablet and mobile separately, with every figure on the screen following that filter.
- Most clicked elements, with a note when something is being clicked that is not a link.
- A retention period, a wipe button and a clean uninstall: removing the plugin leaves nothing behind in your database.
- No session recordings, no mouse movements, no keystrokes, no form analysis.
- No journey across several pages. Every page view gets a new random number, so two visits by the same person cannot be tied together.
- No A/B test, no funnels and no session recordings. Rage and dead clicks are in there as of 2.1.0: exactly how they are counted is above in the function list.
- No picture if your site forbids framing. The window then stays empty, the screen says so, and the figures beside it stay accurate.
- No translated admin screens. The texts in the admin are English.
Privacy: what is and is not stored
This is the reason this plugin exists alongside all the heatmap tools already out there, so it belongs here in full and not in a footnote. Per event exactly one row goes into your own database, and that row holds this:
- a random number that holds the events of one page view together and disappears the moment the page closes;
- the type of event, click or scroll;
- the path of the page, without the query string and without the anchor, because that is the part of a web address where a name, an email address or a token can sit;
- the click position, and that position as a percentage of the full page height;
- the width and height of the window;
- the scroll depth as a percentage;
- a short CSS selector of the clicked element;
- the full height of the page at that moment;
- two flags that say whether the click was part of a rage click or a dead click, plus how large that rage click was;
- a single digit that says whether this page view started here or arrived through a click on your own site;
- the time according to your own server.
And this is emphatically not in it: no cookie and nothing in localStorage or sessionStorage, no IP address, not even as an encrypted fingerprint, no browser fingerprint, no user number, no link to a WordPress account and no referring address, only that single digit saying whether the visit came from your own site. Nothing goes to us or to any other party either, because the plugin makes no outgoing request at all.
Because nothing is placed on or read from your visitor's device, this plugin needs no cookie consent prompt. What you write in your own privacy statement stays your judgement; the settings screen shows literally what is in the table and how many rows there are, so you can show that to anyone who asks. Why we draw that distinction is in our cookie statement.
Two more things. If a browser sends Do Not Track or Global Privacy Control, the meter does nothing at all; that is on by default and you can switch it off. And if an older version was already running on your site, the update to 2.0.0 removed two columns of visitor data from the table, including everything already in them; 2.1.0 adds five columns for the friction flags, the page height and the entry point, and that happens once on the first admin page after updating.
From map to concrete advice: the reading guide
A map like that tells you nothing if you do not know what you are looking at. There is no scan on this page that fills that in for you; what there is, is the reading guide we use ourselves, summarised above and written out below.
After looking at your maps, work through these four questions. Is there a hot zone on something that is not a link? Then visitors expect a button there. Is your main call to action below the fold on mobile, while the clicks gather above the fold? Then it simply is not seen. Does the scroll depth run out before people reach the call to action? Then there is too much in front of it. And are your reviews or case studies only below the point where most visitors drop off? Then they convince nobody.
This reading guide is meant for anyone already working with heatmaps and scrollmaps who is not quite sure what the colour patterns mean. For marketers, site owners and agency teams it turns raw maps into decisions you can carry out straight away.
One pattern the maps cannot explain on their own is a page people leave before anything is painted at all. That is usually load time rather than layout, and the seven places it hides are worked through in why do I score low on PageSpeed. If the maps show that the page itself needs rebuilding rather than rearranging, that is the work described under WordPress specialist.
Frequently asked questions
What is the difference between a heatmap and a scrollmap? A heatmap shows where visitors click on the page and which parts get the most interaction. A scrollmap shows how far down visitors scroll and which part of the page often does, or almost never does, come into view.
Is the plugin free? Yes. You download it above, no account is needed and there is no paid version coming behind it that suddenly makes this one limited. It is under GPLv2 or later, so you may change it and pass it on.
Does the plugin set a cookie? No, and that can now genuinely be read back in the code. Nothing is placed on or read from your visitor's device, not in localStorage or sessionStorage either. The number that holds the events of one page view together exists only while that page is open.
Does data go to TheSEO? No. The plugin makes no outgoing request at all. Everything goes to your own admin-ajax.php and into a table of its own in your own database. We see nothing, not even whether you have installed it.
Does the plugin work alongside other analytics tools? Yes. The plugin does not replace your existing analytics, it adds to it. You keep using your current statistics package and put the heatmap next to it to see what the figures mean at page level.
Does it work with a caching plugin? Yes. There is nothing in the page that expires, so a page served from cache keeps measuring. The admin screen is never cached by WordPress itself.
May I put it on client sites? Yes. The data stays in that client's WordPress and the settings screen shows literally what is stored, so you can show that to a client or to a data protection officer.
Do I have to be a developer to use the plugin? No. Installation goes through the standard WordPress plugin upload and after that you look at the heatmap and scrollmap per page, without technical changes. The admin screens are in English.
Curious what your heatmap will show
The fastest route is the download button at the top: install, switch on, let a day of traffic come in and then look. If you would rather have someone look with you at what the maps say and what you change that week, book a call. Then we look together at how this plugin fits alongside your wider SEO and conversion approach, and how you combine it with the AI snippet previewer for the question of whether your page can be used by language models as well.
