{"id":371059,"date":"2026-10-01T00:53:18","date_gmt":"2026-10-01T00:53:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hublo-revenue-integrity-monitor\/"},"modified":"2026-10-24T02:05:01","modified_gmt":"2026-10-24T02:05:01","slug":"hublo-revenue-integrity-monitor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hublo-revenue-integrity-monitor\/","author":23547152,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.4","stable_tag":"1.1.4","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Affiliate Link Integrity Checker","header_author":"HUBLO","header_description":"Audit the monetized links on your site for revenue-breaking changes that ordinary link checkers miss. A link can return 200 OK and still have lost its affiliate ID, landed on the wrong merchant, or dropped out of the index.","assets_banners_color":"f7f8fa","last_updated":"2026-10-24 02:05:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/hublo-wp.com\/free-plugins\/revenue-integrity-monitor\/","header_author_uri":"https:\/\/hublo-wp.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":306,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.3":{"tag":"1.1.3","author":"hublowp","date":"2026-10-01 00:52:56","revision":3722248},"1.1.4":{"tag":"1.1.4","author":"hublowp","date":"2026-10-24 02:05:01","revision":3762652}},"upgrade_notice":{"1.1.4":"<p>Listing and metadata update only. No functional change.<\/p>","1.1.2":"<p>Fixes Quick Fix Undo for repairs whose pre-repair value was empty.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3722334,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3722334,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3722334,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3722334,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.3","1.1.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3722334,"resolution":"1","location":"assets","locale":"","width":2560,"height":2400},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3762651,"resolution":"2","location":"assets","locale":"","width":2560,"height":2292},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3762651,"resolution":"3","location":"assets","locale":"","width":2560,"height":2742}},"screenshots":{"1":"Find affiliate links at risk: every revenue path counted as healthy, needs attention or at risk, with the highest-priority issue named.","2":"See exactly what changed and why it matters \u2014 before and after, last known good, what to do next \u2014 with a previewed Quick Fix where the repair is safe.","3":"Auto Discovery finds your monetized links and shows why each one was recommended."}},"plugin_section":[],"plugin_tags":[5362,370,14279,14280,186],"plugin_category":[35,45,55],"plugin_contributors":[276791],"plugin_business_model":[],"class_list":["post-371059","plugin","type-plugin","status-publish","hentry","plugin_tags-affiliate-links","plugin_tags-affiliate-marketing","plugin_tags-broken-links","plugin_tags-link-checker","plugin_tags-seo","plugin_category-advertising","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-hublowp","plugin_committers-hublowp"],"banners":{"banner":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/banner-772x250.png?rev=3722334","banner_2x":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/banner-1544x500.png?rev=3722334","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/icon-128x128.png?rev=3722334","icon_2x":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/icon-256x256.png?rev=3722334","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/screenshot-1.png?rev=3722334","caption":"Find affiliate links at risk: every revenue path counted as healthy, needs attention or at risk, with the highest-priority issue named."},{"src":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/screenshot-2.png?rev=3762651","caption":"See exactly what changed and why it matters \u2014 before and after, last known good, what to do next \u2014 with a previewed Quick Fix where the repair is safe."},{"src":"https:\/\/ps.w.org\/hublo-revenue-integrity-monitor\/assets\/screenshot-3.png?rev=3762651","caption":"Auto Discovery finds your monetized links and shows why each one was recommended."}],"raw_content":"<!--section=description-->\n<p>Check your affiliate links for the failures that ordinary broken-link checks\nmiss.<\/p>\n\n<p>A URL can still return 200 OK while affiliate revenue attribution is broken.\nThe link opens and the merchant's page loads, but the tracking ID that tells\nthe merchant whose account to credit never arrives \u2014 so clicks from that page\nearn nothing, and a 404 checker reports everything as healthy. This plugin\nfinds that class of failure:<\/p>\n\n<ul>\n<li>the affiliate or tracking ID disappeared, or changed to another account<\/li>\n<li>the destination changed \u2014 for example, a discontinued product page that now lands on the merchant's home page<\/li>\n<li>the redirect chain changed, loops or never resolves<\/li>\n<li>a monetized link or call to action disappeared from the page<\/li>\n<li>a money page picked up a noindex<\/li>\n<li>the canonical URL drifted, or now points at another domain<\/li>\n<li>the destination itself failed<\/li>\n<\/ul>\n\n<h4>What you see after a scan<\/h4>\n\n<p>An overview of every revenue path \u2014 healthy, needs attention, or revenue at\nrisk \u2014 with the highest-priority issue named. Each issue answers, on one\nscreen: what happened, why it can cost you money, what it was before, what it\nis now, when it was last known good, and what to do next. Response codes and\nredirect hops are there under Technical Details when you want them.<\/p>\n\n<h4>Why it is different<\/h4>\n\n<p><strong>Alerts you can trust.<\/strong> A bot filter or WAF answering 403 is reported as\n\"automated verification was blocked\", not as a broken link. A 429 rate limit\ncauses a backoff, a timeout is retried, rotating click IDs are expected, and\nparameter order, encoding, trailing slashes and http to https are normalized\nbefore anything is compared. Revenue At Risk requires a reachable\ndestination, a known-good baseline and a consistent result across retries.<\/p>\n\n<p><strong>Auto Discovery.<\/strong> No selectors or rules to configure. Discovery reads your\nstored content without outbound requests, so it scales to large sites, and\npicks out what looks monetized: PrettyLinks and\nThirstyAffiliates links, <code>rel=\"sponsored\"<\/code> links, known affiliate parameters\nand networks, and calls to action on review and comparison pages. It is tuned\nfor precision; lower-confidence links stay as candidates.<\/p>\n\n<p><strong>Quick Fix for the safe cases.<\/strong> Where the plugin can prove from a recorded\ngood state exactly what a link used to be, it offers to put it back.<\/p>\n\n<h4>Safe by design<\/h4>\n\n<ul>\n<li>No account, no API key, no telemetry, no analytics, no external service.<\/li>\n<li>The audit is read-only: discovery and every check only read your pages and store findings.<\/li>\n<li>Quick Fix runs only when you click it. You see the exact before\/after change first, press Apply yourself, and can press Undo.<\/li>\n<li>No arbitrary content rewriting. Quick Fix can write to three things only: a vanished affiliate parameter in a link in your post content, a dropped disclosure attribute such as <code>rel=\"sponsored\"<\/code>, or the destination stored by PrettyLinks or ThirstyAffiliates for a link they manage.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><strong>Discover.<\/strong> Press Scan for revenue paths and review the recommendations.<\/li>\n<li><strong>Audit.<\/strong> Each protected path \u2014 page, link, redirect chain, tracking and destination \u2014 is checked against a recorded good state by eight detectors, in resumable chunks, with requests spaced out and capped per destination and per run.<\/li>\n<li><strong>Act.<\/strong> Recheck, Quick Fix where eligible, Accept New Baseline for a change you made on purpose, Mark Expected, or export to CSV.<\/li>\n<\/ol>\n\n<h4>Detectors<\/h4>\n\n<ol>\n<li><strong>Revenue Element Missing<\/strong> \u2014 the CTA or affiliate link is no longer on the page.<\/li>\n<li><strong>Destination Drift<\/strong> \u2014 the link now ends up somewhere else.<\/li>\n<li><strong>Tracking Parameter Integrity<\/strong> \u2014 the affiliate ID went missing or changed account.<\/li>\n<li><strong>Redirect Chain Drift<\/strong> \u2014 the redirect loops, or never resolves.<\/li>\n<li><strong>Revenue Destination Failure<\/strong> \u2014 the destination is gone or erroring.<\/li>\n<li><strong>Indexability Failure<\/strong> \u2014 a money page picked up a noindex.<\/li>\n<li><strong>Canonical Drift<\/strong> \u2014 the canonical URL changed or points at another domain.<\/li>\n<li><strong>Revenue Element Drift<\/strong> \u2014 the link's wording or sponsored markup changed.<\/li>\n<\/ol>\n\n<h4>Quick Fix details<\/h4>\n\n<p>After a Quick Fix is applied the path is checked again immediately, and you\nare told whether it was fixed and verified, applied but still failing, or\nfailed with nothing changed. Undo covers the repair most recently made to a\npath; if a newer repair has since been applied, the older one is refused with\na reason rather than discarding the newer change. There is no cap.<\/p>\n\n<p>Everything else is a <strong>guided fix<\/strong> (where the setting lives and which plugin\nowns it) or <strong>needs review<\/strong>, with the reason. An affiliate ID that changed\nrather than vanished, two links to the same place, a link your theme renders,\nand a check that was blocked or rate limited never produce a repair.<\/p>\n\n<h4>Works with<\/h4>\n\n<p>PrettyLinks and ThirstyAffiliates are supported as first-class sources, so an\nissue can say the managed link's target changed. Neither is required; plain\naffiliate links in your content work on their own.<\/p>\n\n<h4>Free, and the separate Pro plugin<\/h4>\n\n<p>This plugin is a complete affiliate link audit: all eight detectors, unlimited\nrevenue paths, every finding with its evidence, Recheck, Quick Fix, Accept New\nBaseline, Mark Expected and CSV export. Nothing expires, nothing is capped,\nand no feature waits for a licence.<\/p>\n\n<p>A separately distributed Pro edition does a different job \u2014 <strong>Continuous Protection<\/strong>: scheduled monitoring, automatic re-checks of the affected paths straight after a WordPress, plugin or theme update, correlation of what changed around the time a path broke, long incident history, advanced tracking and merchant policies, bulk actions and notifications. It is not bundled inside this plugin, and this plugin works fully without it.<\/p>\n\n<h4>Privacy and outbound requests<\/h4>\n\n<p>Requests go to your own pages and to the destinations your links already\npoint at \u2014 nothing else. Your content, findings and affiliate IDs stay in your\nWordPress installation. Addresses inside your own network (loopback, private\nranges, link-local and cloud metadata endpoints) are refused, and every\nredirect hop is validated again.<\/p>\n\n<h4>Languages<\/h4>\n\n<p>Every user-facing string is translatable. Translations are hosted on\ntranslate.wordpress.org and installed as language packs; none are bundled.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen.<\/li>\n<li>Activate it.<\/li>\n<li>Open <strong>Revenue Integrity<\/strong> in the admin menu.<\/li>\n<li>Press <strong>Scan for revenue paths<\/strong>, review the recommendations, then run the audit.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20just%20another%20broken%20link%20checker%3F\"><h3>Is this just another broken link checker?<\/h3><\/dt>\n<dd><p>No. A broken link checker asks whether a URL answers. This asks whether the\naffiliate conditions attached to it still hold \u2014 whether your tracking ID\nstill arrives, whether the destination is still the page you chose, and\nwhether the page carrying the link is still indexable. All of those can break\nwhile the link returns 200.<\/p><\/dd>\n<dt id=\"will%20it%20flood%20me%20with%20false%20alarms%3F\"><h3>Will it flood me with false alarms?<\/h3><\/dt>\n<dd><p>That is the failure it is designed around. Bot filters, WAF challenges, rate\nlimits and timeouts are classified as verification problems and never\nreported as confirmed failures.<\/p><\/dd>\n<dt id=\"does%20it%20change%20anything%20on%20my%20site%3F\"><h3>Does it change anything on my site?<\/h3><\/dt>\n<dd><p>The audit does not. Quick Fix does, but only for the three targets above, only\nwhen you trigger it, with a preview first and Undo afterwards.<\/p><\/dd>\n<dt id=\"does%20it%20monitor%20continuously%3F\"><h3>Does it monitor continuously?<\/h3><\/dt>\n<dd><p>No. This plugin audits when you run it, and Recheck re-tests any path on\ndemand. Scheduled monitoring and re-checks after updates are the separate Pro\nedition.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20change%20a%20link%20on%20purpose%3F\"><h3>What happens if I change a link on purpose?<\/h3><\/dt>\n<dd><p>The issue shows exactly which fields changed and offers <strong>Accept New\nBaseline<\/strong>. The previous baseline is kept.<\/p><\/dd>\n<dt id=\"does%20it%20need%20prettylinks%20or%20thirstyaffiliates%3F\"><h3>Does it need PrettyLinks or ThirstyAffiliates?<\/h3><\/dt>\n<dd><p>No. Both are supported when present; plain affiliate links work without\neither.<\/p><\/dd>\n<dt id=\"why%20does%20the%20admin%20screen%20say%20%22revenue%20integrity%22%3F\"><h3>Why does the admin screen say \"Revenue Integrity\"?<\/h3><\/dt>\n<dd><p>That is the plugin's original name. The directory listing now uses a\ndescriptive name; the plugin, its settings and its data are the same.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Listing update: the plugin is now listed as \"Affiliate Link Integrity Checker\", with a clearer description, tags and screenshot order. No functional change.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Removed unused repair-history and baseline-history query code that had no screen in this edition.<\/li>\n<li>Quick Fix Undo states its scope in the engine: it undoes the repair most recently made to a path, and refuses an older one with a reason.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fixed: Quick Fix Undo could refuse to restore a repair whose pre-repair value was legitimately empty.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>README clarity: the Safety section and FAQ describe Quick Fix explicitly. No functional change.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Quick Fix for issues the audit can prove it knows how to undo, with a preview, an immediate recheck and Undo.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: Auto Discovery, eight detectors, Alert Trust classification, versioned baselines, resumable jobs, SSRF protection, PrettyLinks and ThirstyAffiliates adapters, CSV export.<\/li>\n<\/ul>","raw_excerpt":"Find affiliate links that still load but stopped earning: missing tracking IDs, destination drift, redirects, noindex, and more.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/371059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=371059"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hublowp"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=371059"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=371059"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=371059"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=371059"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=371059"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=371059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}