[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fXf5Q6rIUsSiEOt7MttndXVU4lZ-rCXMXV54NY6W5Sc8":3},{"slug":4,"display_name":4,"profile_url":5,"plugin_count":6,"total_installs":7,"avg_security_score":8,"avg_patch_time_days":9,"trust_score":10,"computed_at":11,"plugins":12},"hdfraser","https:\u002F\u002Fprofiles.wordpress.org\u002Fhdfraser\u002F",2,20,100,30,94,"2026-08-29T13:44:10.236Z",[13,36],{"slug":14,"name":15,"version":16,"author":4,"author_profile":5,"description":17,"short_description":18,"active_installs":19,"downloaded":20,"rating":21,"num_ratings":21,"last_updated":22,"tested_up_to":23,"requires_at_least":24,"requires_php":25,"tags":26,"homepage":32,"download_link":33,"security_score":8,"vuln_count":21,"unpatched_count":21,"last_vuln_date":34,"fetched_at":35},"cqi-referrer-attribution","CQI Referrer Attribution","1.10.0","\u003Cp>Most analytics plugins guess where your traffic came from by running a script in the visitor’s browser, after the page has already loaded, and after any ad blocker or privacy extension has had a chance to block it. CQI Referrer Attribution classifies every visit on the server, before the page is even sent, so the data is complete and the plugin adds no client-side JavaScript, no extra request, and no Core Web Vitals penalty.\u003C\u002Fp>\n\u003Cp>It also answers a question most attribution tools still miss: how much of your traffic is coming from AI assistants. ChatGPT, Gemini, Perplexity, Claude, Copilot, and a growing list of others now send real visitors. This plugin classifies that traffic as its own channel, not lumped into Direct or Referral where it disappears.\u003C\u002Fp>\n\u003Cp>Nine channels are detected automatically: AI Tools, Organic Search, Social Media, Email, Paid Search, Paid Display, Campaign, Referral, and Direct.\u003C\u002Fp>\n\u003Cp>This plugin is fully functional with no licence key, trial period, or usage limit of any kind.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>AI Referrer Taxonomy\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>A built-in registry of AI assistant domains is used to classify AI-referred traffic. The default set includes ChatGPT, Google Gemini, Perplexity, Claude, Microsoft Copilot, Grok, Meta AI, and more. Entries can be added, edited, activated, deactivated, deleted, and exported as JSON.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Dashboard\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>A 30-day summary showing total sessions with a live counter that updates automatically as new sessions arrive, session change versus the previous 30 days, AI traffic sessions and their share of total traffic, top channel, a channel share donut chart, a source share donut chart, and a sessions-per-day bar chart.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Sessions log\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The full Sessions report supports date range, channel, and source filters, pagination, and CSV export. Any session spanning more than one page view can be expanded to show the full page-by-page journey in chronological order.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Sample data\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>One click on the Settings tab loads 60 realistic synthetic sessions across every channel, spread over the past 30 days, so the Dashboard and Reports are populated immediately on a fresh install. Sample rows are clearly marked and can be removed at any time without affecting real attribution data.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Consent-aware\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>When CQI Consent is active, attribution is only persisted after marketing consent is granted. Without consent, classification runs in memory only and no cookie or database row is written. The plugin operates in permissive mode when CQI Consent is not installed.\u003C\u002Fp>\n\u003Cp>Independent of CQI Consent, the plugin reads the Global Privacy Control signal (the Sec-GPC HTTP header) on every request and does not persist attribution when it is present. This is checked regardless of whether any consent plugin is installed.\u003C\u002Fp>\n\u003Cp>When CQI Consent is not installed, the plugin also recognises marketing consent already withheld through Complianz or CookieYes, if either is active on the site, using each plugin’s own consent cookie. Borlabs Cookie is not currently supported, since its consent cookie format is not publicly documented; sites running Borlabs Cookie alone currently operate in permissive mode, the same as a site with no consent plugin at all.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Privacy by design\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>No personal data is stored. Session tokens are HMAC-SHA256 hashes of an anonymized IP address (last octet zeroed) and the current date. Raw IP addresses are never written to disk. Token rotation is daily. The plugin is registered with the WordPress personal data export and erasure framework.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Excluded channels\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Any channel can be excluded from the Dashboard summary, the channel share chart, and the Sessions report. This is most useful for removing Direct \u002F Unknown from view so reports focus on traffic you can actually attribute and act on.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Path exclusions and bot filtering\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>A built-in guard silently drops requests to \u003Ccode>\u002Frobots.txt\u003C\u002Fcode>, \u003Ccode>\u002Fsitemap.xml\u003C\u002Fcode>, \u003Ccode>\u002Fxmlrpc.php\u003C\u002Fcode>, \u003Ccode>\u002Ffavicon.ico\u003C\u002Fcode>, and other system paths before classification runs. Additional path prefixes can be added in Settings, one per line, to suppress noise from any crawlers or automated probes specific to your site.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Public PHP API\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Two functions are available for use in themes and other plugins:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>cqip_attr_get_channel()\u003C\u002Fcode>, returns the current visitor’s channel slug\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqip_attr_get_source()\u003C\u002Fcode>, returns the full attribution array\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>These function names are intentionally preserved from CQIP Site Services v1.8.0 for backward compatibility on sites migrating from that plugin.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Filter and action hooks\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>These hooks let other plugins extend this plugin’s behaviour. They are not used by this plugin itself; they exist for add-ons such as CQI Referrer Attribution Pro.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>cqi_referrer_attribution_logo_url\u003C\u002Fcode> (filter), the mark shown in the admin page header\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_referrer_attribution_plugin_name\u003C\u002Fcode> (filter), the page title shown in the admin page header\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_session_logged\u003C\u002Fcode> (action), fires after each session is recorded, receives the new row’s ID and data\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_admin_tabs\u003C\u002Fcode> (action), fires inside the admin page’s tab navigation, after the built-in tabs\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_unknown_tab_handled\u003C\u002Fcode> (filter), fires when an unrecognized tab slug is requested, lets an add-on render its own tab body\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_sessions_view_filters\u003C\u002Fcode> (filter), the Sessions report’s query filters, before the session log is queried; also applied before CSV export runs\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_sessions_filter_bar\u003C\u002Fcode> (action), fires inside the Sessions filter bar, after the built-in filter fields\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_sessions_table_header\u003C\u002Fcode> (action), fires inside the Sessions table header row, after the built-in columns\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_sessions_table_row\u003C\u002Fcode> (action), fires inside each Sessions table row, after the built-in columns, receives the row object\u003C\u002Fli>\n\u003Cli>\u003Ccode>cqi_ra_dashboard_log_id_in\u003C\u002Fcode> (filter), restricts Dashboard metrics to a specific list of session row IDs\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>What is CQI?\u003C\u002Fh3>\n\u003Cp>CQI (Content Quality and Intelligence) is a methodology standard that is followed, not a technology stack. Implementations can exist for static PHP sites, WordPress, page generators, and other document management systems. Its purpose is to encourage structured content that benefits human and machine readers.\u003C\u002Fp>\n","Know where every visitor came from, including ChatGPT, Gemini, and Perplexity. No JavaScript, no cookie banner trigger, no page speed cost.",10,247,0,"2026-07-10T00:52:00.000Z","7.0.2","6.0","7.4",[27,28,29,30,31],"ai-traffic","attribution","marketing-attribution","referrer","traffic-channels","https:\u002F\u002Freferrerattribution.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcqi-referrer-attribution.1.10.0.zip",null,"2026-07-22T17:31:50.256Z",{"slug":37,"name":38,"version":39,"author":4,"author_profile":5,"description":40,"short_description":41,"active_installs":19,"downloaded":42,"rating":21,"num_ratings":21,"last_updated":43,"tested_up_to":23,"requires_at_least":24,"requires_php":25,"tags":44,"homepage":50,"download_link":51,"security_score":8,"vuln_count":21,"unpatched_count":21,"last_vuln_date":34,"fetched_at":35},"semantic-journey","Semantic Journey","1.7.1","\u003Cp>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.\u003C\u002Fp>\n\u003Cp>It is a plain-language, privacy-first alternative to conventional analytics for editorial teams, built around a fixed contract:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Semantic, not mechanical.\u003C\u002Fstrong> “Readers reached the end”, never “scroll depth exceeded 80%”.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Understandable without training.\u003C\u002Fstrong> No analytics vocabulary, no dashboards that require interpretation skills.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Outcome-first language.\u003C\u002Fstrong> Progress, completion, confidence, clarity, friction. Never metrics, events, rates, or funnels.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Privacy-first by design.\u003C\u002Fstrong> No personal data, no identifiers, no cookies, no user tracking, nothing sent to third parties.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Aggregate-only signals.\u003C\u002Fstrong> No sessions, no individuals, no cross-page journeys, no behavioral profiling.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Liftable by default.\u003C\u002Fstrong> Every module is self-contained and works independently of any other plugin.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Semantic Journey works on any public post type, not only posts and pages: products, portfolio items, or any custom post type your site uses.\u003C\u002Fp>\n\u003Ch4>Reader Progress (module 1)\u003C\u002Fh4>\n\u003Cp>The reference implementation of the contract above. Reader Progress reports four fixed milestones for each piece of content:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Started Reading.\u003C\u002Fstrong> The reader began engaging with the main content.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Reached the Middle.\u003C\u002Fstrong> The reader progressed through roughly half of the content.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Read Most.\u003C\u002Fstrong> The reader consumed the large majority of the content (more forgiving than strict completion).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Reached the End.\u003C\u002Fstrong> The reader reached the conclusion.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>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.\u003C\u002Fp>\n\u003Ch4>Decision Point (module 2)\u003C\u002Fh4>\n\u003Cp>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.\u003C\u002Fp>\n\u003Cp>Four ways to mark a Decision Point, in order of precedence:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A \u003Ccode>data-sj-decision=\"Label\"\u003C\u002Fcode> attribute added to any element, for precise control from your theme or page builder.\u003C\u002Fli>\n\u003Cli>Phone number links (\u003Ccode>tel:\u003C\u002Fcode>), email links (\u003Ccode>mailto:\u003C\u002Fcode>), and text message links (\u003Ccode>sms:\u003C\u002Fcode>), all detected automatically with no configuration.\u003C\u002Fli>\n\u003Cli>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.\u003C\u002Fli>\n\u003Cli>An admin-defined URL pattern rule (Settings > Decision Point), for marking real links by address without touching a template.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>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.\u003C\u002Fp>\n\u003Ch4>Reports\u003C\u002Fh4>\n\u003Cp>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\u002F30\u002F90-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; there are no rates, percentages, or scores to interpret.\u003C\u002Fp>\n\u003Ch4>Copy prompt for your LLM\u003C\u002Fh4>\n\u003Cp>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.\u003C\u002Fp>\n\u003Ch4>On the post editor\u003C\u002Fh4>\n\u003Cp>A small sidebar box on the post\u002Fpage 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.\u003C\u002Fp>\n\u003Ch4>On the Posts and Pages list, and the Dashboard\u003C\u002Fh4>\n\u003Cp>A Semantic Journey column on the Posts\u002FPages list table (and any other trackable post type) gives an at-a-glance summary without opening each item. A small Dashboard widget shows the top 5 pieces of content by readers reaching the end, over the last 7 days.\u003C\u002Fp>\n\u003Ch4>Privacy and external services\u003C\u002Fh4>\n\u003Cp>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.\u003C\u002Fp>\n\u003Ch4>For developers\u003C\u002Fh4>\n\u003Cp>Other plugins can integrate with Semantic Journey through a small, stable public API (see includes\u002Ffunctions.php):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>semantic_journey_is_module_enabled( string $module, $context = null ): bool\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>semantic_journey_reader_progress_get_summary( int $content_id, int $days = 30 ): array\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>semantic_journey_decision_point_get_summary( int $content_id, int $days = 30 ): array\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>the \u003Ccode>semantic_journey_module_enabled\u003C\u002Fcode> filter, for applying your own licensing or per-post rules on top of the site-level toggle.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Semantic Journey itself has no concept of licensing, plans, or host-specific gating; that interpretation belongs entirely to the integrating plugin.\u003C\u002Fp>\n","Editorially meaningful, privacy-first reader signals. No analytics jargon, no cookies, no tracking.",71,"2026-07-17T15:06:00.000Z",[45,46,47,48,49],"content-quality","editorial-analytics","privacy","reader-engagement","reader-progress","https:\u002F\u002Fsemanticjourney.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsemantic-journey.1.7.1.zip"]