Descripción
Vireo Analytics is self-hosted analytics for WordPress. It brings your history with you when you leave Google Analytics, shows the Google searches behind each post, and tells you what AI assistants take from your site against the readers they send back. Visitor data stays in your own database, with no cookies and no consent banner.
Bring your history with you
Switching analytics tools usually means your charts start again on the day you switch. Vireo imports your daily traffic, pages, referrers, countries and devices from Google Analytics 4, so the years you already have stay in front of you.
It also imports from Koko Analytics, Jetpack Stats, Statify, WP Statistics, Burst Statistics, Independent Analytics, SlimStat and Plausible (from Plausible’s CSV export), bringing whatever each one kept: referrers per post, browsers and devices, missing pages, outbound clicks, downloads and custom events where the source recorded them. Imports run in batches you can watch, stop the day before Vireo’s own data begins so no day is counted twice, and ask before importing a range you’ve already brought in. The switching guides show what comes across from each one.
The searches behind each post
Google stopped passing search terms to websites years ago, so most analytics plugins see a visit from Google and nothing more. Connect Search Console once and every post’s stats screen lists the searches it appeared for, with clicks, impressions and average position. The Overview shows the landing page beside each search.
What AI takes, and what it sends back
ChatGPT, Claude, Gemini, Perplexity and Copilot are reported as their own traffic source. Next to the readers they send, Vireo counts the pages their crawlers fetched, so you can see the ratio for your own site. It works on the history you’ve already collected.
Numbers you can check
Over 800 known crawlers, AI trainers, SEO tools, uptime monitors and headless browsers are kept out of your numbers. Vireo reports how many it excluded and why, so a figure lower than your server logs makes sense. Automated browsers that claim to be Chrome are caught by the flags automation tools set on themselves, and prefetched pages nobody looked at aren’t counted. The bot directory lists every one Vireo knows.
Headless WordPress: Astro, Next.js and others
If your posts live in WordPress but visitors read them on an Astro, Next.js or other front end, Vireo can count that front end too. Enter its address in Settings, paste one script tag into the front end, and each pageview is matched to the WordPress post it shows, so per-post stats and Search Console searches keep working. It’s free for one front end.
Your other sites, in the same dashboard
Run a static site, a docs site or a landing page next to your WordPress site? Add it under Settings and paste one tag into it. Its visits are counted on their own, without cookies, and a site selector on the Overview switches between your sites. One connected site is free.
Everything else
- An Overview that opens with what changed since the previous period, and the pages and sources behind it.
- A Popular posts block, shortcode and widget built on your real, bot-filtered view counts, plus a view counter for single posts.
- A Year in review for any year with data, including the history you imported from another tool, and weekly highlights on the Overview and in the weekly email.
- Top pages, referrers grouped by how people arrived, countries and devices, with filters for each.
- Average time on page and bounce rate, with each page’s time in Top pages. Time counts only while the tab is in front of the reader.
- Core Web Vitals from your real visitors, graded at the 75th percentile the way Google grades them, with Google’s PageSpeed lab test of any page one click away.
- Notes pinned to a date, so a spike still has its explanation weeks later.
- A weekly email digest, CSV export of any view, and a views column on the Posts screen.
- Custom events for clicks and form submissions, and 404 tracking to find broken links.
- Read-only dashboard access for editors or clients, without making them administrators.
- An MCP server, so Claude, Cursor or any other AI assistant can answer questions about your traffic from the real numbers. A REST API and WordPress Abilities for everything else.
- Multisite support, with one view across the network.
- Headless WordPress support: count visits to the Astro, Next.js or other front end that shows your WordPress content.
- Connected sites: count visits to your other sites, WordPress or not, from the same dashboard.
- A warning in Site Health if recording stops, so a broken setup doesn’t look like a quiet week.
- Reports for WP RSS Aggregator and Spotlight sites: clicks through to aggregated articles per feed source, and what visitors do with Instagram feeds.
- Translated into German, Spanish, French, Italian, Japanese, Dutch, Portuguese (Portugal and Brazil) and Russian.
Vireo Pro: see which pages and visitors make you money
The free plugin is complete on its own. Vireo Pro is for sites that sell something or report to clients:
- Revenue from WooCommerce, Easy Digital Downloads, FluentCart and Freemius, traced to the page and source that brought each buyer.
- Goals and funnels, with each step’s conversion on screen.
- Shareable read-only dashboards for clients, with an expiry date and a password.
- More connected sites, a live view, entry and exit pages, and a weekly email that explains what changed.
Pro starts at $60 for the first year on one site, with a 30-day money-back guarantee. See Vireo Pro and pricing.
Privacy
Vireo sets no cookies and stores nothing on visitors’ devices. Visitors are counted with a salted hash that changes every day, so nobody can be followed from one day to the next. Do Not Track and Global Privacy Control are honoured without a setting. Visitor data is never sent to RebelCode or anyone else; the only outside services are the ones you choose to connect, listed under External services below.
Servicios externos
This plugin includes an optional importer for historical Jetpack Stats data. When (and only when) a site owner runs that importer from Vireo Analytics Settings Import data, the plugin calls the WordPress.com Stats API at https://stats.wordpress.com/csv.php to retrieve the site’s existing pageview, referrer, and top-post history.
Qué se envía:
- The WordPress.com API key the site owner pastes into the import screen.
- The site address whose stats are being imported.
- Un rango de fechas solicitado y un nombre de tabla (p. ej.
views,referrers,topposts).
What is not sent: no visitor data, no user data, no site content, no credentials beyond the API key the site owner entered.
Cuándo se envía: solo mientras la importación está en curso, en respuesta a que el propietario del sitio haga clic en «Ejecutar importación». No se realizan llamadas en segundo plano ni recurrentes.
La API de Stats la proporciona Automattic Inc. (WordPress.com).
- Condiciones del servicio: https://wordpress.com/tos/
- Política de privacidad: https://automattic.com/privacy/
El importador es completamente opcional.
Google Analytics (opcional, importador)
Cuando el propietario del sitio ejecuta el importador de Google Analytics, el plugin firma una petición con la clave de cuenta de servicio que pegó y llama a https://oauth2.googleapis.com/token para obtener un token de acceso, y después a https://analyticsdata.googleapis.com para leer el historial de esa propiedad.
Qué se envía: las credenciales de la propia cuenta de servicio y un rango de fechas. Ni datos de visitantes, ni contenido del sitio, nada sobre quien lee el sitio.
Cuándo se envía: solo mientras se ejecuta una importación, en respuesta a que el propietario del sitio inicie una. La clave se puede eliminar después desde esa misma pantalla.
Google Search Console (opcional)
Cuando el propietario del sitio conecta Search Console, el plugin se autentica del mismo modo y llama a https://searchconsole.googleapis.com para leer las búsquedas que llevaron a la gente hasta el sitio.
Qué se envía: las credenciales de la propia cuenta de servicio, la dirección de la propiedad que introdujo el propietario y un rango de fechas.
Cuándo se envía: una vez al día según una programación, y cada vez que el propietario pulsa el control de actualización. Una actualización obtiene la última semana de inmediato y, después, el resto del historial solicitado en segundo plano, de quince en quince días a lo largo de unos minutos, de modo que una sola pulsación puede generar varias llamadas seguidas. Es la única llamada saliente recurrente que realiza el plugin, y solo ocurre en los sitios que han conectado Search Console. Al desconectar, se detiene y se elimina la programación.
Las dos APIs de Google las proporciona Google LLC.
- Condiciones del servicio: https://policies.google.com/terms
- Política de privacidad: https://policies.google.com/privacy
Google PageSpeed Insights (optional)
The Page speed tab and each post’s stats screen have a button for Google’s PageSpeed Insights lab test. It works one of two ways.
Without an API key (the default), the button is a link. It opens https://pagespeed.web.dev/ in the admin’s own browser, with the address of the page being tested in the link, and Google runs the test there. The plugin’s server sends nothing and stores nothing.
With an API key the site owner adds under Settings, the plugin calls https://www.googleapis.com/pagespeedonline/v5/runPagespeed from the server and shows the result on the dashboard.
What is sent: the address of the page being tested, which is always a page on this site or on a connected site, the device to test as (mobile or desktop), the admin’s language, and, on the API path, the site owner’s API key. No visitor data and nothing about anyone reading the site.
When it is sent: only when someone with access to the Vireo dashboard presses the button. Nothing runs on a schedule or on the front end. API results are kept for a day so the page can show them again without another test.
PageSpeed Insights is provided by Google LLC.
- Terms of Service: https://developers.google.com/terms
- Política de privacidad: https://policies.google.com/privacy
DB-IP (opcional, geolocalización)
La geolocalización a nivel de país necesita una base de datos local, y el detalle a nivel de ciudad de Pro necesita una segunda. Cuando el propietario del sitio pulsa el botón de descarga, el plugin obtiene el archivo mensual actual de https://download.db-ip.com.
Qué se envía: nada más que la petición del archivo. Ni datos del sitio, ni datos de visitantes, ni identificadores. Las búsquedas posteriores se resuelven por completo en tu propio servidor con el archivo descargado; ninguna dirección se envía nunca a ninguna parte.
Cuándo se envía: solo cuando el propietario pulsa el botón.
Los datos de DB-IP Lite los proporciona DB-IP bajo CC BY 4.0.
- Sitio web: https://db-ip.com/
- Política de privacidad: https://db-ip.com/legal/privacy
A site that imports nothing, connects nothing, adds no PageSpeed API key and downloads no geolocation database contacts none of these services from its own server.
Sí hace una petición recurrente a sí mismo: una vez por hora el plugin envía una petición a su propio endpoint de seguimiento para comprobar que la vía rápida sigue siendo accesible, porque una regla del alojamiento o un cambio en el CDN pueden romperla en silencio. Esa petición nunca sale de tu servidor y no lleva datos de nadie.
Ninguna de estas vías envía datos de visitantes a ninguna parte. Todas traen datos hacia dentro.
Capturas









Bloques
Este plugin proporciona 2 bloques.
- Popular posts Your most viewed posts, counted by Vireo Analytics.
- Post views How many times this post has been viewed, counted by Vireo Analytics.
Instalación
- Sube los archivos del plugin a
/wp-content/plugins/vireo-analytics/, o instálalo desde Plugins Añadir nuevo y busca «Vireo Analytics». - Activa el plugin desde el menú Plugins.
- Ve a Vireo Analytics Resumen para ver tu panel. Las primeras páginas vistas aparecerán en menos de un minuto.
To bring your history across from Google Analytics or another plugin, go to Vireo Analytics Settings Import data. If another supported analytics plugin is installed, the Overview offers to import from it.
FAQ
-
Is there a paid version?
-
Yes, Vireo Pro. Everything described above stays free. Pro adds revenue and conversion reports for stores, goals and funnels, client dashboards and more connected sites. If you stop paying, the free plugin keeps working with all your data. Pricing is on vireowp.com.
-
¿Cumple con el RGPD?
-
Sí. Vireo Analytics no establece cookies, no usa localStorage para el seguimiento y calcula el hash de los identificadores de visitante con una sal que rota cada 24 horas. No hace falta un banner de consentimiento para la analítica básica. La geolocalización a nivel de país se obtiene de la IP en el servidor; la IP en bruto nunca se escribe en las tablas de analítica, y el archivo de búfer de corta duración que la contiene se elimina en cuanto el agregador lo procesa, normalmente en menos de un minuto. Aun así, deberías mencionar el plugin en tu política de privacidad.
-
¿Qué significa exactamente el número de «Visitantes»?
-
Dentro de un mismo día es un recuento único real: una persona se cuenta una sola vez, independientemente de cuántas páginas lea. En un rango más largo es la suma de los recuentos diarios, así que alguien que visitó tres días del mes cuenta tres veces.
No es pereza, es el modelo de privacidad. Un visitante se identifica con un hash de su IP y del navegador, con una sal secreta que se descarta y se regenera cada noche. Mañana la misma persona produce un hash completamente distinto, así que no hay nada que pueda vincularla con el de hoy. Eso es lo que hace legítimo el seguimiento sin cookies y sin consentimiento, y no un tecnicismo. El coste es que «personas únicas este mes» es una pregunta que los datos realmente no pueden responder, y preferimos decirlo a mostrar un número que parece preciso y no lo es.
Las páginas vistas son exactas en cualquier rango.
-
¿Respeta Do Not Track y Global Privacy Control?
-
Sí, y está activado por defecto. Si el navegador de un visitante envía
DNT: 1oSec-GPC: 1, el script de seguimiento no se dispara para él, y el endpoint de recopilación rechaza la página vista aunque algo la envíe de todos modos. Esas visitas no se registran en ningún sitio. Esto te resta algo de tráfico en el panel, y ese es el punto: una exclusión voluntaria que puedes desactivar no es una exclusión voluntaria. Si tienes un motivo concreto para anularlo, el filtrovireo_honor_opt_outpuede devolver false. -
Why are my numbers lower than another plugin’s?
-
Most analytics plugins count some automated traffic as visitors: uptime monitors (StatusCake, UptimeRobot, Pingdom), SEO crawlers (Ahrefs, Semrush, MJ12), AI crawlers (GPTBot, ClaudeBot, PerplexityBot) and testing tools. Vireo filters those out and shows you what it removed, by category, so you can check the difference yourself. If you’d rather count some of them, the
vireo_bot_ua_patternfilter changes the pattern. -
¿Puedo migrar desde Jetpack Stats?
-
Yes. Settings, then Import data, pulls your daily pageviews, top posts and referrers from the WordPress.com Stats API for whatever date range you choose. You paste in your WordPress.com API key and the site address the stats are recorded under; Jetpack doesn’t need to be active or connected. Jetpack Stats has no visitor counts, so imported days show pageviews only.
-
¿Puedo migrar desde Google Analytics?
-
Yes. Settings, then Import data, brings your history across: daily pageviews and visitors, your pages, your referrers and which pages they sent readers to, countries, devices, outbound clicks, downloads, form submissions and your own custom events. It reads the Analytics Data API directly, so you need a Google service account key and your numeric property ID rather than the G- measurement ID. Sessions, conversions and the events GA4 collects on its own (page views, scrolls, session starts) do not come across.
-
Can I migrate from Plausible Analytics?
-
Yes. Export your site from Plausible (Site settings, then Imports & Exports), then upload the zip under Settings, then Import data. Daily pageviews and visitors, pages, referrers, countries, device types, goals and custom events come across, with outbound clicks, file downloads and 404s landing in the same reports as Vireo’s own. No API key is needed, and the uploaded file is deleted as soon as it has been read. Browsers, operating systems, entry and exit pages and custom properties are not imported.
-
Can I ask an AI assistant about my stats?
-
Yes. Vireo runs an MCP server at /wp-json/vireo-analytics/mcp, so Claude Code, Claude Desktop, Cursor and other MCP clients can ask about traffic, what changed, which pages are growing, what people searched for, which AI assistants send readers, broken links and more. Open Settings, Search Console & API and copy the ready-made configuration for your client. The assistant signs in with an application password you create on your profile, sees only what that user can see in the dashboard, and can read, never change anything. Nothing is sent anywhere: your assistant connects to your site directly.
-
Only if the site is connected to a MainWP dashboard through MainWP Child. Then the dashboard can read the site’s visitor and pageview totals, top pages and top referrers, over MainWP’s own signed connection. Nothing about individual visitors is shared, and the dashboard already has administrator access to the site. To switch it off, add
add_filter( 'vireo_mainwp_enabled', '__return_false' );to the site. -
Can I show my most popular posts?
-
Yes. Add the Popular posts block anywhere blocks work, including block theme templates, or use the
[vireo_popular_posts]shortcode or the Popular posts (Vireo) widget on classic themes. Choose how many posts, the period (last 7, 30 or 90 days, or all time), which post types, and whether to show featured images and view counts. It uses the same bot-filtered counts as your dashboard, lists only published posts that aren’t password-protected, adds no tracking, and is cached so it stays fast. To show a single post’s views, use the Post views block or[vireo_views]. -
¿Funciona con plugins de caché?
-
Sí. El seguimiento se ejecuta en cada carga de página mediante un beacon POST ligero, también en las páginas cacheadas. La primera vez que actives el plugin, puede que tengas que esperar a que tu caché se regenere antes de que todas las páginas empiecen a registrar. Cuando eso ocurra, el seguimiento es universal.
-
My theme or landing page doesn’t count visits. Why?
-
The tracker loads in the footer through
wp_footer(). Some themes, page builders and landing-page templates leave that call out, so the tracker never loads. Add<?php do_action( 'vireo_print_tracking_script' ); ?>just before</body>in that template. It’s safe on pages that also callwp_footer(): the tracker only prints once. -
My site is headless. Can it count visits to my Astro or Next.js front end?
-
Yes. Under Settings, then Tracking, enter the front end’s address under «Headless front end». Pages on that site can then send pageviews to this WordPress site; anything from another address is refused. Paste the script tag shown under the setting into every page of the front end. It counts Astro view transitions on its own, and with
data-spa="history"it counts page changes on other single-page front ends. Each pageview is matched to the WordPress post at the same path, so a front end that keeps the permalink structure needs nothing else, and Top pages, the per-post view counts and Search Console per post all work as they do for a theme. One front end per site.Two things stay out of reach. Crawlers are counted when they fetch a page from WordPress, so the crawler and AI-bot numbers do not include requests made to the front end. And Core Web Vitals are not collected from the front end yet.
-
¿Cómo se compara con Google Analytics?
-
Google Analytics te enseña más (segmentación, audiencias, modelos de atribución), pero exige un banner de cookies, envía los datos de tus visitantes a Google y se ha vuelto cada vez más complejo. Vireo Analytics responde a «cuánta gente visitó qué, desde dónde y con qué dispositivo», que es lo que mira de verdad la mayoría de propietarios de sitios WordPress. Para quien no necesita modelos de atribución de nivel empresarial, el intercambio suele compensar.
-
¿Hace seguimiento de los administradores conectados?
-
Por defecto, no. Hay un ajuste en Vireo Analytics Ajustes para activar el seguimiento de administradores si quieres ver tus propias visitas (útil para pruebas).
-
¿Cuánto tiempo se conservan los datos?
-
Los hashes en bruto de visitantes y las filas de referentes se agregan en resúmenes diarios tras 24 horas. Los resúmenes diarios se conservan de forma indefinida salvo que establezcas un límite de retención en Ajustes Retención. La retención por defecto es de 730 días (dos años).
-
¿Ralentizará mi sitio?
-
La baliza de seguimiento se lanza de forma asíncrona cuando la página ya es interactiva, usando la API
navigator.sendBeacon()del navegador cuando está disponible. La página vista la registra un endpoint independiente que arranca WordPress sin cargar plugins ni tu tema. Los alojamientos que bloquean PHP directo dentro de wp-content recurren automáticamente a admin-ajax. En un sitio bien alojado no notarás la diferencia.
Reseñas
Colaboradores y desarrolladores
«Vireo Analytics – Cookieless Google Analytics Alternative with Search Console» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
Colaboradores«Vireo Analytics – Cookieless Google Analytics Alternative with Search Console» está traducido en 3 idiomas. Gracias a los traductores por sus contribuciones.
Traduce «Vireo Analytics – Cookieless Google Analytics Alternative with Search Console» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
0.13.0
- Added: average time on page and bounce rate on the Overview, compared with the previous period like the other headline numbers, and each page’s average time in Top pages. Time on page counts only while the tab is in front of the reader, up to 30 minutes a view, averaged over the views that sent a time. Bounce rate is the share of a day’s visitors who viewed one page, with visitors counted the same way as on the Visitors card. Time on page starts counting when you update, bounce rate the day after.
- Added: AI assistants and the REST API get both numbers with the traffic totals, and each page’s time with the top pages. The CSV export has them too.
- Changed: the tracker sends one more small request when a reader leaves a page or switches away from it, with the seconds they spent there. It sets no cookies and stores nothing in the browser, and it respects Do Not Track, Global Privacy Control and your consent setup the same way pageviews do. Headless front ends and connected sites get it with the same script.
- Fixed: when the first two visits to a newly connected site arrived together, one of them got an error back and wasn’t counted. Both are counted now.
- Fixed: Core Web Vitals history was kept forever, whatever the data retention setting said. It’s trimmed with everything else now.
0.12.5
- Fixed: with Rank Math or another plugin that serves its tools through the MCP Adapter’s shared server, activating Vireo made that plugin’s MCP endpoint disappear, even if you never used Vireo’s own. Vireo switched off the shared server whenever it started the adapter itself, and it couldn’t see that Rank Math had started it already. It now leaves the shared server alone whenever any other plugin uses the adapter, and only turns it off on sites where nothing but Vireo uses the adapter.
- Fixed: a site that changed the beacon rate limiter’s shard count, the size cap on unprocessed visits, or the list of bot signatures through their filters still used the fast tracking endpoint, where those filters never run, so the change had no effect. The plugin checked for a misspelled name and missed the other two. Setting any of them now keeps the site on the standard route, where they apply.
0.12.4
- Fixed: a MainWP dashboard asking this site for a report with a date range or any other argument got «The tool input must be a JSON object» back, because WordPress had escaped the quotes in the request before the plugin read it. Arguments from the dashboard are now read as sent.
0.12.3
- Fixed: with a language pack from translate.wordpress.org installed, the dashboard and settings showed English wherever the pack was still incomplete, because WordPress loads the pack instead of the full catalogue shipped with the plugin. The plugin now adds its own catalogue underneath the pack: the pack’s wording stays wherever a translator approved one, and the bundled translation covers the rest.
- Fixed: on PHP 7.4, activating the plugin stopped with a type error, because WordPress passes the network flag as null and the hook demanded a boolean. Every PHP version the plugin supports can activate it again.
0.12.2
- Security: the text an AI assistant reads from Vireo (paths, referrers, search terms, event values, error messages) is now cleaned of invisible Unicode characters, direction overrides, line separators and look-alike brackets as well as the ASCII ones, so a crafted visit can’t slip an instruction past the cleaning.
- Added: a MainWP dashboard running the Vireo Analytics for MainWP add-on can ask this site for any of its read-only reports over the connection MainWP already signs, so an assistant connected to the dashboard can read each child site by name. Only Vireo’s own read-only reports are available, the connected user needs the Vireo capability, the site’s
vireo_mainwp_enabledopt-out still applies, and nothing about a child’s own connected sites is passed up.
0.12.1
- Fixed: on phones, the three traffic cards each took a screen of their own before the chart. Each is now one compact band, and on tablets they sit three across.
- Fixed: the filter chips wrapped into two ragged rows on phones. Each now takes a full row.
- Fixed: the Mobile/Desktop switch on the Page speed tab sat across the card from the button it changes. It follows the heading now.
- Fixed: change chips said their sign twice, or not at all. The arrow is the sign, and it now shows on every chip.
- Fixed: on PHP 8.2 and later, every MCP call with arguments logged a deprecation notice from the bundled MCP adapter. The adapter is updated to a version that doesn’t.
0.12.0
- Added: an MCP server, so Claude, Cursor and other AI assistants can answer questions about your traffic from your real numbers: what changed this week, which pages are growing, what people searched for, which assistants send readers, which links are broken. Open Settings, Search Console & API and copy the ready-made configuration for your client. The assistant signs in with an application password you create on your profile, sees only what that user can see in the dashboard, and can read but never change anything.
- Added: every dashboard view can now be asked for by an AI assistant, over the REST API or through WordPress abilities: what changed against the previous period, weekly highlights, hourly traffic, traffic by channel, one referrer in depth, AI assistant traffic, Search Console queries site-wide or for one page, one event in depth, missing pages, bot traffic, Core Web Vitals, chart notes and the year in review. Text that visitors can set, such as paths, referrers and search terms, is flattened before it reaches an assistant.
- Changed: the Overview opens with the traffic chart, and Issues & campaigns is now three tabs: Content, Campaigns and Issues. What changed shows five rows a side with a Show all link, and the card titles, comparison note and bot note take less room.
- Changed: on phones, the date range is one select instead of ten wrapping buttons, the report tabs scroll in one row, chart dates stay readable, nothing runs past the edge of the screen, and every control is a comfortable tap target.
- Changed: Settings is laid out as cards, the email day and hour share one row, the REST reference is folded away, and the import picker separates sources that can always run from plugins whose data wasn’t found on this site. Importer screens lead back to Import & export and keep the Vireo menu open.
- Changed: Year in review marks the month in progress as «so far», lists the months as rows on phones, and tells a fresh site the review fills in on its own. The WordPress dashboard widget’s chart keeps its labels readable on a phone and each day has a tooltip.
- Fixed: the AI assistants card divided crawler requests by readers over the whole range even when crawler counting had started part-way through it, which made the ratio look five times smaller than it was. All three numbers now cover the days crawlers were counted, and the card says since when. Readers sent counts visitors, not pageviews.
- Fixed: Today’s average-daily card and the dashboard widget compared a day in progress against a whole one, so every morning opened on a red -59%. Both now weight the comparison by the time elapsed, like the Overview.
- Fixed: a German admin’s page labels could turn up in an English admin’s What changed list, and the other way round. Cached labels are now kept per language.
- Fixed: referrer detail listed the whole site’s top pages under a referrer’s name. It lists the posts that referrer sent people to.
- Fixed: admin notices landed between a page’s title and its dates; the widget’s single phone column cut off page counts; the Vireo menu closed on importer screens; muted text and delta chips didn’t pass AA contrast.
- Fixed: on a site with WooCommerce, the first page load after activating it logged a «translation loading triggered too early» notice from Vireo’s cron schedule label.
- Changed: for developers, abilities that answered with a list (daily stats, top pages, top referrers, countries, events) now answer with an object holding a
rowslist, which is what MCP clients require. The REST routes for those keep their original shape. Arguments an ability doesn’t document are refused instead of ignored.
0.11.1
- Added: a Settings option to hide today’s pageviews from the admin toolbar. It’s on by default. Developers can decide per user with the
vireo_show_admin_barfilter. Thanks to Paul Fleury for the suggestion.
0.11.0
- Added: test your homepage or any post with Google’s PageSpeed Insights, from the Page speed tab and each post’s stats screen, on mobile or desktop. Out of the box the button opens the test on the PageSpeed Insights website. Add your own free Google API key under Settings, Search Console & API and the test runs from the dashboard instead, showing the performance score, the lab timings and the five fixes Google expects to save the most, next to your real-visitor numbers. A test runs only when you press the button, and results are kept for a day.
0.10.3
- Fixed: notices from Vireo Analytics Pro were hidden on Vireo’s own screens along with other plugins’ notices, so Pro’s Freemius revenue set-up card never appeared on the Settings page.
- Changed: the cache that remembers which country an address belongs to, and the fallback used to tell visitors apart, now key on a hash that cannot be reproduced without the site’s own secret, instead of a plain MD5 of the address. The old cache rows are cleared on update and rebuild as visits arrive.
0.10.2
- Fixed: add-ons that wait for new data, such as the Pro spike alert, are now told when Vireo finishes writing it. They never were, so spike alerts never ran.
0.10.1
- Fixed: on sites using WP Rocket’s JavaScript minification, the tracker could stay on an old copy after updates, so WP RSS Aggregator and Spotlight clicks were never counted.
- Fixed: clicks on the padding of Spotlight’s «View on Instagram» button weren’t counted.
0.10.0
- Added: connected sites. Count visits to the other sites you run from this dashboard, whether or not they use WordPress: a static site, a docs site, a landing page. Each one keeps its own numbers, and a site selector on the Overview switches between them. Add a site under Settings, Tracking and paste its tag; visits are accepted only from that site’s address. Free includes one connected site. Pages on a connected site are listed by address, and per-post reports, Search Console, the weekly email, the REST API and imports stay with this WordPress site.
0.9.1
- Added: headless WordPress. Enter the address of the Astro, Next.js or other front end that shows your posts under Settings, Tracking, and its pages send pageviews here and are matched to the posts they show. The front end adds one script tag, which also counts Astro view transitions and other client-side page changes. Pageviews sent from any other site are refused.
- Added: a Popular posts block, shortcode and classic widget that list your most viewed posts over the last 7, 30 or 90 days or all time, with optional featured images and view counts. Counts are Vireo’s own bot-filtered numbers, and private, draft and password-protected posts are never listed.
- Added: a Post views block and [vireo_views] shortcode that show how many times a post has been viewed.
- Added: comment counts next to views in the posts list, Top pages and each post’s stats, with comments per 1,000 views once a page has enough traffic.
- Added: Year in review. A screen for any calendar year with data: pageviews and visitors, the change on last year when there’s a full record to compare, busiest month and day, pageviews by month, top pages, posts published that year, how people arrived, top countries, Google searches and AI crawlers. Months brought in from another tool are marked as imported and credited to it. Copy a plain-text summary or print it.
- Added: weekly highlights. The Overview and the weekly email list up to three things worth knowing about the last seven days, such as your best week so far, a post passing 1,000 views or a site sending visitors for the first time. A quiet week shows none.
- Added: imports bring across more of what each plugin kept, where it recorded it. Referrers per post, devices and missing pages from WP Statistics, Burst Statistics, Independent Analytics and SlimStat. Outbound clicks and downloads from WP Statistics, Independent Analytics, SlimStat and Plausible. Custom events from WP Statistics, Independent Analytics and Plausible. Missing pages and device types from Plausible. Filtered bots from WP Statistics and SlimStat. The Google Analytics import adds referrers per page, outbound clicks, downloads and your own events.
- Changed: the weekly email opens with «Your week on» your site’s name.
- Changed: Jetpack Stats imports record pageviews only. Jetpack has no visitor counts, and copying views into visitors invented a number.
- Changed: the Koko Analytics importer no longer offers countries and devices, which it could never read.
- Fixed: importing from Independent Analytics filed every post under «/singular» and every missing page under «/404». Pages now land at their real addresses.
- Fixed: importing from SlimStat counted downloads, crawlers and feed readers as pageviews.
- Fixed: dates in chart titles, the dashboard widget and the email showed the day before on sites west of UTC.
- Security: a pageview could name a draft, private or scheduled post and put its title on the dashboard. Only posts a visitor could see are accepted now, and titles of non-public posts already recorded show as their address instead.
- Fixed: imported page paths, referrers and event names are cleaned the same way as the ones Vireo records itself.
- Fixed: missing-page tracking stored addresses with accented or other non-Latin characters cut short, so /café/ was recorded as /caf/.
- Fixed: a change too small to show as a whole percent appeared as a red 0% on the Overview and the dashboard widget.
- Fixed: the import history line shows every date in your site’s date format.
0.9.0
- Added: import your history from Plausible Analytics. Upload the export zip from Plausible’s site settings, and Vireo brings across your daily visitors and pageviews, pages, referrers, countries and device types.
- Added: groundwork for MainWP. A MainWP dashboard can now read a site’s visitors, pageviews, top pages and referrers over MainWP’s own signed connection, for an upcoming Vireo Analytics for MainWP add-on. Site owners can switch it off with the
vireo_mainwp_enabledfilter. - Added: the weekly email opens with a one-line summary of what changed since the week before.
- Added: themes and landing pages that skip wp_footer() can load the tracker with do_action( ‘vireo_print_tracking_script’ ).
- Added: Support and Rate links on the Plugins screen, a support-forum link in Settings, and a one-time review request on the Overview after two weeks of use, which you can dismiss for good.
- Fixed: importing from another analytics plugin added its numbers on top of the days Vireo had already counted. Imports now stop the day before Vireo’s own data begins, and the import screen says where. You can still include those days, with a warning that they’ll be counted twice.
- Fixed: the Search and Social source filters showed no referrers, and any source filter left «What changed» without its sources because of a database error.
- Fixed: referrers now land in the same group on the dashboard card and in the source filters. Hacker News, Product Hunt, Slack, Discord and Mastodon instances count as Social, and AI assistants have their own group.
- Fixed: visits from the Google app on Android show as «Google app» under Search, and other common Android apps (Gmail, LinkedIn, Reddit, Slack, Telegram) show by name.
- Fixed: bots that name themselves (Amazon, Claude and DeepSeek search bots, xAI, Kimi, Mistral, Mojeek and more) are counted in their own category instead of «Other bots», about 40 bots that were counted as visitors are now filtered, and Internet Explorer 11 visitors on Windows 7 are no longer mistaken for search engines. Categories are assigned as stats are saved, so earlier history keeps its old ones.
- Fixed: counts of one read correctly across the plugin («1 day», «1 view», «1 request»).
- Changed: days with a note get a pin on the traffic chart, so a spike carries its explanation without hovering.
- Changed: the countries card shows the map with the top ten under it, and the map shades every country with visitors, not only the top ten.
- Changed: the front page is called «Home» in «What changed» and the weekly email, matching Top pages, and referrers shown by name (ChatGPT, Gemini) show their site address underneath.
- Fixed: the import screen and first-run banner no longer offer a plugin whose tables are empty.
- Fixed: the AI crawler ratio shows a whole number from 10 up, and several small layout issues in Top referrers, the bot note and the roles setting.
- Fixed: the group totals in Top referrers (Search, AI assistants, Social, Referral) count every site in the range, not only the ten listed, so they match the source filters and the Search & AI tab.
- Security: a Plausible upload is capped by its unpacked size, loading the import screen can no longer cancel a running import, each import run keeps its own progress so two tabs can’t interfere, and long page paths or hosts in non-Latin scripts no longer make an import fail.
0.8.9
- Changed: Settings is split into tabs (General, Tracking, Email digest, Search Console & API, Import & export), and the dashboard into Overview, Search & AI, Page speed, and Issues & campaigns. The tab is kept in the URL, so reloads and shared links open on it.
- Changed: the import screen starts with the analytics plugins found on this site, each with its own button. Other sources sit below as secondary options.
- Fixed: after an import finished, the screen still offered «Start Import» next to a warning about running it twice, which read as if the first run had failed. It now says the import is done, with the date range and pageviews brought in, and running the same source again needs a confirmation. Jetpack gets the same overlap check as Google Analytics.
- Fixed: the import screen’s record count was wrong (it showed 180 for 90 days).
0.8.8
- Fixed: on a busy day with thousands of distinct pages or referrers, the database could reject the single statement that saved them, and after five tries that stretch of traffic was set aside instead of counted. Rows are now saved in batches of 500, still inside one transaction.
- Fixed: a database error early in a save could go unnoticed if a later query in the same step succeeded, so the buffer was deleted with some of its rows missing. Every failed query now stops the save and keeps the buffer for another try.
0.8.7
- Fixed: sites on WP Engine recorded no visitors. WP Engine’s network sends a
Cf-Verified-Bot: falseheader with every request, and Vireo treated any value in that header as a verified bot. It now counts as a bot only when the value istrue.
0.8.6
- Changed: Vireo Analytics is now developed and supported by RebelCode, the team behind WP RSS Aggregator and Spotlight.
0.8.5
- Added: a card for sites running WP RSS Aggregator. It counts the readers who click an aggregated item through to the original article, per feed source, and, for items imported as posts, the views each source’s posts get on your site.
- Added: a card for sites running Spotlight. It counts how often visitors open an Instagram post from a feed, follow a link from the post, press Follow or Load more, and on which page.
- Both start counting when Vireo detects the plugin, and can be switched off with the
vireo_track_wpraandvireo_track_spotlightfilters.
0.8.4
- Fixed: a post ID that matches no post could list one page twice. The tracker sends the post ID from the visitor’s browser, so a client can send any number; one that resolves to no post is now ignored and the view counts under the page’s address.
0.8.3
- Fixed: one visitor could add unlimited pageviews in a day. A crawler that runs scripts viewed the same archive pages almost ninety times each and put several hundred pageviews into one day’s report. Each visitor now counts for at most 5 views of a page and 50 views in total per day; anything past that is reported under filtered traffic as repeated views. Both limits can be changed with the
vireo_visitor_path_capandvireo_visitor_daily_capfilters. - Fixed: the front page could appear twice in the page lists and in What changed, once by its title and once as «/», because some views were recorded with its post ID and some without. Pages are now grouped by address.
- Fixed: comparisons for a range that ends today weighed part of a day against a whole one, so every page looked like it was losing traffic in the morning. The previous period is now scaled to the share of today that has passed.
0.8.2
- Corregido: dos búsquedas largas que empezaban con los mismos 190 caracteres se guardaban como una sola, y la segunda sobrescribía los clics y las impresiones de la primera. Ahora las búsquedas se distinguen por su texto completo. Al actualizar se vuelven a obtener una vez los últimos 90 días de datos de Search Console para que la separación se aplique al historial reciente.
- Cambiado: el botón de Search Console ahora dice «Traer los últimos 90 días». Trae la última semana al momento y el resto en segundo plano, algo que «ahora» ya no describía.
- Cambiado: las traducciones al japonés siguen la guía de estilo de WordPress en japonés en cuanto a espacios alrededor de palabras en inglés, números, dos puntos y paréntesis.
0.8.1
- Corregido: el enlace «Conectar Search Console» de la pantalla de estadísticas de una entrada abría Ajustes al principio de la página en lugar de en la sección de Search Console.
0.8.0
- Añadido: la pantalla de cada entrada muestra ahora las búsquedas por las que apareció en Google, con los clics y la posición media de cada una. Desde 2013 Google casi no pasa a los sitios web los términos de búsqueda orgánica, así que ningún plugin de analítica puede leerlos a partir de la propia visita. Search Console sigue teniéndolos, y esto los une a la entrada a la que llegaron.
- Añadido: la lista de búsquedas de todo el sitio en el Resumen indica la página que Google mostró para cada búsqueda.
- Corregido: el historial de Search Console se cortaba. Una extracción se detenía en 25 000 filas para todo el rango de fechas, y una extracción de 90 días en un sitio modesto llegaba justo a ese límite, así que se descartaban aproximadamente nueve de cada diez filas sin ningún mensaje. Las búsquedas principales se salvaban, porque Google ordena por clics, pero la cola larga y todo lo que se totalizaba a partir de ella, no. Ahora las extracciones leen todo lo que devuelve Google.
- Cambio: al actualizar Search Console se obtiene de inmediato la última semana y el resto del historial en segundo plano, de quince en quince días. Leer todo el historial en una sola petición tardaba más de un minuto una vez que ya no se descartaba nada, que es más de lo que se permite ejecutar a una página de administración en muchos alojamientos.
- Corregido: el ajuste de conservación de datos nunca eliminaba los datos de Search Console, así que se conservaban indefinidamente fuera cual fuese la conservación que eligieras.
Older versions are in changelog.txt, which also ships with the plugin.
