{"id":290009,"date":"2026-04-08T13:34:30","date_gmt":"2026-04-08T13:34:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/attentiq\/"},"modified":"2026-04-08T13:34:55","modified_gmt":"2026-04-08T13:34:55","slug":"attentiq","status":"publish","type":"plugin","link":"https:\/\/ast.wordpress.org\/plugins\/attentiq\/","author":23465474,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.3","stable_tag":"1.2.3","tested":"6.9.4","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"AttentIQ","header_author":"Mus Code","header_description":"Track reader attention across your posts and automatically place ads in the highest-attention zones. AttentIQ scores every ad slot using scroll depth, time-on-section, and content structure \u2014 then inserts your ads where readers actually focus.","assets_banners_color":"dfddec","last_updated":"2026-04-08 13:34:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/attent-iq.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.3":{"tag":"1.2.3","author":"muscode","date":"2026-04-08 13:34:55"}},"upgrade_notice":{"1.1.4":"<p>WordPress.org compliance improvements, privacy opt-out filter, and dashboard slot tracking enhancements.<\/p>","1.1.3":"","1.0.9":"<p>Initial release of AttentIQ.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3501725,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3501725,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3501725,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3501725,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3501725,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3501725,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3501725,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3501725,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3501725,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"AttentIQ Dashboard \u2014 attention scores and slot breakdowns for all posts","2":"Post Insights \u2014 paragraph heatmap, zone timing, and revenue estimates","3":"Ad Code Settings \u2014 desktop and mobile ad codes per slot with alignment controls"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[259728,321,259729,6207,377],"plugin_category":[35],"plugin_contributors":[259730],"plugin_business_model":[],"class_list":["post-290009","plugin","type-plugin","status-publish","hentry","plugin_tags-ad-optimization","plugin_tags-ads","plugin_tags-attention-tracking","plugin_tags-heatmap","plugin_tags-monetization","plugin_category-advertising","plugin_contributors-muscode","plugin_committers-muscode"],"banners":{"banner":"https:\/\/ps.w.org\/attentiq\/assets\/banner-772x250.png?rev=3501725","banner_2x":"https:\/\/ps.w.org\/attentiq\/assets\/banner-1544x500.png?rev=3501725","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/attentiq\/assets\/icon-128x128.png?rev=3501725","icon_2x":"https:\/\/ps.w.org\/attentiq\/assets\/icon-256x256.png?rev=3501725","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/attentiq\/assets\/screenshot-1.png?rev=3501725","caption":"AttentIQ Dashboard \u2014 attention scores and slot breakdowns for all posts"},{"src":"https:\/\/ps.w.org\/attentiq\/assets\/screenshot-2.png?rev=3501725","caption":"Post Insights \u2014 paragraph heatmap, zone timing, and revenue estimates"},{"src":"https:\/\/ps.w.org\/attentiq\/assets\/screenshot-3.png?rev=3501725","caption":"Ad Code Settings \u2014 desktop and mobile ad codes per slot with alignment controls"},{"src":"https:\/\/ps.w.org\/attentiq\/assets\/screenshot-4.png?rev=3501725","caption":""},{"src":"https:\/\/ps.w.org\/attentiq\/assets\/screenshot-5.png?rev=3501725","caption":""}],"raw_content":"<!--section=description-->\n<p>AttentIQ tracks how readers actually engage with your content \u2014 measuring attention time per paragraph, scroll depth, and ad slot viewability across desktop and mobile devices. It uses this data to automatically place ads at the exact paragraphs where readers spend the most time, maximizing ad revenue without guesswork.<\/p>\n\n<p><strong>Free Features<\/strong><\/p>\n\n<ul>\n<li>Attention score per post based on content analysis<\/li>\n<li>Automatic in-content ad placement based on content structure<\/li>\n<li>Header, in-content, and footer ad slot support<\/li>\n<li>Per-post meta box with slot score breakdown<\/li>\n<li>Dashboard overview of all tracked posts<\/li>\n<li>Confidence and decay badges<\/li>\n<\/ul>\n\n<p><strong>Pro Features<\/strong><\/p>\n\n<ul>\n<li>Paragraph-level attention heatmap (desktop &amp; mobile)<\/li>\n<li>Device-split attention data \u2014 separate mobile and desktop tracking<\/li>\n<li>Device-specific ad placement \u2014 place ads at each device's hotspot paragraph<\/li>\n<li>Ad slot viewability tracking \u2014 see how long each slot stays in the viewport<\/li>\n<li>Programmatic revenue estimates per slot<\/li>\n<li>Direct sale valuations with CPM multipliers<\/li>\n<li>Dual in-content ad placement for high-attention posts<\/li>\n<li>Mobile-specific ad codes for header, in-content, and footer<\/li>\n<li>Alignment control per ad slot<\/li>\n<li>Scroll depth tracking per device<\/li>\n<li>Zone timing breakdown (header \/ mid-content \/ footer zones)<\/li>\n<\/ul>\n\n<p><strong>How It Works<\/strong><\/p>\n\n<ol>\n<li>AttentIQ tracks how long readers spend on each paragraph using a lightweight JavaScript tracker<\/li>\n<li>It calculates slot scores for header, in-content, and footer positions based on attention data and content analysis<\/li>\n<li>Ads are automatically inserted at the highest-attention positions<\/li>\n<li>The insights page shows a full breakdown of attention timing, heatmaps, slot scores, and revenue estimates per post<\/li>\n<\/ol>\n\n<p><strong>Privacy &amp; Data Collection<\/strong><\/p>\n\n<p>AttentIQ measures how readers engage with your content \u2014 including time spent on each paragraph, scroll depth, device type, and ad slot viewability. This data is stored exclusively in your own WordPress database and is never sent to any external server.\nNo personally identifiable information (name, email, IP address) is collected or stored. To detect unique visits per post, a <code>localStorage<\/code> entry (<code>attentiq_seen_[post_id]<\/code>) is written to the visitor's browser. No cookies are set.\nSite owners can disable all frontend tracking at any time by adding the following to their theme or a plugin:\n    add_filter( 'attentiq_enable_tracking', '__return_false' );\nAttentIQ also registers suggested text for your site's Privacy Policy page (Appearance \u2192 Privacy Policy) via the WordPress privacy API.<\/p>\n\n<h3>Revenue Estimates Disclaimer<\/h3>\n\n<p>Revenue figures shown in AttentIQ (programmatic revenue per slot, direct sale estimates, RPM calculations, and monthly forecasts) are <strong>estimates only<\/strong>. They are calculated using industry-standard benchmarks and, where available, your own tracked viewability and impression data.\nActual revenue depends on many factors outside AttentIQ's control \u2014 including your ad network's fill rates, seasonal demand, audience geography, advertiser competition, and your specific ad setup. Results will vary and may differ significantly from the figures shown.\nAttentIQ estimates are intended to help you make informed placement decisions, not to guarantee any particular earnings outcome.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external services. All connections are admin-only \u2014 no data from your site's front-end readers is sent to any of these services.<\/p>\n\n<p><strong>Google Fonts<\/strong> (https:\/\/fonts.google.com)\nWhat it does: Loads the DM Sans and DM Mono typefaces used in the AttentIQ admin UI.\nWhen it connects: On every AttentIQ admin page load.\nData sent: Your browser's IP address and user-agent are sent to Google's servers as part of a standard font stylesheet request.\nGoogle Privacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>attentiq<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to <strong>AttentIQ \u2192 Settings<\/strong> and paste your ad codes for each slot<\/li>\n<li>Enable auto ads on individual posts via the AttentIQ meta box in the post editor<\/li>\n<li>Visit <strong>AttentIQ \u2192 Dashboard<\/strong> to view attention scores and insights for all your posts<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20attentiq%20work%20with%20page%20builders%3F\"><h3>Does AttentIQ work with page builders?<\/h3><\/dt>\n<dd><p>Yes. AttentIQ detects common page builders (Elementor, Divi, Beaver Builder, etc.) and switches to JavaScript-based ad injection automatically.<\/p><\/dd>\n<dt id=\"how%20long%20does%20it%20take%20to%20collect%20attention%20data%3F\"><h3>How long does it take to collect attention data?<\/h3><\/dt>\n<dd><p>AttentIQ starts collecting data immediately after activation. Slot scores become reliable once a post reaches the minimum views threshold (default: 50 views), which you can adjust in Settings.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20mobile%3F\"><h3>Does it work on mobile?<\/h3><\/dt>\n<dd><p>Yes. AttentIQ tracks desktop and mobile visits separately (Pro). You can set mobile-specific ad codes for each slot and choose device-specific ad placement mode.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>The tracker script is lightweight, loads asynchronously, and only fires after the reader has been on the page for a few seconds (configurable bounce threshold). It has no impact on page load time.<\/p><\/dd>\n<dt id=\"is%20my%20data%20shared%20with%20anyone%3F\"><h3>Is my data shared with anyone?<\/h3><\/dt>\n<dd><p>All attention data is stored in your own WordPress database. No post content or reader data is sent to external servers. See External Services for details on third-party services used in the admin UI.<\/p><\/dd>\n<dt id=\"can%20i%20use%20attentiq%20with%20custom%20post%20types%3F\"><h3>Can I use AttentIQ with custom post types?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>AttentIQ \u2192 Settings<\/strong> and select which post types AttentIQ should track and inject ads into.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>WordPress.org compliance: admin menu position changed from 25 to 100 \u2014 AttentIQ now appears below Settings, outside the core WordPress menu hierarchy.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>WordPress.org compliance: removed <code>is_premium<\/code> from all PHP localized script data \u2014 the Pro plugin now injects attention-data flags into the frontend JS via <code>wp_add_inline_script()<\/code> only when active.<\/li>\n<li>WordPress.org compliance: removed <code>$is_pro_locked<\/code> slot-locking logic and <code>attentiq_unlocked_slots<\/code> filter \u2014 the Second In-Content slot is added entirely by the Pro plugin via <code>attentiq_slot_definitions<\/code>; no slot locking exists in the free plugin.<\/li>\n<li>WordPress.org compliance: setup wizard upgrade blocks (<code>ob_start()<\/code> \/ <code>apply_filters()<\/code> pattern) replaced with direct <code>if (!class_exists('AttentIQ_Pro'))<\/code> checks \u2014 no output buffers left open.<\/li>\n<li>Renamed internal JS flag <code>is_premium<\/code> \u2192 <code>use_attention_data<\/code> and variables <code>isPremium<\/code> \u2192 <code>hasAttentionData<\/code> throughout admin JS \u2014 naming now reflects data availability rather than a license state.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>WordPress.org compliance: removed <code>attentiq_is_pro()<\/code> function and all <code>apply_filters('attentiq_pro_active')<\/code> calls \u2014 pro plugin detection now uses the standard <code>class_exists('AttentIQ_Pro')<\/code> pattern throughout.<\/li>\n<li>Added <code>attentiq_upgrade_url()<\/code> function \u2014 returns the in-admin pricing page URL when the Pro plugin is installed, or the external upgrade page otherwise. All upgrade links now use this function instead of the <code>ATTENTIQ_UPGRADE_URL<\/code> constant directly.<\/li>\n<li>Fixed: \"Upgrade to Pro\" menu item is now hidden when the Pro plugin is installed, regardless of license status.<\/li>\n<li>Improved: \"Upgrade to Pro\" menu link now opens in a new tab \u2014 implemented via <code>wp_add_inline_script()<\/code> for WordPress.org compliance (no raw inline <code>&lt;script&gt;<\/code> tags).<\/li>\n<li>Setup wizard: Free vs Pro comparison grid, attention scoring note, and upgrade card are now passed through <code>apply_filters()<\/code> so the Pro plugin can cleanly suppress them \u2014 no conditional gating in the free plugin itself.<\/li>\n<li>Fixed: <code>&lt;form&gt;<\/code> and <code>&lt;button&gt;<\/code> elements added to <code>kses_admin_html()<\/code> allowlist \u2014 previously stripped by <code>wp_kses()<\/code>, which caused the Pro plugin's license activation form to silently do nothing.<\/li>\n<li>Updated <code>.pot<\/code> translation file.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fixed: infinite loop \/ timeout on pages and during scans when the <code>[attentiq_heatmap]<\/code> shortcode is present in a post with ads enabled \u2014 shortcodes are now stripped from content before slot scoring to prevent recursive calls.<\/li>\n<li>Fixed: \"Last Rescanned\" timestamp in Post Insights was showing the wrong time (up to several hours off) \u2014 timestamps are now stored as Unix integers and compared correctly regardless of server timezone.<\/li>\n<li>Fixed: loading the Post Insights page was silently updating the \"Last Rescanned\" time on every load \u2014 rescanned timestamp is now only updated by an explicit Scan action.<\/li>\n<li>Fixed: Scan All button was returning no results and getting stuck \u2014 AJAX handler registration is now deferred to <code>init<\/code> so both free and pro plugins are fully loaded before handlers are registered.<\/li>\n<li>Fixed: Scan All button did not work when rendered inside a form (defaulted to <code>type=\"submit\"<\/code>) \u2014 button now has explicit <code>type=\"button\"<\/code>.<\/li>\n<li>Dashboard: Scan All now processes posts in batches of 10 with a live progress bar showing scanned \/ total count \u2014 prevents PHP timeouts on large sites.<\/li>\n<li>Fixed: dashboard \"Sort by Score\" was sorting by raw content quality instead of ad value \u2014 posts with great structure but almost no traffic (e.g. Privacy Policy) no longer outrank high-traffic posts.<\/li>\n<li>Improved: introduced Ad Value Score \u2014 content quality score multiplied by a log-scale traffic weight relative to your site average. Posts below the minimum views threshold keep a neutral weight so new content isn't buried. The ring, sort order, and site average all use this score; individual slot scores are unchanged.<\/li>\n<li>Fixed: \"Total Time on Site Today\" dashboard card was always showing empty despite views being recorded \u2014 caused by <code>SKIM_SPEED<\/code> being set to 3 px\/s (any scrolling triggered skim mode, dumping all dwell time into an unused bucket). Threshold raised to 400 px\/s and scroll speed now resets when the user stops scrolling.<\/li>\n<li>Fixed: per-post page builder detection now checks post meta (Elementor, Divi, Beaver Builder, WPBakery) instead of checking if the plugin class exists site-wide \u2014 PHP ad injection now works correctly on non-builder posts even when a builder plugin is installed.<\/li>\n<li>Fixed: dashboard post cards were silently triggering score recalculations on every load for posts scored before the scoring-mode feature was introduced \u2014 empty mode meta no longer forces a recalc.<\/li>\n<li>Improved: frontend ad insertion (<code>auto_insert_ads<\/code>) now reads slot scores, revenue, and best slot directly from cached post meta \u2014 no DB queries or recalculations on every page load.<\/li>\n<li>Post Insights: score ring now shows Ad Value Score with content quality score shown as a secondary line below.<\/li>\n<li>Dashboard hero block: tips and to-do messages now rotate randomly from a pool of options so the same message isn't shown every visit.<\/li>\n<li>Changed: Freemius SDK removed from the free plugin \u2014 license management, upgrade checkout, and the My License \/ Upgrade to Pro pages are now part of the Pro plugin only. The free plugin menu links directly to the website upgrade page.<\/li>\n<li>Added: <code>ATTENTIQ_UPGRADE_URL<\/code> constant \u2014 all upgrade links in the plugin use this single constant, making it easy to update the target URL in one place.<\/li>\n<li>Security: heatmap output in Post Insights now escaped with <code>wp_kses_post()<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Post Insights: tracking status is now shown in the Views Tracked stat block and at the top of the Diagnostics card \u2014 displays why tracking is off (site-wide filter, post type not tracked, or too few paragraphs).<\/li>\n<li>Security: SVG icon variables (<code>$svg_desktop<\/code>, <code>$svg_mobile<\/code>) now escaped with <code>wp_kses()<\/code> throughout the Post Insights template.<\/li>\n<li>Fixed: hero block today-highlight cards and the dashboard activity ticker now include a nonce in their Post Insights links \u2014 previously caused \"The link you followed has expired\" errors.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>License management page moved to the pro plugin via <code>attentiq_license_page_html<\/code> filter \u2014 license info, billing details, cancel subscription, and plugin sidebar all render from the pro plugin when active.<\/li>\n<li>Added sidebar to the license page showing installed version, latest available version, update notice, and download button.<\/li>\n<li>Fixed: stray <code>?&gt;<\/code> tags visible on Post Insights page after escaping pass.<\/li>\n<li>Fixed: fatal error on the license page when the pro plugin is not present \u2014 all license call sites are now guarded with availability checks.<\/li>\n<li>Security: added nonce verification to all admin GET parameter reads \u2014 Post Insights, Setup wizard edit-step, and Advertiser Report pages now require a valid nonce.<\/li>\n<li>Security: all nonce-protected links updated to use <code>wp_nonce_url()<\/code>.<\/li>\n<li>Security: JS-generated Post Insights links now include a nonce via <code>wp_localize_script<\/code>.<\/li>\n<li>Security: wrapped all HTML-returning closures (<code>$score_bar<\/code>, <code>$heat_bar<\/code>, forecast icon) with <code>wp_kses_post()<\/code> \/ <code>wp_kses()<\/code>.<\/li>\n<li>Removed dead <code>$_GET['sort']<\/code> code from the dashboard \u2014 the JS already uses <code>attentIQAdmin.defaultSort<\/code> from <code>wp_localize_script<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Fixed PHP output on Post Insights page \u2014 stray <code>?&gt;<\/code> tags left by escaping pass were visible on screen.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Fixed scroll depth always recording as 0 \u2014 now tracks maximum scroll depth reached during the visit.<\/li>\n<li>Added site-level unique visitor tracking (dashboard hero block).<\/li>\n<li>Fixed paragraph heatmap demo showing locked summary chips to free users.<\/li>\n<li>Security: removed dead code branch and added explicit comment for intentionally unsanitized ad code fields.<\/li>\n<li>Security: fixed unescaped output in slot alignment editor.<\/li>\n<li>Performance: removed duplicate scroll event binding that caused double-firing on every scroll.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Improved paragraph count.<\/li>\n<li>Added scan button to post insights page.<\/li>\n<li>Improved frontend heatmap UI.<\/li>\n<li>Improved manual ad slot positioning.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>WordPress.org compliance \u2014 all inline scripts converted to wp_enqueue_script() \/ wp_localize_script() \/ wp_add_inline_script()<\/li>\n<li>WordPress.org compliance \u2014 advertiser report stylesheet now loaded via wp_enqueue_style() \/ wp_print_styles()<\/li>\n<li>WordPress.org compliance \u2014 removed \"Powered by AttentIQ\" attribution from public-facing advertiser report<\/li>\n<li>Privacy \u2014 added attentiq_enable_tracking filter so site owners can disable all frontend tracking<\/li>\n<li>Privacy \u2014 registered suggested privacy policy content via wp_add_privacy_policy_content()<\/li>\n<li>Dashboard \u2014 Active Slots hero stat now shows total recommended ad slots currently serving across all posts<\/li>\n<li>Dashboard \u2014 sub-label on Active Slots card shows count of recommended slots not currently serving ads<\/li>\n<li>Dashboard \u2014 slot counts use the same visibility threshold (score \u2265 50, or best slot \u2265 40) used across the plugin<\/li>\n<li>Dashboard \u2014 dual in-content placement counted as two slots in both active and unused totals<\/li>\n<li>Dashboard \u2014 added ad slot filter dropdown to post list toolbar (All slots \/ Ads enabled \/ Header \/ In-content \/ Footer)<\/li>\n<li>Dashboard \u2014 toolbar sort buttons collapse to a select at 1280px to keep layout intact with two filter dropdowns<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Major PHP and JavaScript improvements.<\/li>\n<li>Further UI improvements for enhanced readability and usability.<\/li>\n<li>Translation improvements.<\/li>\n<li>Cleaned up CSS stylesheets.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>JavaScript improvements \u2014 added 'use strict' to all scripts, replaced shorthand event methods with .on(), removed unused code<\/li>\n<li>All user-facing strings are now translatable and properly escaped, attentiq.pot file included<\/li>\n<li>Fixed script and style handle names to remove file extensions<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Full UI redesign of admin dashboard, post insights, ad slots, and settings pages<\/li>\n<li>WCAG AA accessibility compliance throughout \u2014 minimum 12px font size, all colours meet 4.5:1 contrast ratio<\/li>\n<li>Per-post ad slot controls \u2014 enable or disable individual slots directly from the post editor<\/li>\n<li>Paragraph position sliders \u2014 fine-tune where each ad slot appears within its section<\/li>\n<li>Per-post ad code overrides \u2014 set different ad codes per post without affecting global settings<\/li>\n<li>Lazy load option per ad slot<\/li>\n<li>Reusable slot editor component used across ad slots page and post insights page<\/li>\n<li>AJAX scan in post editor meta box \u2014 no page reload required<\/li>\n<li>Improved mobile responsiveness across all admin pages<\/li>\n<li>Dashboard post list with AJAX pagination, search, and sort filters<\/li>\n<li>Site-wide slot performance header on ad slots page<\/li>\n<li>Setup wizard redesign with cleaner onboarding flow<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Full UI redesign of admin dashboard and post insights page<\/li>\n<li>Improved mobile and tablet responsiveness across all admin pages<\/li>\n<li>Paginated post list with AJAX loading, search, and sort filters<\/li>\n<li>Setup wizard redesign with cleaner onboarding flow<\/li>\n<li>Score rings and slot badges on post cards<\/li>\n<li>Paragraph heatmap device tabs integrated into insights page layout<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Attention tracking per paragraph, scroll depth, and zone timing<\/li>\n<li>Device-split tracking for desktop and mobile<\/li>\n<li>Automatic ad placement based on attention data<\/li>\n<li>Header, in-content, and footer ad slots<\/li>\n<li>Mobile-specific ad codes<\/li>\n<li>Paragraph heatmap (Pro)<\/li>\n<li>Ad slot viewability tracking (Pro)<\/li>\n<li>Revenue estimates \u2014 programmatic and direct sale (Pro)<\/li>\n<li>Device-specific placement mode (Pro)<\/li>\n<li>Custom post type support<\/li>\n<li>Alignment controls per ad slot<\/li>\n<\/ul>","raw_excerpt":"See where attention goes. Monetize what matters.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/290009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=290009"}],"author":[{"embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/muscode"}],"wp:attachment":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=290009"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=290009"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=290009"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=290009"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=290009"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=290009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}