Changelog
What changed in every release, from each plugin's own changelog. The latest free version is 0.10.3 and the latest Pro version is 1.0.1.
Vireo Pro
Vireo Pro runs on top of the free plugin.
1.0.1
- Fixed: on sites using WP Rocket's JavaScript minification, Pro's front-end scripts could stay on an old copy after updates; they are now excluded from minification, as the free plugin's are.
- Fixed: the Freemius revenue set-up card on Vireo's Settings page never appeared, because the free plugin hid it along with other plugins' notices. Needs Vireo Analytics 0.10.3, which keeps Pro's notices.
- Changed: the "How many sites" answer now says what the plugin does: each WordPress install works out its own connected-sites allowance, and allowances are not pooled between installs.
- Requires Vireo Analytics 0.10.3 or newer.
1.0.0
- First release for sale.
- Licensing, updates and the account screen now run through Freemius; the old license-key card is gone.
- Shareable read-only dashboard links with expiry and password protection.
- Connected sites count toward your plan's sites: a licensed install can connect as many sites as the license has activations left (unlimited plans: 100 fair use).
- Fixed the weekly report's date range printing the next day on sites at UTC+12 and beyond.
- Traffic spike alerts now run: they listen on vireo_after_flush, which Vireo Analytics first fires in 0.10.2, and they read the site's own day rather than UTC.
- Revenue by landing page on the Revenue page: the page each buyer arrived on, with orders, revenue and conversion where entry pages were tracked.
- Funnels on the Goals page now show each step's visitors and step-to-step conversion for the week, the same numbers as
wp vireo funnel. - A revenue total for the last 7 days joins the Revenue page's top cards, which no longer wrap one card onto its own row; on a phone the sources table keeps the revenue column in view.
- The Goals page's "This week" now counts site days, like the Revenue page, instead of UTC days.
- Orders placed through WooCommerce's block checkout are now recorded; Pro only listened to the classic checkout before, so a block-checkout store showed no revenue.
- Translated into German, Spanish, French, Italian, Japanese, Dutch, Brazilian Portuguese, European Portuguese and Russian, the same languages as Vireo Analytics; Pro's strings load alongside the free plugin's.
- Requires Vireo Analytics 0.10.2 or newer.
Vireo Analytics
The free plugin, on WordPress.org.
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
- Fixed: two long searches that began with the same 190 characters were stored as one, and the second overwrote the first's clicks and impressions. Searches are now told apart by their full text. Updating refetches the last 90 days of Search Console data once so the split applies to recent history.
- Changed: the Search Console button now reads "Fetch the last 90 days". It fetches the last week straight away and the rest in the background, which "now" no longer described.
- Changed: Japanese translations follow the Japanese WordPress style guide for spacing around English words, numbers, colons and brackets.
0.8.1
- Fixed: the "Connect Search Console" link on a post's stats screen opened Settings at the top of the page instead of at the Search Console section.
0.8.0
- Added: each post's screen now shows the searches it appeared for in Google, with the clicks and average position for each. Google has passed almost no organic search terms to websites since 2013, so no analytics plugin can read them from the visit itself. Search Console still has them, and this joins them to the post they reached.
- Added: the site-wide search list on the Overview names the page Google showed for each search.
- Fixed: Search Console history was being cut off. A pull stopped at 25,000 rows for the whole date range, and a 90-day pull on one modest site hit that exactly, so roughly nine rows in ten were dropped without any message. The top searches survived, because Google sorts by clicks, but the long tail and anything totalled from it did not. Pulls now read everything Google returns.
- Changed: refreshing Search Console fetches the last week immediately and the rest of the history in the background, a fortnight at a time. Reading the full history in one request took over a minute once nothing was being dropped, which is longer than an admin page is allowed to run on many hosts.
- Fixed: Search Console data was never removed by the data retention setting, so it was kept indefinitely whatever retention you chose.