<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>HitKeep | Blog</title><description>Open-source privacy-first analytics for humans and approved AI assistants, self-hosted or in EU/US cloud.</description><link>https://hitkeep.com/</link><language>en</language><item><title>HitKeep 2.5.0: Web Vitals, Opportunities, And Subdirectory Installs</title><link>https://hitkeep.com/blog/hitkeep-2-5-0/</link><guid isPermaLink="true">https://hitkeep.com/blog/hitkeep-2-5-0/</guid><description>HitKeep 2.5.0 prepares opt-in Web Vitals reporting, evidence-backed Opportunity Recommendations, and subdirectory install support for operators who mount HitKeep below an existing site.

</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HitKeep 2.5.0 is in release-candidate review for &lt;a href=&quot;https://hitkeep.com/guides/analytics/web-vitals/&quot;&gt;Web Vitals analytics&lt;/a&gt; and &lt;a href=&quot;https://hitkeep.com/guides/analytics/opportunities/&quot;&gt;Opportunity Recommendations&lt;/a&gt;. The release candidate adds opt-in LCP, INP, CLS, FCP, and TTFB reporting beside traffic analytics, plus a saved recommendations inbox for setup gaps, traffic signals, search visibility, AI visibility, ecommerce activity, conversion signals, and performance issues backed by aggregate evidence already in HitKeep.&lt;/p&gt;
&lt;p&gt;It also hardens self-hosted deployments that mount HitKeep below an existing domain path, such as &lt;code dir=&quot;auto&quot;&gt;https://www.example.net/hitkeep/&lt;/code&gt;. Dashboard navigation, static assets, API calls, the API reference, tracker bundles, browser ingest, email links, share links, billing redirects, and OAuth callbacks now derive their public paths from &lt;code dir=&quot;auto&quot;&gt;HITKEEP_PUBLIC_URL&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The product promise is deliberately narrow: HitKeep shows privacy-preserving performance signals and evidence-backed recommendations. It does not collect Web Vitals attribution payloads, promise revenue lift, claim financial upside, or infer causal attribution.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/analytics-web-vitals.WZaJm9NL_Z1l95S4.webp&quot; alt=&quot;HitKeep Web Vitals report showing p75 metric cards, threshold bars, rating mix bars, filters, and the trend chart&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;Web Vitals cards show p75 values, thresholds, rating mix, and the selected metric trend without enabling Web Vitals by default.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/analytics-opportunities.D-McAhyz_27CyD8.webp&quot; alt=&quot;HitKeep Opportunities page showing prioritized recommendation cards with evidence, status filters, and a selected recommendation detail drawer&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;Opportunity cards use stable translation keys and cited aggregate evidence, so the same saved recommendation can render safely in every supported dashboard language.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;what-is-prepared&quot;&gt;What Is Prepared&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opt-in Web Vitals collection:&lt;/strong&gt; the default &lt;code dir=&quot;auto&quot;&gt;hk.js&lt;/code&gt; snippet stays lean. Sites load the same-origin &lt;code dir=&quot;auto&quot;&gt;hk-vitals.js&lt;/code&gt; split bundle only when Web Vitals are enabled in tracking settings or &lt;code dir=&quot;auto&quot;&gt;data-enable-web-vitals=&quot;true&quot;&lt;/code&gt; is present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web Vitals dashboard:&lt;/strong&gt; site teams can inspect p75 cards, threshold bars, rating mix, trends, searchable path selection, paginated page breakdowns, and browser, country, language, and device context for LCP, INP, CLS, FCP, and TTFB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy-preserving samples:&lt;/strong&gt; HitKeep stores metric, value, server-derived rating, normalized path, navigation type, session/page IDs, tracker source/version, and server receipt time. It strips query strings and hashes and does not store attribution/debug payloads, selectors, text, or resource URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle coverage:&lt;/strong&gt; Web Vitals samples are tenant-local and covered by site deletion, user deletion, archival, retention, takeout exports, and read-only MCP aggregate access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opportunity inbox:&lt;/strong&gt; every site can list saved recommendations, filter by status, open the evidence drawer, dismiss items, mark them done, and regenerate them when the user has &lt;code dir=&quot;auto&quot;&gt;site.manage_data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence-first generation:&lt;/strong&gt; deterministic detectors decide the candidate type, impact, confidence, score, status, route params, and evidence IDs. Web Vitals detectors can create Performance Opportunities from poor or needs-work metric evidence. AI is optional and can only decorate the detector-approved candidate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provider-agnostic AI model configuration:&lt;/strong&gt; self-hosted operators can configure their chosen provider, model, gateway route, timeout, and local budgets through &lt;code dir=&quot;auto&quot;&gt;HITKEEP_AI_*&lt;/code&gt; settings without dashboard-secret editing in this first slice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local budgets and audit records:&lt;/strong&gt; HitKeep enforces request and token caps before provider calls, records safe run metadata, stores lifecycle events, and avoids persisting raw prompts or raw provider payloads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Status visibility:&lt;/strong&gt; instance owners can see whether AI is enabled and configured, which provider/model label is active, whether the config is cloud-managed or self-hosted, current usage and cap state, and the last safe success/error category.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subdirectory install support:&lt;/strong&gt; operators can set &lt;code dir=&quot;auto&quot;&gt;HITKEEP_PUBLIC_URL&lt;/code&gt; to a path-prefixed URL. HitKeep serves the dashboard base href, app-owned static assets, API reference iframe, &lt;code dir=&quot;auto&quot;&gt;hk.js&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;hk-vitals.js&lt;/code&gt;, ingest routes, and generated public links below that prefix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Public-safe surfaces:&lt;/strong&gt; saved Opportunities appear in dashboard APIs, share mode, takeout exports, read-only MCP output, and the regular daily, weekly, or monthly email reports without exposing provider secrets or unrestricted tool execution. Web Vitals dashboard APIs and MCP tools return aggregate reporting data only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Localization-safe API:&lt;/strong&gt; customer-facing copy is stored as translation keys plus interpolation params. The API does not persist full English recommendation text as the durable contract.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;guardrails&quot;&gt;Guardrails&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Web Vitals collection is opt-in. HitKeep derives ratings on the server from standard thresholds, stores samples in the tenant analytics store, and keeps the tracker payload compact. The Web Vitals feature is for aggregate page-performance reporting, not user-level profiling or debugging traces.&lt;/p&gt;
&lt;p&gt;Opportunity Recommendations use aggregate evidence only. Traffic-source recommendations must cite source-specific counts, not total site pageviews. Setup suggestions need a clear page, event, goal, or funnel signal and are suppressed when matching configuration already exists.&lt;/p&gt;
&lt;p&gt;The validator rejects provider output that invents evidence IDs, adds trailing prose after JSON, uses removed money/upside params, references unsupported fields, or makes claims outside the detector contract.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;upgrade-guidance&quot;&gt;Upgrade Guidance&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Web Vitals are off by default. Enable them from &lt;strong&gt;Site Settings &gt; Tracking&lt;/strong&gt; for a site, or add &lt;code dir=&quot;auto&quot;&gt;data-enable-web-vitals=&quot;true&quot;&lt;/code&gt; to that site’s tracking snippet. The main tracker only loads &lt;code dir=&quot;auto&quot;&gt;hk-vitals.js&lt;/code&gt; from the same origin when the opt-in flag is present.&lt;/p&gt;
&lt;p&gt;For subdirectory installs, set &lt;code dir=&quot;auto&quot;&gt;HITKEEP_PUBLIC_URL&lt;/code&gt; to the full external URL, including the path prefix, and keep the reverse proxy route aligned with that prefix:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_PUBLIC_URL&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;https://www.example.net/hitkeep/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In path-prefix mode, public app and API routes are served below the configured prefix. Root &lt;code dir=&quot;auto&quot;&gt;/healthz&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;/readyz&lt;/code&gt; remain available for local probes.&lt;/p&gt;
&lt;p&gt;Self-hosted instances can leave AI disabled. With &lt;code dir=&quot;auto&quot;&gt;HITKEEP_AI_ENABLED=false&lt;/code&gt;, HitKeep still runs deterministic detector logic and stores recommendations that do not need provider enrichment.&lt;/p&gt;
&lt;p&gt;To enable provider enrichment on self-hosted instances, configure the HitKeep provider/model route, timeout, request cap, token cap, and budget window through &lt;code dir=&quot;auto&quot;&gt;HITKEEP_AI_*&lt;/code&gt; variables. Configure provider credentials with the selected goAI provider’s native environment variables.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_AI_ENABLED&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_AI_PROVIDER&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;openai&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_AI_MODEL&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;your-json-capable-model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;provider_key_from_your_secret_store&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_AI_REQUEST_LIMIT&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_AI_TOKEN_LIMIT&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;100000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_AI_BUDGET_WINDOW&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1440&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For OpenAI-compatible gateways, set &lt;code dir=&quot;auto&quot;&gt;HITKEEP_AI_PROVIDER=openai-compatible&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;HITKEEP_AI_BASE_URL&lt;/code&gt; for the gateway endpoint. Set &lt;code dir=&quot;auto&quot;&gt;HITKEEP_AI_API_KEY&lt;/code&gt; only if that gateway requires a bearer token. See &lt;a href=&quot;https://hitkeep.com/guides/admin/ai-model-configuration/&quot;&gt;AI Model Configuration&lt;/a&gt; for model-selection guidance, setup examples, token-budget sizing, and the System Status fields operators should verify before release.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;out-of-scope&quot;&gt;Out Of Scope&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This release candidate does not add Web Vitals attribution/debug fields, sampling controls, external performance vendors, share-link Web Vitals reports, dashboard-secret editing for provider keys, customer-defined detectors, write-capable MCP tools, or financial upside predictions. Ecommerce analytics can still report factual revenue metrics, but Opportunity Recommendations do not position themselves around money claims.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;read-more&quot;&gt;Read More&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/analytics/web-vitals/&quot;&gt;Web Vitals Analytics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/analytics/opportunities/&quot;&gt;Opportunity Recommendations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/admin/ai-model-configuration/&quot;&gt;AI Model Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/reference/configuration/#optional-ai-model-configuration&quot;&gt;AI model configuration reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/reference/configuration/#public-url-path-prefixes&quot;&gt;Public URL path prefixes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/tracking/tracker-architecture/&quot;&gt;Tracker Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/admin/system-administration/&quot;&gt;System Status and Settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/admin/permissions/&quot;&gt;Roles and Permissions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/integrations/mcp/&quot;&gt;MCP Analytics Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/data/takeout/&quot;&gt;Open Exports and Takeout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>HitKeep 2.4.2: Site Export Dropdown Fix</title><link>https://hitkeep.com/blog/hitkeep-2-4-2/</link><guid isPermaLink="true">https://hitkeep.com/blog/hitkeep-2-4-2/</guid><description>HitKeep 2.4.2 is a focused dashboard patch for site export dropdown actions. Site-specific takeout downloads now reliably start when a user chooses an alternate export format.

</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HitKeep 2.4.2 is a focused patch release for dashboard exports. It fixes the site-specific export format dropdown so choosing CSV, XLSX, Parquet, JSON, or NDJSON starts the matching site takeout download.&lt;/p&gt;
&lt;p&gt;The all-sites export dropdown already worked. This patch keeps that behavior unchanged and tightens the site-row path that calls &lt;code dir=&quot;auto&quot;&gt;/api/sites/{id}/takeout?format=&amp;#x3C;format&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;aside aria-label=&quot;Release pipeline note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Release pipeline note&lt;/p&gt;&lt;div&gt;&lt;p&gt;This patch is intentionally small and follows 2.4.1 quickly. It fixes the site export menu bug and exercises the release pipeline with a narrow change.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;what-changed&quot;&gt;What changed&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Site export menu actions:&lt;/strong&gt; site export dropdown items stay bound to the intended site row while the menu is open.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternate formats:&lt;/strong&gt; CSV, XLSX, Parquet, JSON, and NDJSON remain available for site-specific takeout downloads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global exports unchanged:&lt;/strong&gt; the all-sites export dropdown still calls &lt;code dir=&quot;auto&quot;&gt;/api/user/takeout?format=&amp;#x3C;format&gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regression coverage:&lt;/strong&gt; focused unit coverage checks repeated site menu reads, and seeded Playwright coverage verifies all-sites and per-site JSON downloads in the German dashboard at the reported desktop viewport.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;upgrade-guidance&quot;&gt;Upgrade guidance&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Upgrade to 2.4.2 if users rely on site-specific exports from the Import &amp;#x26; Export page.&lt;/p&gt;
&lt;p&gt;No backend export schema, takeout endpoint, permission model, or supported format changes are included in this patch.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;read-more&quot;&gt;Read more&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/data/takeout/&quot;&gt;Open Exports and Takeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PascaleBeier/hitkeep/releases/tag/v2.4.2&quot;&gt;GitHub Release v2.4.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/blog/hitkeep-2-4-1/&quot;&gt;HitKeep 2.4.1 release notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>HitKeep 2.4.1: MCP Reliability And Go Security Fixes</title><link>https://hitkeep.com/blog/hitkeep-2-4-1/</link><guid isPermaLink="true">https://hitkeep.com/blog/hitkeep-2-4-1/</guid><description>HitKeep 2.4.1 fixes Streamable HTTP initialization for reverse-proxied MCP deployments and updates release builds to Go 1.26.3 so the shipped artifacts include the latest standard-library security fixes.

</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HitKeep 2.4.1 is a focused patch release for operators who enable the optional MCP server behind a reverse proxy. It also updates HitKeep release builds to Go 1.26.3 after &lt;code dir=&quot;auto&quot;&gt;govulncheck&lt;/code&gt; reported called vulnerabilities in the Go 1.26.2 standard library.&lt;/p&gt;
&lt;p&gt;The release fixes MCP Streamable HTTP initialization when HitKeep listens on loopback, such as &lt;code dir=&quot;auto&quot;&gt;127.0.0.1:8080&lt;/code&gt;, and a reverse proxy exposes the public &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt; endpoint. Valid MCP clients should now initialize through the configured public host instead of receiving a plain-text host-header &lt;code dir=&quot;auto&quot;&gt;403&lt;/code&gt; before HitKeep can validate the bearer token.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-changed&quot;&gt;What changed&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reverse-proxied MCP initialization:&lt;/strong&gt; HitKeep now validates MCP request hosts against &lt;code dir=&quot;auto&quot;&gt;HITKEEP_PUBLIC_URL&lt;/code&gt; before handing the request to the MCP Go SDK.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Public host support:&lt;/strong&gt; deployments that publish &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt; at a public hostname can initialize MCP clients while keeping HitKeep bound to loopback.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local development preserved:&lt;/strong&gt; loopback hosts such as &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;127.0.0.1&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;::1&lt;/code&gt; continue to work for local MCP clients.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host validation kept explicit:&lt;/strong&gt; unexpected hosts still receive &lt;code dir=&quot;auto&quot;&gt;403 Forbidden&lt;/code&gt;; missing or invalid bearer tokens on valid hosts receive &lt;code dir=&quot;auto&quot;&gt;401 Unauthorized&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No MCP schema changes:&lt;/strong&gt; MCP tools, resources, bearer token format, API-client scopes, and dashboard API behavior are unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go 1.26.3 release builds:&lt;/strong&gt; Linux binaries, Docker images, and CI now use Go 1.26.3. This clears the standard-library &lt;code dir=&quot;auto&quot;&gt;govulncheck&lt;/code&gt; findings that affected Go 1.26.2.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;upgrade-guidance&quot;&gt;Upgrade guidance&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Upgrade to 2.4.1 if you enable MCP and expose HitKeep through a reverse proxy, or if you want release artifacts built with Go 1.26.3.&lt;/p&gt;
&lt;p&gt;Make sure &lt;code dir=&quot;auto&quot;&gt;HITKEEP_PUBLIC_URL&lt;/code&gt; matches the externally visible origin:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_PUBLIC_URL&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;https://analytics.example.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_MCP_ENABLED&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HITKEEP_MCP_PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The simplest proxy setup preserves the original &lt;code dir=&quot;auto&quot;&gt;Host&lt;/code&gt; header. If your proxy rewrites the upstream &lt;code dir=&quot;auto&quot;&gt;Host&lt;/code&gt; to a loopback address, configure explicit &lt;code dir=&quot;auto&quot;&gt;HITKEEP_TRUSTED_PROXIES&lt;/code&gt; CIDRs and forward the public host with &lt;code dir=&quot;auto&quot;&gt;X-Forwarded-Host&lt;/code&gt; or the standard &lt;code dir=&quot;auto&quot;&gt;Forwarded&lt;/code&gt; header.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;read-more&quot;&gt;Read more&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/integrations/mcp/&quot;&gt;Official MCP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/installation/trusted-proxies/&quot;&gt;Trusted Proxies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PascaleBeier/hitkeep/releases/tag/v2.4.1&quot;&gt;GitHub Release v2.4.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/blog/hitkeep-2-4-0/&quot;&gt;HitKeep 2.4.0 release notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>HitKeep 2.4.0: Imports, Search Console, MCP Reporting, Server-Side Ingest, And Dutch Localization</title><link>https://hitkeep.com/blog/hitkeep-2-4-0/</link><guid isPermaLink="true">https://hitkeep.com/blog/hitkeep-2-4-0/</guid><description>HitKeep 2.4.0 ships Plausible and Simple Analytics imports, Google Search Console integration, read-only Search Console MCP reporting, server-side pageview and event ingest, Dutch dashboard and email localization, and focused reliability and UX fixes.

</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HitKeep 2.4.0 was published on May 6, 2026. It ships historical imports for Plausible and Simple Analytics, Google Search Console Search Analytics import, read-only Search Console reporting through MCP, authenticated server-side tracking with original timestamp and visitor IP context, Dutch dashboard and email localization, and focused reliability and UX fixes from the 2.4.0 changelog.&lt;/p&gt;
&lt;p&gt;The import system is aggregate-first. Plausible exports and Simple Analytics datapoints are migration history, not full-fidelity native HitKeep sessions. Imported data appears in compatible dashboard and event reports, while realtime, hourly, and relationship-heavy filtered views keep native data separate and explain when imported rows are excluded.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-shipped-in-240&quot;&gt;What shipped in 2.4.0&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Importables framework:&lt;/strong&gt; a provider model for future importers, with Plausible and Simple Analytics as the first providers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plausible ZIP and CSV input:&lt;/strong&gt; upload one Plausible export ZIP or loose CSV files whose headers match supported Plausible schemas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple Analytics datapoints input:&lt;/strong&gt; upload any CSV whose header matches the Simple Analytics &lt;strong&gt;All&lt;/strong&gt; datapoints export.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mandatory validation:&lt;/strong&gt; validation scans staged files row by row and returns a manifest before analytics rows are committed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Historical dashboard coverage:&lt;/strong&gt; imported traffic, page, source, device, location, and provider-specific dimension aggregates appear in compatible daily and monthly reports.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Imported event coverage:&lt;/strong&gt; Plausible custom events and URL-style properties appear in compatible Events views.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Search Console integration:&lt;/strong&gt; connect a team to Google Search Console with read-only OAuth, map a site to a Search Console property, and import finalized Search Analytics aggregates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search Console drilldown:&lt;/strong&gt; authenticated site dashboards show clicks, impressions, CTR, average position, trends, top queries, top pages, and country/device breakdowns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search Console MCP reporting:&lt;/strong&gt; approved MCP clients can check Search Console mapping and sync status, then read imported overview, series, query, page, country, and device aggregates for scoped sites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLI and REST API:&lt;/strong&gt; the dashboard flow uses the same chunked upload, validation, start, status, list, and delete lifecycle as the CLI and API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import history and deletion:&lt;/strong&gt; completed imports can be inspected and deleted, including their imported aggregate rows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server-side pageview and event ingest:&lt;/strong&gt; scoped API clients can send trusted pageviews and custom events with an explicit RFC3339 timestamp and transient visitor IP context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server-to-server request behavior:&lt;/strong&gt; the server-side ingest endpoints do not require browser &lt;code dir=&quot;auto&quot;&gt;Origin&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;Referer&lt;/code&gt; headers, use the ingest rate limiter, and forward safely from follower nodes to the leader in clustered deployments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dutch dashboard and email localization:&lt;/strong&gt; Dutch (&lt;code dir=&quot;auto&quot;&gt;nl&lt;/code&gt;) becomes selectable in user preferences, auto-detects from Dutch browser and request languages, and covers the localized transactional and analytics report emails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliability and UX fixes:&lt;/strong&gt; 2.4.0 also optimizes the healthcheck endpoint, sets the Docker healthcheck interval to 30 seconds, consolidates frontend and auth bootstrap behavior, refreshes the May IP location data, clarifies server-side pageview copy, unifies copy actions for team, site, and user IDs, and consolidates import and export UI behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;google-search-console-integration&quot;&gt;Google Search Console Integration&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Search Console import is for teams that want organic search query data beside HitKeep’s normal site analytics without exposing that data through public dashboards.&lt;/p&gt;
&lt;p&gt;Team owners and admins connect Google Search Console through read-only OAuth. HitKeep stores the team connection, lists available Search Console properties, and lets an admin map one property to a HitKeep site. Viewers can see the mapping state, but they cannot connect, map, unmap, disconnect, or request syncs.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/integration-google-search-console.Mkz0Ix7k_2mRh0l.webp&quot; alt=&quot;HitKeep Google Search Console integration page with connected account, property mapping, sync status, and manual sync controls&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;The integration page keeps connection, property mapping, and sync status in the same team-scoped workflow.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The import uses Google’s official generated Search Console client behind HitKeep’s own adapter. It requests the read-only Search Console scope and imports finalized aggregate Search Analytics rows. Tokens, OAuth codes, client secrets, and raw Google payloads stay out of API responses, logs, audits, seed data, exports, and public share surfaces.&lt;/p&gt;
&lt;p&gt;Sync is tenant-scoped. A manual sync request should give immediate feedback in the dashboard, while the worker imports rows through the same in-process runtime used by self-hosted and cloud deployments. Recurring syncs recheck recent completed days because Search Console data can settle after initial availability.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/analytics-search-console.CLlt4ZPd_XO4Ai.webp&quot; alt=&quot;HitKeep Search Console drilldown showing clicks, impressions, CTR, average position, query trends, pages, countries, and devices&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;Search Console reports stay inside authenticated dashboards and are excluded from share-mode dashboards.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The report surface is aggregate-first: overview metrics, daily series, top queries, top pages, and country/device breakdowns. It does not claim query-to-session attribution because Search Console does not provide that relationship. Use GA4 or another attribution system if your workflow depends on connecting individual search queries to sessions or conversions.&lt;/p&gt;
&lt;p&gt;The optional &lt;a href=&quot;https://hitkeep.com/guides/integrations/mcp/&quot;&gt;HitKeep MCP server&lt;/a&gt; also reads the imported Search Console rows for approved assistants and internal reporting tools. Two read-only tools cover the workflow: &lt;code dir=&quot;auto&quot;&gt;hitkeep_get_search_console_status&lt;/code&gt; reports mapping state, property URI, safe permission level, sync state, imported date range, and attention reason; &lt;code dir=&quot;auto&quot;&gt;hitkeep_get_search_console&lt;/code&gt; returns imported overview and daily series by default, with query, page, country, and device sections only when requested.&lt;/p&gt;
&lt;p&gt;MCP does not call Google live, refresh OAuth credentials, or trigger Search Console syncs. If the last sync failed or needs attention, MCP can still return older imported rows with warnings such as &lt;code dir=&quot;auto&quot;&gt;search_console_sync_failed&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;search_console_sync_needs_attention&lt;/code&gt;, or requested-range warnings. Healthy reports return an empty &lt;code dir=&quot;auto&quot;&gt;warnings&lt;/code&gt; array.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;server-side-tracking&quot;&gt;Server-Side Tracking&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;2.4.0 makes server-side tracking a first-class ingest path for log replay, edge workers, backend services, and no-JavaScript collection. The API-client-only endpoints accept one pageview or custom event at a time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;POST /api/ingest/server/pageview&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;POST /api/ingest/server/event&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The submitted URL resolves the HitKeep site by hostname. The API client still needs &lt;code dir=&quot;auto&quot;&gt;site.manage_data&lt;/code&gt; for that site, so a token scoped to one site cannot write records for another domain.&lt;/p&gt;
&lt;p&gt;Each record can carry the original RFC3339 timestamp from the log source. HitKeep stores that timestamp as the analytics time, which means replayed records land in the correct daily and monthly buckets instead of using the time the import worker happened to send the request.&lt;/p&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;visitor_ip&lt;/code&gt; field is trusted transient context. HitKeep uses it for IP exclusions, spam filtering, and pageview geolocation, then stores the derived analytics fields rather than keeping the visitor IP on the hit or event record.&lt;/p&gt;
&lt;p&gt;These endpoints are meant for server-to-server clients. They do not require browser &lt;code dir=&quot;auto&quot;&gt;Origin&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;Referer&lt;/code&gt; headers, and they use the ingest rate limiter instead of the normal dashboard API limiter because log forwarders and edge workers often send bursts from one IP. In clustered deployments, follower nodes forward these requests to the leader before authentication and persistence.&lt;/p&gt;
&lt;p&gt;2.4.0 does not add a public batch request format. The HTTP contract stays one record per request for now, while the existing NSQ and DuckDB write path batches persistence internally.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;imports-page&quot;&gt;Imports Page&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The Imports page lives with the selected site’s analytics workflow. It is available to users with &lt;code dir=&quot;auto&quot;&gt;site.manage_data&lt;/code&gt;, which includes site owners, site admins, effective team owners and admins, instance owners, and instance admins.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/imports-plausible-provider.CHx4-v6B_ZGzwmm.webp&quot; alt=&quot;HitKeep Imports page showing the first step where a site-scoped importer can be selected&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1024&quot;&gt;&lt;figcaption&gt;The import flow starts by choosing the site-scoped importer.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;After choosing Plausible, HitKeep accepts the normal Plausible export ZIP directly. If a team already unpacked the archive, the same flow accepts loose CSV files whose headers match supported Plausible export schemas. Partial imports are allowed when at least one recognized dataset validates.&lt;/p&gt;
&lt;p&gt;After choosing Simple Analytics, HitKeep expects a CSV with the &lt;strong&gt;All&lt;/strong&gt; datapoints header from the Simple Analytics export page. Use the All export rather than a single report export so HitKeep can validate the pageview rows, dates, paths, referrers, devices, countries, and UTM source data together. HitKeep uses the selected site domain, not the filename, to suppress self-referrers from imported source reports.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;validation-before-commit&quot;&gt;Validation Before Commit&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Validation is mandatory. It does not write final analytics rows. It stages the files, scans each CSV row, checks headers and values, computes the date range, records skipped rows, and produces a compact manifest for review.&lt;/p&gt;
&lt;p&gt;The Plausible manifest shows accepted files, ignored files, missing optional files, dataset counts, rows accepted and skipped, estimated pageviews and events, event names, property keys, and warnings when Plausible aggregates cannot prove a relationship.&lt;/p&gt;
&lt;p&gt;The Simple Analytics manifest shows the accepted datapoints CSV, the imported date range, accepted and skipped rows, estimated traffic metrics, and unsupported datapoint types. That review step is important because Simple Analytics exports do not contain every native HitKeep dimension.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/imports-plausible-zip-review._1zRaegh_k88Cr.webp&quot; alt=&quot;HitKeep Plausible validation manifest with accepted rows, datasets, event coverage, and warnings&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1024&quot;&gt;&lt;figcaption&gt;The validation manifest gives site admins a concrete review step before the import starts.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;compatible-historical-reports&quot;&gt;Compatible Historical Reports&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;After confirmation, HitKeep imports the rows in small transactions and tags them with the import id, provider, source file, date, dimension or event key, and metrics. The UI updates import history as the job moves through validation, running, completed, failed, and deleted states.&lt;/p&gt;
&lt;p&gt;Imported Plausible traffic is daily-grain aggregate data. It is included where the query can use it safely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;visitors, visits, pageviews, bounces, visit duration, pages per session&lt;/li&gt;
&lt;li&gt;pages, entry pages, exit pages, sources, devices, browsers, operating systems, and countries&lt;/li&gt;
&lt;li&gt;daily and monthly chart buckets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Imported Simple Analytics traffic is built from the All datapoints CSV. It is included in compatible historical reports for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;visitors, visits, pageviews, and visit duration totals&lt;/li&gt;
&lt;li&gt;pages, sources, devices, countries, browser names, language codes, and UTM source when those fields exist in the CSV&lt;/li&gt;
&lt;li&gt;daily and monthly chart buckets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Imported rows are excluded from realtime and hourly views because the migration exports do not contain native HitKeep event streams. If a filter requires raw session relationships the source export cannot prove, HitKeep returns native data and an &lt;code dir=&quot;auto&quot;&gt;imported_excluded&lt;/code&gt; reason instead of fabricating precision.&lt;/p&gt;
&lt;p&gt;Validation also checks for native HitKeep data already present in the imported date range. The default policy is &lt;code dir=&quot;auto&quot;&gt;skip_native_day&lt;/code&gt;: overlapping traffic days and matching event/day pairs are reported in the manifest and skipped during import so historical rows do not double count data HitKeep has already tracked.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;events-and-source-limits&quot;&gt;Events And Source Limits&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Plausible custom events are imported into compatible Events reports. Event names, event totals, event visitors, and property breakdowns are available when the CSV data proves the relationship. Plausible system events that match HitKeep automatic events, such as &lt;code dir=&quot;auto&quot;&gt;Outbound Link: Click&lt;/code&gt;, are normalized to HitKeep names like &lt;code dir=&quot;auto&quot;&gt;outbound_click&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Simple Analytics imports focus on pageview history. HitKeep imports browser and language breakdowns when the datapoints CSV includes &lt;code dir=&quot;auto&quot;&gt;browser_name&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;lang_language&lt;/code&gt;, but it does not invent bounce counts, native HitKeep events, goals, funnels, ecommerce activity, or conversion relationships from the export. Unsupported datapoint types are reported during validation so the site admin sees the coverage before importing.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/imports-plausible-events-report.mS4gOKqh_Z2MwQQ.webp&quot; alt=&quot;HitKeep Events dashboard showing imported Plausible outbound link events with a URL property breakdown&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;1024&quot;&gt;&lt;figcaption&gt;Imported Plausible events appear in the Events dashboard, including URL property breakdowns where the export supports them.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;For Plausible property files that do not include an event name, HitKeep imports the property aggregate as unattributed coverage and shows a warning in the validation manifest. Those rows no longer inflate queryable event totals. The review step separates queryable custom events from preserved custom property aggregates, and the Events dashboard explains that Plausible exports do not contain event-level source, browser, device, country, or language relationships.&lt;/p&gt;
&lt;p&gt;Event goals with matching imported Plausible custom events include imported visitors as historical conversions where aggregate math is safe. Filtered, comparison, hourly, and audience-dimension views continue to show explicit imported-data limitation reasons instead of synthesizing relationships the export cannot prove.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;cli-and-api&quot;&gt;CLI And API&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The dashboard uses the same resumable upload protocol as the CLI and REST API. That matters for large exports and repeatable operations, especially self-hosted instances with long-lived historical data. Imports now run through a restart-recoverable in-process runner: queued or interrupted jobs with staged files are picked back up on startup, while jobs whose staged files are missing fail with a clear error.&lt;/p&gt;
&lt;p&gt;The CLI reuses &lt;code dir=&quot;auto&quot;&gt;HITKEEP_PUBLIC_URL&lt;/code&gt; when it is already set, and otherwise talks to &lt;code dir=&quot;auto&quot;&gt;http://localhost:8080&lt;/code&gt;. Use &lt;code dir=&quot;auto&quot;&gt;--url&lt;/code&gt; only when importing into a remote instance from another machine.&lt;/p&gt;
&lt;p&gt;For Plausible, validate and import the export ZIP:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HITKEEP_API_TOKEN&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;hk_api_...&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plausible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plausible-export.zip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plausible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plausible-export.zip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--wait&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Loose Plausible CSV files and export directories work from the CLI too:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plausible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imported_visitors.csv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imported_custom_events.csv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plausible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--dir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./plausible-export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--wait&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For Simple Analytics, validate and import the All datapoints CSV:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;simpleanalytics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;simple-analytics-export.csv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;simpleanalytics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;simple-analytics-export.csv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--wait&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The lifecycle commands are:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--import-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;import-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--wait&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--import-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;import-id&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;site-id&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--import-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;import-id&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The REST API exposes the same flow: list importers, create upload, upload file chunks, validate, start, fetch status, list history, and delete. See the &lt;a href=&quot;https://hitkeep.com/api/operations/tags/imports/&quot;&gt;Imports API reference&lt;/a&gt; for the endpoint list.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;built-for-large-sources&quot;&gt;Built For Large Sources&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The Plausible and Simple Analytics importers stream work row by row. They do not call &lt;code dir=&quot;auto&quot;&gt;ParseMultipartForm&lt;/code&gt;, do not hold full CSV files in memory, and do not build an in-memory manifest of every row. Plausible ZIP files are staged on disk, recognized entries are scanned sequentially, and loose CSV files are scanned sequentially.&lt;/p&gt;
&lt;p&gt;The default staged import limit is 100 GiB and can be changed with &lt;code dir=&quot;auto&quot;&gt;HITKEEP_IMPORT_MAX_STAGE_BYTES&lt;/code&gt;. Import upload requests use the normal API rate limiter, so operators only have one authenticated API budget to tune.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;read-more&quot;&gt;Read More&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/vs/plausible/&quot;&gt;Plausible comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/vs/simple-analytics/&quot;&gt;Simple Analytics comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/integrations/google-search-console/&quot;&gt;Google Search Console integration guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/integrations/mcp/&quot;&gt;Official MCP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/data/import-plausible/&quot;&gt;Plausible import guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/data/import-simple-analytics/&quot;&gt;Simple Analytics import guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/tracking/server-side-tracking/&quot;&gt;Server-side tracking and historical replay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/analytics/events/&quot;&gt;Event Analytics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/reference/configuration/#imports-apisitesimports/&quot;&gt;Configuration Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/api/operations/tags/imports/&quot;&gt;Imports API reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PascaleBeier/hitkeep/releases&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PascaleBeier/hitkeep/releases/tag/v2.4.0&quot;&gt;GitHub Release v2.4.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>HitKeep 2.3.1: Clearer System Status For Backups, Workers, And Rejected Traffic</title><link>https://hitkeep.com/blog/hitkeep-2-3-1/</link><guid isPermaLink="true">https://hitkeep.com/blog/hitkeep-2-3-1/</guid><description>HitKeep 2.3.1 is a small operational reliability patch for 2.3.0. It makes System Status more explicit about backups, worker health, spam drops, rejected traffic, and managed cloud status.

</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HitKeep 2.3.1 tightens the operational visibility added in 2.3.0. It is a small patch release for instance owners and cloud operators who rely on System Status to answer a simple question: is the instance healthy right now?&lt;/p&gt;
&lt;p&gt;The release does not add a new analytics surface. It makes existing status data clearer for backups, worker connectivity, spam filtering, rejected ingest requests, and managed cloud operations.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-changed&quot;&gt;What changed&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Backup worker status:&lt;/strong&gt; System Status now reports backup success, failures, recent failure count, last error, and next run time from the live backup worker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker health:&lt;/strong&gt; leader instances now surface degraded NSQ worker connectivity instead of looking healthy when the producer is unavailable or failing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spam and rejection counters:&lt;/strong&gt; dropped spam hits, dropped spam events, rejected pageview ingest requests, rejected event ingest requests, and rejected AI fetch requests now increment system counters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Managed cloud status link:&lt;/strong&gt; managed cloud admin settings now link directly to &lt;a href=&quot;https://status.hitkeep.com&quot;&gt;status.hitkeep.com&lt;/a&gt; for hosted incident status.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintenance refreshes:&lt;/strong&gt; the release also includes Go dependency updates and refreshed dashboard screenshots.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/admin-system-status.C40SWcBN_ZkQaFi.webp&quot; alt=&quot;HitKeep System Status page showing health, runtime, enabled features, storage, tenant databases, and refreshable status cards&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;HitKeep 2.3.1 makes the System Status data behind this view more complete for operational checks.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;upgrade-guidance&quot;&gt;Upgrade guidance&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;All 2.3.0 operators should upgrade to 2.3.1. The update is especially useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;managed cloud deployments&lt;/li&gt;
&lt;li&gt;instances using automatic S3 or filesystem backups&lt;/li&gt;
&lt;li&gt;high-traffic self-hosted instances where rejected or spam traffic should be visible&lt;/li&gt;
&lt;li&gt;clustered deployments where worker health needs to be explicit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the normal release artifacts from GitHub. There are no extra migration steps for this patch.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;read-more&quot;&gt;Read more&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/admin/system-administration/&quot;&gt;System Status and Settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/tracking/spam-filtering/&quot;&gt;Bot and Spam Filtering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/blog/hitkeep-2-3-0/&quot;&gt;HitKeep 2.3.0 release post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/changelog/&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PascaleBeier/hitkeep/releases/tag/v2.3.1&quot;&gt;GitHub Release v2.3.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>HitKeep 2.3.0: MCP, WordPress, More Events, Installation &amp; Activation Center</title><link>https://hitkeep.com/blog/hitkeep-2-3-0/</link><guid isPermaLink="true">https://hitkeep.com/blog/hitkeep-2-3-0/</guid><description>HitKeep 2.3.0 helps teams confirm live tracking, guide new accounts to first value, monitor user activation, connect WordPress, capture automatic outbound/download/form events, expose read-only MCP analytics, operate instances from System Status, and warn users before dashboard sessions expire.

</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;HitKeep 2.3.0 is built around the Installation &amp;#x26; Activation Center: HitKeep now tells you whether tracking is actually live, guides new users to their first value, and lets instance owners see which teams and sites are active.&lt;/p&gt;
&lt;p&gt;The activation work ships with the rest of the 2.3.0 release: read-only MCP analytics access, a first-party WordPress plugin, automatic outbound click, file download, and form submit events, a dedicated System Status area for operations and audit visibility, and a warning before dashboard sessions expire. The release keeps to HitKeep’s existing shape: one tracker, one event pipeline, one permission model, and the same single-binary runtime for cloud and self-hosted deployments.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-shipped&quot;&gt;What shipped&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live Tracking Verifier:&lt;/strong&gt; Site Settings now shows whether tracking is waiting, live, dormant, or receiving traffic from a mismatched hostname.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud onboarding checklist:&lt;/strong&gt; the dashboard computes setup progress from real product state instead of asking users to tick fake boxes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instance owner Activation view:&lt;/strong&gt; System Status now shows which teams and sites are live, waiting, dormant, or missing recent automatic events.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracker metadata hooks:&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;hk.js&lt;/code&gt; reports itself as the source by default, with snippet attributes for WordPress and future SDK versions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read-only MCP analytics access:&lt;/strong&gt; approved assistants and internal tools can query scoped aggregate analytics without dashboard cookies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;First-party WordPress plugin:&lt;/strong&gt; WordPress sites can install the normal HitKeep tracker without editing theme templates or adding a tag manager.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic tracker events:&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;hk.js&lt;/code&gt; records outbound clicks, file downloads, and form submissions through the existing event pipeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Status operations:&lt;/strong&gt; instance owners and admins get health, storage, tenant footprint, backup, spam filter, mail test, and audit visibility in one area.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session expiry warning:&lt;/strong&gt; dashboard users get a clear warning and stay-signed-in action before their session expires.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;installation--activation-center&quot;&gt;Installation &amp;#x26; Activation Center&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The new verifier card lives in Site Settings → Tracking. It shows first and last hit timestamps, last event, detected hostname, last automatic event, tracker source, tracker version, and a refresh action. New installs poll briefly while waiting for the first accepted hit, then flip to live when data arrives.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/feature-site-tracking.C9X7atE9_Z1W0ed7.webp&quot; alt=&quot;HitKeep Site Settings tracking verifier showing live tracking status, first hit, last hit, detected hostname, automatic event, and tracker source&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;The Live Tracking Verifier gives site owners a direct answer to the first install question: is tracking actually live?&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The dashboard checklist uses the same operational state. Creating a site, receiving the first hit, seeing automatic events, inviting a teammate, and scheduling reports complete automatically when the underlying product state exists.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/dashboard-overview.C312X7P7_ZjSS85.webp&quot; alt=&quot;HitKeep dashboard onboarding checklist showing completed setup steps and one remaining scheduled report action&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;The onboarding checklist is compact and dismissible, so new users know the next useful action without a wizard.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;For operators, System Status now includes an Activation tab. Instance owners can see team, owner email, site domain, activation status, first and last hit, last event, and 24-hour/7-day aggregate counts. The table is intentionally operational: no IPs, user agents, paths, session IDs, raw referrers, or visitor journeys.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/admin-system-activation.qWpxXAo1_1jwikU.webp&quot; alt=&quot;HitKeep System Status Activation tab showing team and site activation statuses with aggregate hit and event counts&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;Instance owners can spot live, waiting, and dormant users without opening tenant databases or impersonating users.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;mcp-for-governed-analytics-access&quot;&gt;MCP for governed analytics access&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;HitKeep now includes an optional &lt;a href=&quot;https://hitkeep.com/guides/integrations/mcp/&quot;&gt;MCP server&lt;/a&gt; on the main HTTP server. It is built for teams that want approved assistants or internal tools to answer analytics questions through HitKeep’s permission model.&lt;/p&gt;
&lt;p&gt;It is disabled by default. When enabled, it mounts at &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt; and accepts existing API client bearer tokens. It does not accept dashboard cookies.&lt;/p&gt;
&lt;p&gt;The v1 MCP surface is intentionally read-only. Assistants and internal reporting tools can list visible sites, fetch aggregate overview metrics, inspect event breakdowns, query ecommerce summaries, read AI visibility analytics, and fetch HitKeep docs as Markdown.&lt;/p&gt;
&lt;p&gt;It does not expose raw hit exports, write tools, billing operations, site creation, or instance administration.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/mcp.DkXmA_bp_T1TEw.webp&quot; alt=&quot;AI assistant showing a HitKeep MCP analytics summary with aggregate page, event, and access-scope details&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1466&quot;&gt;&lt;figcaption&gt;MCP lets approved assistants answer analytics questions from aggregate HitKeep data while staying inside scoped, read-only API client access.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hitkeep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-mcp-enabled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-mcp-path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This keeps MCP aligned with the same access model as the REST API: scoped API clients, site permissions, API rate limits, and tenant-aware analytics stores. Cloud and self-hosted deployments use the same contract.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-first-party-wordpress-plugin&quot;&gt;A first-party WordPress plugin&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The new &lt;a href=&quot;https://hitkeep.com/guides/integrations/wordpress/&quot;&gt;WordPress integration&lt;/a&gt; installs the normal HitKeep tracker without editing a theme template or adding a tag manager.&lt;/p&gt;
&lt;p&gt;The plugin stays thin on purpose. WordPress is only the installation point:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;WordPress page -&gt; hk.js -&gt; HitKeep /ingest and /ingest/event -&gt; DuckDB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It does not create WordPress analytics tables, set analytics cookies, or send traffic to a third-party analytics backend. Site owners choose EU Cloud, US Cloud, or a self-hosted HitKeep URL, and the plugin loads &lt;code dir=&quot;auto&quot;&gt;hk.js&lt;/code&gt; from that instance.&lt;/p&gt;
&lt;p&gt;The defaults are conservative. Logged-in WordPress users are not tracked, Do Not Track is respected, and pageviews plus automatic events are enabled for public visitors. Site owners can inspect the generated snippet before saving.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/wordpress-plugin-settings.Be5bf29a_Z1ViFVQ.webp&quot; alt=&quot;HitKeep WordPress settings screen with connection mode cards, tracking coverage toggles, and snippet preview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1244&quot; height=&quot;1500&quot;&gt;&lt;figcaption&gt;The WordPress settings screen keeps the instance connection, privacy defaults, automatic event controls, and generated snippet preview in one place.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/wordpress-plugin-listing.DzHWnwf6_1dUU2f.webp&quot; alt=&quot;WordPress plugins screen showing HitKeep Analytics installed and active&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;718&quot;&gt;&lt;figcaption&gt;The plugin installs through the normal WordPress plugin workflow and can be opened from the standard admin screen.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;automatic-events-from-the-tracker&quot;&gt;Automatic events from the tracker&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;HitKeep’s browser tracker now records three built-in &lt;a href=&quot;https://hitkeep.com/guides/tracking/automatic-events/&quot;&gt;automatic events&lt;/a&gt; with the default snippet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;outbound_click&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;file_download&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;form_submit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These events use the existing event pipeline and dashboard. There is no separate schema, second ingestion route, or extra reporting product. The same Events page handles manual product events and automatic tracker events.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/analytics-events.B4gC5wTm_Hovwe.webp&quot; alt=&quot;HitKeep Events dashboard showing event totals, timeseries, and event breakdowns&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;Automatic events land in the existing Events dashboard, so outbound clicks, downloads, and form submissions can be analyzed next to manual events.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The payloads are deliberately narrow. HitKeep strips query strings and hashes and does not capture link text, form field values, or request bodies.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;https://your-hitkeep.example/hk.js&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If a site needs a narrower tracking surface, you can disable event classes from the dashboard tracking settings or with snippet attributes:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/feature-site-tracking.C9X7atE9_Z1W0ed7.webp&quot; alt=&quot;HitKeep site tracking settings showing automatic event toggles for outbound links, downloads, and forms&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;Tracking settings make automatic event coverage explicit and adjustable per site.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;https://your-hitkeep.example/hk.js&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;data-disable-outbound-tracking&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;data-disable-download-tracking&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;data-disable-form-tracking&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;a-system-status-page-for-real-operators&quot;&gt;A system status page for real operators&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;HitKeep now has a dedicated &lt;a href=&quot;https://hitkeep.com/guides/admin/system-administration/&quot;&gt;System Status and Settings&lt;/a&gt; area for instance owners and admins. System Status is its own sidebar item. System Settings stays focused on users, sites, teams, and global filters.&lt;/p&gt;
&lt;p&gt;System Status shows what the instance is doing: version, health checks, storage paths, tenant database sizes, recent hit volume, enabled features such as MCP and backups, LRU cache pressure, automatic backup state, spam database freshness, mail delivery configuration, and instance audit activity.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/admin-system-status.C40SWcBN_ZkQaFi.webp&quot; alt=&quot;HitKeep System Status page showing health, runtime, enabled features, storage, tenant databases, and refreshable status cards&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;System Status gives operators a direct view of runtime health, storage, tenant database footprint, ingestion volume, and cache state.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The Operations tab separates passive refreshes from real maintenance actions. Refreshing a status card reloads that card. Refreshing the spam database downloads and rebuilds the configured spam lists. Sending a test email uses the configured mail transport and sends an actual message to the specified recipient.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/admin-system-operations.BA2rl5Ap_EjjEc.webp&quot; alt=&quot;HitKeep System Status operations tab showing backup status, spam filter status with manual refresh, and mail transport diagnostics&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;The Operations tab makes backups, spam filter freshness, and mail delivery testable without asking operators to inspect logs first.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Sensitive actions are written to the instance audit log with actor, action, target, outcome, IP address, user agent, request ID, and details where available.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/admin-system-audit.DW0n7_sl_rEPLp.webp&quot; alt=&quot;HitKeep instance audit log showing mail test and spam refresh entries with actor, outcome, and details&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;The instance audit log records maintenance actions such as spam database refreshes and mail tests.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The result is less guesswork during operations. Admins can check whether automatic backups are configured, whether the spam database is stale, whether the mail transport works, and which maintenance actions were attempted.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-clearer-timeout-warning&quot;&gt;A clearer timeout warning&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Dashboard sessions now warn users before they expire.&lt;/p&gt;
&lt;p&gt;When the session enters the configured warning window, HitKeep shows the remaining time, the instance session policy, and two clear actions: stay signed in or sign out.&lt;/p&gt;
&lt;p&gt;The goal is to support teams that review dashboard behavior against timed-session accessibility expectations, including WCAG 2.1 Success Criterion 2.2.1 (Timing Adjustable) and EN 301 549, the standard used with the EU Web Accessibility Directive. The warning gives users a simple way to extend the session before timeout while still respecting the instance’s configured session policy.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://hitkeep.com/_astro/session-expiry-warning.CnXL3Irg_Z2rfOik.webp&quot; alt=&quot;HitKeep dashboard session expiry warning dialog with sign out and stay signed in actions&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2880&quot; height=&quot;2048&quot;&gt;&lt;figcaption&gt;The session expiry dialog gives users a clear choice before the dashboard signs them out.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;read-more&quot;&gt;Read more&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/cloud/&quot;&gt;HitKeep Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/use-cases/&quot;&gt;HitKeep Use Cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/integrations/mcp/&quot;&gt;Official MCP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/integrations/wordpress/&quot;&gt;WordPress Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/tracking/automatic-events/&quot;&gt;Automatic Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/analytics/events/&quot;&gt;Event Analytics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/guides/admin/system-administration/&quot;&gt;System Status and Settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/reference/configuration/#optional-mcp-route/&quot;&gt;Configuration Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hitkeep.com/changelog/&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PascaleBeier/hitkeep/releases&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>