Understanding PMP Analytics #
Requires Preferred license.
PetMatchPro tracks visitor interactions with your animal listings, giving you insight into how people browse and engage with animals on your site. This data helps you optimize your pages to increase adoptions.
Enabling Analytics #
- Go to PetMatchPro > Analytics tab (visible with Preferred license).
- Enable Analytics Tracking.
- Click Apply Changes.
![]()
What Events Are Tracked #
PetMatchPro tracks these visitor interactions automatically once analytics is enabled:
| Event Type | What It Captures |
|---|---|
| Impressions | Which animals the visitor actually saw on the page (dwell-gated, see below) |
| Detail Views | When a visitor clicks an animal to view its full profile, including how they arrived (search, similar animals, direct link, social share, external) |
| Action Clicks | Clicks on action buttons – email, phone, directions, adoption application, foster application, donation, meet & greet, volunteer, sponsor, video play, share, poster print. Eight of these (email, phone, adoption_app, foster_app, meet_greet, donation, sponsor, volunteer) are classified as conversions for the funnel and conversion-rate widgets; the other four (video_play, share, poster, directions) are reported as actions but excluded from conversion metrics. See Conversion vs Engagement Actions. |
What Counts as an Impression (8.7.0+) #
An impression is recorded when a visitor sees an animal card. Specifically:
- The card must enter the viewport with at least 50% of its area visible.
- It must remain visible for at least 500 milliseconds (the dwell threshold). This filters out fast-scroll noise.
- Each animal counts at most once per page session.
- Across page loads in the same browser session, the dashboard counts each unique (visitor session, animal) pair once per day. Returning to the same search page does not double-count the cards the visitor already saw – the dashboard reads from a daily summary table that aggregates by session, so revisits are deduplicated automatically.
Detail views work the same way: a visitor reloading the same animal’s profile in the same session counts once, not twice. Action clicks (email, phone, adopt application, etc.) and shares are NOT deduplicated – each click is a discrete signal of intent and gets counted every time it fires.
This is a significant change from 8.6.x and earlier, where every animal card rendered to the page counted as an impression – even cards the visitor never scrolled to. See Interpreting Position Impact for what this change means for comparing pre- and post-8.7.0 data.
Data Captured Per Event #
Each event includes contextual data to help you understand what happened:
- Animal ID and Name – Which animal was interacted with
- Species – Dog, Cat, etc.
- Method Type – Adopt, lost, found, featured, preferred
- Position – Where the animal appeared in search results (e.g., position 3 of 12)
- Source – How the visitor arrived: search results, similar animals section, direct link, social share, or external referral
- Page URL – The page where the interaction occurred
- Enrichment Data – Whether the animal has a video, icon count, and overlay count
Metric Definitions #
| Metric | What It Means | Where It Appears |
|---|---|---|
| Impressions | Number of times an animal card was actually viewed (dwell-gated, see above) | Dashboard, Top Animals, Position Impact |
| Detail Views | Visitor clicked into an animal’s full profile page | Dashboard, Top Animals |
| Actions | Clicks on email / phone / directions / adoption application / foster application / donate / meet & greet / volunteer / sponsor / video play | Dashboard, Action Breakdown |
| Search CTR | Detail Views divided by Impressions, expressed as a percentage. “Of the people who saw this animal in search, how many clicked through?” | Dashboard summary card |
| Engagement Rate | Actions divided by Detail Views. “Of the people who reached the detail page, how many took an adoption-relevant action?” | Dashboard summary card |
| Source Breakdown | How visitors arrived at the detail page – search, similar-animals grid, direct, social share, external | Dashboard footer |
How Tracking Works #
PetMatchPro uses lightweight JavaScript that runs in the visitor’s browser. The events it captures take a queue-and-flush path to the dashboard so visitors never wait on database writes:
- Capture – JavaScript on each page collects impressions as cards enter the viewport.
- Beacon – Batches are sent to the server via the browser’s
sendBeaconAPI – a non-blocking, fire-and-forget method that does not slow page loads. - Queue – The server appends incoming batches to an in-database queue and returns immediately.
- Drain – A WordPress scheduled task (WP-Cron) drains the queue once per minute, writing all buffered events into the raw events table in a single bulk insert.
- Roll up – A second scheduled task runs every 5 minutes, aggregating today’s raw events into a daily summary table by date + event type + method type + animal + species + source + action type. A third nightly task (3 AM site time) finalizes yesterday’s summary.
- Read – The dashboard queries the daily summary table, not the raw events table. Rendering the dashboard for a 90-day window touches at most 90 days of pre-aggregated rows instead of grouping millions of raw events.
The dashboard is therefore up to ~5 minutes behind real time on today’s data and stable on closed days. If you need a fresher view, the Flush Queue Now and Rebuild Daily Summaries buttons on the Tools tab let operators pull the latest data on demand. See Queue Health and Tools.
Why a separate summary table? #
Without it, the dashboard had to GROUP BY across every raw event row in the requested date window on every page load. On a busy shelter site, that meant hundreds of thousands of rows per dashboard render, and the page started timing out after just a few weeks of data collection. The summary table reduces the same query to ~90 indexed rows for a 90-day window. The dashboard now loads in well under a second regardless of how long the site has been collecting data.
Dashboard Filters #
The dashboard offers two filters at the top:
- Date range – Last 7 / 30 / 90 / 365 days, or “All time”.
- Method type – Adopt, Lost, Found, Featured, or All. Useful for shelters that want to focus on one program at a time.
Interpreting Trends #
A few patterns to watch for:
- High impressions but low detail views – Card design or photography may not be compelling. Visitors see the cards but do not click in.
- High detail views but low actions – The detail page is not converting interest into next-step behavior. Check call-to-action button placement and labeling.
- Top-position animals dominating impressions – Expected behavior; visitors scroll less than you think. See Position Impact for how to use this signal.
- Sudden drop in all metrics – Check the Queue Health card. If “Last flush” shows a long age with the “Cron may be broken” badge, no data is being written. See the cron requirement guide.
SEO Features #
The Analytics tab also includes SEO configuration options (all Preferred tier):
- SEO Enabled – Turn on SEO enhancements
- Pretty URLs – Clean, readable URLs for animal detail pages
- Open Graph Images – Social sharing preview images
- Meta Templates – Custom page title and description templates
- JSON-LD Structured Data – Help search engines understand your animal listings
- XML Sitemap – Automatic sitemap generation for animal pages
Next Steps #
- Leveraging Analytics – Use data to improve adoption outcomes (includes Interpreting Position Impact)
- WP-Cron Requirement – What PetMatchPro needs from your host
- Queue Health and Tools – Reading the health card and using diagnostic buttons
- Privacy and Data Retention – What is stored, what is not
- GA4 Configuration – Set up Google Analytics 4 for PetMatchPro events
- GTM Setup – Configure Google Tag Manager