Run
Analytics and performance
What Mockly records about visitors, what each number means, filters, exports, and page speed.
Mockly records visits on the server that serves your pages, so page views count without JavaScript and without a third-party script. The Analytics tab in the studio's header shows your traffic, where it comes from, the goals visitors reach, and how fast your pages load. Experiments have a page of their own, Experiments, beside it: see Reading results.
The page has two tabs, Overview and Performance, and the address keeps the one you're on, with the period and any filters, so a reload or a shared link opens the same view. It refreshes every 30 seconds while it's showing, or when you click the refresh button. The info button next to the period explains how each number is measured.
Periods#
Overview and Performance cover the period you pick, in your browser's time zone:
| Period | Covers | Charted by |
|---|---|---|
| 24h | The current hour and the 23 before it | Hour |
| 7d | Today and the 6 days before | Day |
| 30d | Today and the 29 days before | Day |
| 90d | Today and the 89 days before | Day |
Each number is compared with the period right before it, of the same length.
Filters#
Click a row in any table but Goals to see only the visits that match it: those from a referrer, a UTM tag, a country, a device, browser, or OS, new or returning visitors, or the visits that viewed a page, started on it, or ended on it. Every number follows, on both tabs: the key numbers, the chart, every table, the period before, and speed.
| Filter | Keeps |
|---|---|
| A page under Top | Visits that viewed the page. The tables then show everything those visits viewed. |
| A page under Entry or Exit | Visits that started, or ended, on it |
| A referrer, or a UTM tag | Visits that came from it. Direct / none is a filter too. |
| A country, device, browser, or OS | Visits whose first page view had it. Unknown is a filter too. |
| New or Returning | Every visit of visitors who first came during the period, or of those who came before it |
Filters of different kinds combine: Germany and mobile shows visits from Germany on a phone. Each filter shows as a chip under the title, with a button to take it off; Clear filters takes off all of them. Clicking a row that's already the filter takes it off too.
A visitor's goals count wherever in the period they reached them, so with a filter, Conversion rate is the share of the filtered visitors who reached a goal, as it is without one.
Overview#
Key numbers#
Six cards sum up the period. Click one to chart it over the period.
| Number | What it counts |
|---|---|
| Visitors | Unique browsers, by the visitor cookie the site sets. A browser that clears its cookies counts again. |
| Page views | Pages served, including your not-found page. |
| Sessions | Visits. A new one starts after 30 minutes without a page view. |
| Bounce rate | Sessions with a single page view. Lower is better. |
| Time on page | How long a page was visible, averaged over the page views that reported it. Capped at 30 minutes per view. |
| Conversion rate | Visitors who reached any goal in the period, out of all visitors in it. |
Under each number is its change from the previous period: a relative change for counts and times, such as "+12%", and a difference in percentage points for rates, such as "+1.2 pts". Green means better, so a falling bounce rate is green. When the previous period was nearly empty, a change of ten times or more shows as a multiple, such as "12×".
The chart#
The chart shows the number you picked over the period. The period before is the dashed gray line, hour for hour or day for day; click it in the legend to hide it. Today, or this hour on the 24h view, isn't over yet, so the end of the line is dashed and labeled "so far". Hover any point to see its value, the matching point of the period before with its date and the change from it, and anything that changed on your site then.
Icons along the foot of the chart mark what changed:
| Icon | Means |
|---|---|
| Rocket | A version was published |
| Arrow, amber | An earlier version was made live again |
| Flask | An experiment changed what visitors see: it started, paused, resumed, or shipped, its traffic or audience changed, or a variant's content did |
A number in place of an icon means several changes that hour or day. Under the chart, each change is a chip with its icon and date: point at one to pick out its marker, or click an experiment's to open it. A change worth a second look, such as a variant edited while its experiment ran, is amber. Data refreshes aren't marked, and filters don't hide changes: they're the site's.
Pages#
| View | Shows |
|---|---|
| Top | Each page's visitors, views, time on page, and how far down it was scrolled on average. Pages that served your not-found page are marked 404. |
| Entry | Where sessions started, with each landing page's bounce rate. |
| Exit | Where sessions ended. |
Sources#
Each session is credited to where its first page view came from:
- Referrers lists the referring site's host, without
www., with its icon. Visits with no referrer, and links within your own site, count as Direct / none. - Source, Medium, and Campaign list the
utm_source,utm_medium, andutm_campaigntags on the address a session landed on.
To see a newsletter's visits on their own, tag its links:
https://acme.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=octoberEach row shows its visitors and their share of all visitors in the period.
Countries#
Visitors by country, with its flag, named, with each country's two-letter code. The country comes from the proxy in front of your site, as Cloudflare names it, never from an address: Mockly stores the country alone. Where the proxy doesn't say, the country is Unknown.
Devices#
Device (desktop, mobile, or tablet, each with an icon), Browser (with its logo), and OS, by visitors, worked out from the user agent. iPads on recent versions of iPadOS send a desktop user agent, so they count as desktop.
Goals#
Every goal visitors reached in the period, from clicks on elements with track, form submissions, and pages with a goal:
| Column | Counts |
|---|---|
| Visitors | Visitors who reached the goal |
| Completions | Every time it was reached: each click, each submission, each view of a goal page |
| Rate | Visitors who reached it, out of all visitors in the period |
| Revenue | The amounts sent with it, added up, in your site's own currency. It shows once any goal has one. |
See Goals for the ways to record one, and to send an amount with it.
New and returning#
New visitors first came during the period: they got their visitor ID in it. Returning visitors had one before it. Each row has the visitors, their share, their visits' bounce rate, and how many of them reached a goal. A new visitor's later visits in the period still count as theirs.
Performance#
The Performance tab shows speed as visitors' browsers measured it, the server's own time, and what your pages weigh. A colored dot on the tab gives the period's page load rating.
Speed#
Each speed card shows the 75th percentile for the period: three in four page views did at least that well. That's how Core Web Vitals report speed, and the ratings use their thresholds:
| Card | Measures | Good | Poor |
|---|---|---|---|
| Page load | Largest contentful paint: when the main content has shown | Up to 2.5 s | Over 4 s |
| First paint | First contentful paint: when anything at all has shown | Up to 1.8 s | Over 3 s |
| First byte | Time to first byte: the network round trip plus the server | Up to 0.8 s | Over 1.8 s |
| Layout shift | How much the page jumps around while it loads, as a score | Up to 0.1 | Over 0.25 |
| Responsiveness | Interaction to next paint: how long the page takes to show a response to a click, tap, or key press, at its slowest | Up to 200 ms | Over 500 ms |
Anything between is Needs work. Each card also has a bar with the share of page views in each rating, the change from the previous period, and how many page views were measured.
Browsers report timings when a page is hidden or closed, so a view without JavaScript, or one whose browser closed before reporting, has none. A timing a browser doesn't measure is left out rather than counted as zero: Safari, for example, doesn't report layout shift. Responsiveness counts only views where the visitor clicked, tapped, or typed. On a page with 50 interactions or more, the slowest one in every 50 is left out, as Core Web Vitals does.
Server time#
How long the server took to answer: find the live version, pick the variants, and join the HTML. The card shows the 75th percentile and the median. The same time is sent with every page in a Server-Timing header, so it also shows in the browser's network panel.
Page load over time#
A chart of page load and first byte at the 75th percentile, by hour or by day, with a line at 2.5 s for a good page load. Its heading also gives the 75th percentile of the fully loaded time: when the browser finished loading the page.
Page weight#
What a first visit to your home page downloads from the live version: the total compressed, the total uncompressed, and the number of requests, split into HTML, CSS, and JavaScript. JavaScript for islands that start later, as they scroll into view or when the browser is idle, is listed apart. Images and other files aren't included.
By page lists every page with its download size and its speed: page load, first paint, first byte, fully loaded, responsiveness, and how many views were measured. A route with parameters shows how many pages it published, with its heaviest page's size. A line above it gives page load by device.
Filters apply to speed too: the cards, the chart, and the table count the page views the filters keep. Page weight is the live version's, whatever the filters.
Exports#
Export, in the title row, downloads the tables as CSV for the period and filters on the page, with every row, where the page shows each table's first 100:
| File | Has |
|---|---|
| Over time | Each hour or day's visitors, page views, sessions, bounce rate, time on page, and conversion rate |
| Pages | Each page's views, visitors, time on page, scroll, the sessions that started and ended there, and the landing bounce rate |
| Sources | Each referrer and UTM tag, with its visitors |
| Countries | Each country's code, name, and visitors |
| Devices | Each device, browser, and OS, with its visitors |
| New and returning | Visitors, sessions, bounce rate, and conversion rate for each |
| Goals | Each goal's visitors, completions, rate, and revenue |
Rates are fractions (0.25 is 25%), times are in milliseconds, and an empty cell means none: a direct visit, an unknown country, or a rate with nothing to work it out from. Everything (JSON) saves the report as the page has it.
Privacy#
Mockly stores:
- a random visitor ID, in a cookie the site sets (see How Mockly works)
- for each page view: the route, the time, the referring site's host, UTM tags, the country when the proxy in front names it, the device class, and the browser and OS family
- for each page view that reports it: time visible, scroll depth, and load and responsiveness timings
- on pages that record a heatmap: where clicks land, as places on the page's elements, and how far down each view got, counted by day
- the goals each visitor reached, and the variant they saw in each experiment, with the device class, whether it was their first visit, and the visit's source (the referring site's host, a UTM source, or direct), for segments
- form submissions, with the fields visitors send
It doesn't store IP addresses, raw user agents, or full referrer URLs. Reports go to your site itself, so analytics need no third-party script or cookie.
To show referring sites' icons, Mockly's server asks DuckDuckGo's icon service for them by host name alone. Nothing about your visitors goes with it, and the studio in your browser never contacts it. Countries' flags and browsers' logos come with the studio.
Bots, headless browsers, and forced previews of a variant aren't counted anywhere: not in visitors, page views, goals, or experiment results.