Semantic Journey
Editorially meaningful, privacy-first Content Engagement Analytics. Without analytics jargon, no cookies, no tracking.
Use with caution
Semantic Journey works, but test it on a staging site before relying on it in 2026. It runs on 10+ sites and was last updated 2 months ago, and scores 57/100 on our health check.
- Small user base (10+ active installs)
- Very few reviews so far
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release β each site that auto-updates counts as a download.
Rankings
Where Semantic Journey stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| content quality | >100 |
| editorial analytics | #40 |
| privacy | >100 |
| reader engagement | >100 |
| reader progress | #73 |
Version adoption
Share of active sites per release.
About Semantic Journey
From the official readme Β· v2.2.3Description
Semantic Journey answers questions about your content that conventional analytics answers badly or not at all: what does this content experience look like for real readers, and did they reach the actions that matter to you? Not how many events fired, how long sessions lasted, or how you compare to a benchmark but real Content Engagement Analytics.
It is a plain-language, privacy-first alternative to conventional analytics for editorial teams, built around a fixed contract:
- Semantic, not mechanical. “Readers reached the end”, never “scroll depth exceeded 80%”.
- Understandable without training. No analytics vocabulary, no dashboards that require interpretation skills.
- Outcome-first language. Progress, completion, confidence, clarity, friction. Never metrics, events, rates, or funnels.
- Privacy-first by design. No personal data, no identifiers, no cookies, no user tracking, nothing sent to third parties.
- Aggregate-only signals. No sessions, no individuals, no cross-page journeys, no behavioral profiling.
- Liftable by default. Every module is self-contained and works independently of any other plugin.
Semantic Journey works on any public post type, not only posts and pages: products, portfolio items, or any custom post type your site uses.
Reader Progress (module 1)
The reference implementation of the contract above. Reader Progress reports four fixed milestones for each piece of content:
- Started Reading. The reader began engaging with the main content.
- Reached the Middle. The reader progressed through roughly half of the content.
- Read Most. The reader consumed the large majority of the content (more forgiving than strict completion).
- Reached the End. The reader reached the conclusion.
Detection is content-relative, using IntersectionObserver against the primary content container, never scroll events, scroll percentages, time-on-page, or mouse movement. Milestones fire at most once per page view and are recorded as counts only: no per-event timestamps, no session or user identity of any kind.
Decision Point (module 2)
A Decision Point marks the moment a reader reached a site-owner-defined action: a “Buy Now” button, a survey link, a phone number. Unlike Reader Progress’s four fixed milestones, Decision Point labels are yours to define, and a Decision Point can be reached more than once per page view since each click is a genuine, separate signal.
Four ways to mark a Decision Point, in order of precedence:
- A
data-sj-decision="Label"attribute added to any element, for precise control from your theme or page builder. - Phone number links (
tel:), email links (mailto:), and text message links (sms:), all detected automatically with no configuration. - An admin-defined CSS selector rule (Settings > Decision Point), matching any element, not only links. This is the option for AJAX-submitted forms, Add to Cart buttons, or anything a page builder generates without a real link underneath it.
- An admin-defined URL pattern rule (Settings > Decision Point), for marking real links by address without touching a template.
Decision Point data appears as additional columns on the same Reports screen as Reader Progress, and in the same CSV export, built dynamically from whichever labels actually have data in the selected time window.
Reports
A dedicated Reports screen shows, for any content item, how many readers started, reached the middle, read most, or reached the end, over a 7/30/90-day window, plus a column for each Decision Point label with data in that window, with search, column sorting, and a CSV export. The four Reader Progress columns use plain-language milestone names and show counts only, no rates, percentages, or scores.
An At a Glance summary above the table shows the same five counts site-wide, each with a percentage: a share of Started Reading, computed from data already collected. This plugin does not track total pageviews or site visitors, and did not add that tracking to produce these percentages; Started Reading and Decision Point clicks intentionally have no percentage of their own, since neither is meaningfully a share of Started Reading. Below a configurable minimum sample (Settings > Reporting, default 30), only the count is shown, since a percentage computed from a handful of readers risks overstating what that small a sample actually shows.
Copy prompt for your LLM
The Reports screen can build a plain-text summary of exactly what is currently displayed (the full filtered set, not just the current page) for you to paste into an LLM of your choice, if you want a plain-English interpretation of the counts. This plugin does not send this text anywhere itself, there is no outbound link and no third-party integration; it copies to your clipboard only, and where you paste it afterward is entirely your own choice. The built-in instructions ask the LLM not to invent rates or percentages and not to assert a definite cause for any pattern, matching this plugin’s own approach to the same data.
On the post editor
A small sidebar box on the post/page edit screen (and any other trackable post type) confirms whether Reader Progress and Decision Point are recording for that piece of content, showing 30-day counts for each, with a link straight to the filtered Reports screen. Read-only, no fields to fill in.
On the Posts and Pages list, and the Dashboard
A Semantic Journey column on the Posts/Pages list table (and any other trackable post type) gives an at-a-glance summary without opening each item. A Dashboard widget shows the same five At a Glance counts as Reports, over the last 7 days, plus the top 3 pieces of content by readers reaching the end.
Privacy and external services
This plugin does not send any data to third-party services. All data collected by Reader Progress stays in your own WordPress database, in a dedicated table, as aggregate daily counts. Nothing is shared externally, and no cookies or personal identifiers are used at any point.
For developers
Other plugins can integrate with Semantic Journey through a small, stable public API (see includes/functions.php):
semantic_journey_is_module_enabled( string $module, $context = null ): boolsemantic_journey_reader_progress_get_summary( int $content_id, int $days = 30 ): arraysemantic_journey_decision_point_get_summary( int $content_id, int $days = 30 ): array- the
semantic_journey_module_enabledfilter, for applying your own licensing or per-post rules on top of the site-level toggle. - the
semantic_journey_module_data_recordedaction, fired after every successful Reader Progress and Decision Point write with the module slug, content ID, date, and that day’s full current row. - the
semantic_journey_reports_screen_tabsaction, fired once on the Reports screen with the currently selected date window (start date, end date), for rendering an additional tab.
Semantic Journey itself has no concept of licensing, plans, or host-specific gating; that interpretation belongs entirely to the integrating plugin.
Installation
- Upload the
semantic-journeyfolder to/wp-content/plugins/, or install it via Plugins > Add New > Upload Plugin. - Activate Semantic Journey through the Plugins menu. Activation creates the
wp_reader_progress_dailyandwp_decision_points_dailytables and schedules their daily retention-purge events. - Go to Semantic Journey > Settings to confirm Reader Progress and Decision Point are enabled, set your retention windows, and optionally add Decision Point URL pattern rules.
- Visit Semantic Journey > Reports to see reader activity once readers have visited your content. No further configuration is required; Reader Progress and automatic tel:/mailto:/sms: link detection both work immediately after activation.
Frequently asked questions
Why did a readerβs milestone or click not get recorded?
The most common reason is that JavaScript or a required browser feature was unavailable, described elsewhere in this FAQ. One other case: each submission carries a short-lived security token, similar to how WordPress protects its own forms, which identifies nothing about the visitor but expires roughly a day after the page loaded. If a browser tab is left open far longer than that before a reader reaches a milestone, that one signal is silently not recorded rather than recorded against an expired token. This is intentional: a missing signal in that rare case is preferable to weakening theβ¦
Does the Copy prompt for your LLM feature send my data anywhere?
No. It builds a plain-text summary and copies it to your clipboard only. There is no outbound link, no API call, and no third-party integration built into this feature. Whether you paste that text into an LLM afterward, and which one, is entirely your own separate choice.
Does this replace Google Analytics or a similar tool?
No. It answers a narrower, editorial question and is not a general-purpose analytics platform. It has no sessions, no user identity, and no cross-page journeys by design.
Does Reader Progress use cookies?
No. It stores no identifiers of any kind, and no data is shared with any third party.
What happens if a reader has JavaScript or IntersectionObserver disabled?
The module silently disables itself for that page view. No partial or misleading data is ever recorded.
How long is data kept?
90 days by default, on a rolling basis, configurable in Semantic Journey > Settings. Older rows are purged automatically once a day.
What happens to my data if I uninstall the plugin?
By default, nothing is removed, in case you are reinstalling or upgrading. If you want your data removed on uninstall, enable βRemove data on uninstallβ in Settings first.
Can a Decision Point be reached more than once by the same visitor?
Yes. A Decision Point is a click on an action, not a reading milestone, so each click is counted, matching how a conversion or goal click is normally understood. This is a deliberate difference from Reader Progressβs four milestones, which each fire at most once per page view.
Why isnβt my button being recorded as a Decision Point?
URL pattern rules only match real links (an element with an href). Many buttons, especially ones generated by page builders or ones that submit a form via AJAX, are not links at all. For those, use a CSS selector rule instead (Settings > Decision Point), which matches any element, or add a data-sj-decision="Label" attribute directly to the button. If you configured a CSS selector rule and it still is not firing, check your browserβs console: an invalid selector is reported there rather than failing with no explanation at all. If the element is a phone number, email, or text message link, noβ¦
Does this work on a WordPress multisite network?
Yes. Activating network-wide sets up every existing site, and any site created afterward on a network-active install is set up automatically. Each siteβs data stays separate; there is no cross-site rollup in the free version.
Does this affect my privacy policy?
Semantic Journey adds a short, accurate entry to Tools > Privacy > Policy Guide describing what it does: it does not collect personal data of any kind. You can include this text in your siteβs privacy policy as-is or edit it to match your own wording.
I thought this plugin only showed counts. Why do I see percentages on At a Glance?
The At a Glance summary (Reports and the Dashboard widget) shows a percentage alongside each count, a deliberate, documented exception to how the rest of this plugin works. Each percentage is a share of Started Reading, computed from data already collected; this plugin still does not track total pageviews or site visitors, and did not add that tracking to produce these numbers. Started Reading and Decision Point clicks intentionally have no percentage of their own. Below a configurable minimum sample (Settings > Reporting, default 30), only the count is shown, no percentage at all, since aβ¦
What is the βWhat this suggestsβ line on the Individual insight example?
It is generated by a plain, deterministic comparison of that one content itemβs own milestone counts (which stage had the largest drop, or whether a Decision Point is getting few clicks relative to readers who finished), not by an AI model and not sent anywhere to generate. It is phrased cautiously (βmay suggest,β βworth checkingβ) rather than as a confident claim, since a comparison of a few numbers cannot know the actual cause of a pattern. For a fuller, plain-English read on a piece of content, use Copy prompt for your LLM instead.
Changelog
Correctly fixes the Plugin Check warnings the 2.2.2 fix only partially addressed. No functional change.
2.2.3
- Fixed the same two Plugin Check warnings correctly this time: two separate suppression comments are needed, one per line, since different sniffs within the same statement fire on different physical lines. The 2.2.2 fix moved one comment and inadvertently stopped covering three others.
2.2.2
- The 2.2.1 fix for two Plugin Check warnings was placed on the wrong line (phpcs:ignore only suppresses the very next line, and the comment sat several lines above the actual SQL string). Moved both comments to the correct location.
2.2.1
- Fixed three missing translators comments on At a Glance’s detail sentences, flagged by Plugin Check.
- Corrected a phpcs:ignore comment on the two get_row_for_date() methods to cover the specific rule that actually fired (WordPress.DB.PreparedSQL.InterpolatedNotPrepared), not just an adjacent one.
2.2.0
- Added two extension points for third-party integrations: semantic_journey_module_data_recorded (fired after every Reader Progress and Decision Point write) and semantic_journey_reports_screen_tabs (fired on the Reports screen with the active date window). Both are no-ops until something listens.
2.1.0
- Added a Low-Traffic Display Policy: At a Glance percentages now require a minimum sample size before appearing (Settings > Reporting, default 30, configurable), below it only the count is shown. Found by comparing notes with Semantic Journey Static, which had already built this independently.
2.0.4
- Added a “View details” link to each At a Glance tile on Reports, sorting the table below by that tile’s matching column and jumping to it.
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own β no account needed.
Best Semantic Journey alternatives
All content quality plugins βFAQ
Semantic Journey: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org Β· checked Oct 14, 2026
Is Semantic Journey free?
Yes. Semantic Journey is free to download and use from the official WordPress.org plugin directory.
Is Semantic Journey safe to use in 2026?
Semantic Journey works, but test it on a staging site before relying on it in 2026. It runs on 10+ sites and was last updated 2 months ago, and scores 57/100 on our health check.
How many websites use Semantic Journey?
Semantic Journey is active on 10+ WordPress websites and has been downloaded 598 times since it launched in July 2026. It was downloaded 152 times in the last 30 days.
Does Semantic Journey work with WordPress 7.1?
Semantic Journey is officially tested up to WordPress 7.0.7, while the latest release is 7.1.3. It may still work, but try it on a staging site first.
What PHP version does Semantic Journey need?
Semantic Journey requires PHP 7.4 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.
When was Semantic Journey last updated?
The latest version, 2.2.3, was released on August 13, 2026 (2 months ago).
Who makes Semantic Journey?
Semantic Journey is developed and maintained by hdfraser.
What are the best alternatives to Semantic Journey?
The most popular alternatives to Semantic Journey are Content Insights (20+ installs), AI Humanizer & AI Detector (10+ installs) and Picot AIO AI Content Optimi⦠(<10 installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages β with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org β no credit card

