AI crawler visits and AI-referred visitors
A page script only sees visits that run JavaScript, so crawlers that skip it appear only after a server or log import. When you finish, crawler requests are on the bots page and people who clicked through from an AI product are on the sources page, and neither inflates the human overview.
Prerequisites
The site script is installed. For a full crawl picture you also need an API key with Write server events or Import logs. Do not paste a full key into a repository.
Steps
Read what the script can recognize
Open ConsoleWeb analyticsBots. The tabs are labeled
AI & agentsandAll bots, in both languages. The first groups crawls and referred humans by operator. The second lists every recognized bot.Add crawls that do not run the script
Send access records with the server events or log import in Server events & log import, then return to the bots page. That channel stores only requests classified as bots, so it is not for orders.
Read the human referrals
Open ConsoleWeb analyticsSources and select the AI sources tab. Those are human sessions from AI products, not the crawler list.
Verify
The bots page is no longer empty once crawls arrive. The AI sources tab shows sessions after a person clicks through. The two numbers do not have to match: one is programs reading, the other is people.
Common failures
| What you see | Why | What to do |
|---|---|---|
| The bots page stays empty | Crawls neither run the script nor arrive by server or log | Import them as server events or logs |
| Source totals treated as crawls | The AI sources tab counts human sessions | Use the bots page for crawler requests |
| Human overview looks inflated | Bot tracking mode was set to Do not detect | Switch back to Detect and report separately (default) |
Performance, JS errors and conversion
No report computes how much conversion fell because a page was slow. When you finish, you have a slow path, an error session you can open, goal counts, and the error-session rate on a journey stage, and you judge whether they land on the same step.
Prerequisites
The current site script is installed and real visits have arrived. Load collection is on unless the script tag sets data-vitals="false". Script errors need data-errors="true" in the snippet, which the default snippet includes. Create a goal first if you do not have one.
Steps
Read load by page
Open ConsoleMonitoringPerformance. Check the Good share for each metric, then group Breakdown by Page and note the slow paths. You can also group by country, device, browser, or OS.
Open the visit from an error
Open ConsoleMonitoringErrors, expand a group, and click Open session. The session shows that visit's errors and load metrics together. It describes one visit, not a rate.
Compare goals and the journey
Check whether conversions moved on ConsoleWeb analyticsGoals. Open ConsoleAll-platform analyticsBusinessJourney maps and read Error sessions next to drop-off on the same stage. Goals are not split by whether an error occurred.
Verify
A slow path is visible when performance is grouped by page. An error group opens a session that includes the error. On a journey stage, error-session rate and drop-off sit side by side; they are not divided into one number.
Common failures
| What you see | Why | What to do |
|---|---|---|
| Performance is empty | An old snippet, or data-vitals="false" is set | Install the current snippet and wait for real visits |
| No script errors | JavaScript errors was turned off, so the snippet lacks data-errors="true" | Turn it back on in SDK code and replace the snippet |
| You want one drop in conversion | Load metrics are not joined to goals | Compare path, session, and journey stage |
App version, channel and retention
Version and channel have to be on the event before a retention table can be filtered. Daily New-user retention reads a site-level summary table that ignores version and channel filters, so comparing by version needs another mode.
Prerequisites
The app is registered at ConsoleApp analyticsConfigurationSDK code and a start shows in realtime. You can change the client init fields.
Steps
Send the version
Set
appVersionat init. It is stored as$app_versionon events, and the version page reads that field.Send the channel
Pass
$channelontrackproperties, using your install-package channel name.registerSuperPropsdrops keys that start with$, so a channel set only as a super property is discarded. Events without the field fall under (no channel).Read next-day retention, then change the mode
Open ConsoleApp analyticsUsersChannels and compare the D1 retention column. For a longer view by version or channel, open ConsoleApp analyticsUsersRetention, switch the granularity to week or month, or switch to Active retention, then use the header filter.
Verify
The version page lists the version you set, and the channel table lists the channel with D1 retention. After you switch to week, month, or Active retention, the header filter changes who is in the table. The channel matrix stays empty until at least one day's D1 retention has come due.
Common failures
| What you see | Why | What to do |
|---|---|---|
| Every row is (no channel) | The key was only a super property, or it was not $channel | Pass $channel on track properties |
| Daily new-user retention ignores the filter | That mode reads a site-level daily table with no version or channel | Use week, month, or Active retention; use the channel page for D1 |
| Versions do not match the build | appVersion was empty | Set it to the package version on release |
Receive MMP attribution fields
TapCub does not decide whether a click matches an install; it receives the result your attribution platform computed. When you finish, each postback is a $app_install event, grouped by source on the Installs tab of ConsoleAll-platform analyticsBusinessChannel ROI.
Prerequisites
The attribution platform can POST JSON to an HTTPS address. Rotating the token requires an owner or admin. Do not publish the token in that address.
Steps
Copy the receive URL
Open the MMP tab at ConsoleApp analyticsConfigurationBusiness settings and copy the Endpoint. It is
POST /api/v1/mmp/plus this project's token. After Rotate token, the old URL stops working immediately.Send these fields
Include
media_source,campaign,install_source_status,match_type,platform, andinstall_time. Setinstall_source_statustoorganicornon-organic. If you omitevent_name, the event is$app_install; a custom event name keeps it off the installs tab. A non-organic install also copiesmedia_sourceintoutm_source, with mediummmp.Read the installs tab
Open channel ROI and select the Installs tab. Rows are grouped by
utm_sourceand whether the source is paid. That is the source written by the postback, not the package field$channel.
Verify
After a postback, the installs tab no longer says the range has no install data, and a media source is visible. Event analysis contains $app_install.
Common failures
| What you see | Why | What to do |
|---|---|---|
| Marketing attribution stays empty | That page reads $media_source and the other dollar-prefixed names. The receiver stores the same names without the prefix | Use the installs tab. Do not wait for marketing attribution to fill itself |
| No install rows | The token is wrong, or the postback set a custom event_name | Check the URL and drop the custom event name |
| Everything lands under organic | The body has no media_source, or the status is organic | Send media_source and install_source_status |
| It disagrees with the channel page | Channel analysis reads $channel | Package channel and media source are different fields |