Title: Redkirin Ad Click Verification
Author: redkirin
Published: <strong>October 11, 2026</strong>
Last modified: October 15, 2026

---

Search plugins

![](https://ps.w.org/redkirin-ad-click-verification/assets/banner-772x250.png?rev
=3745328)

![](https://ps.w.org/redkirin-ad-click-verification/assets/icon.svg?rev=3745328)

# Redkirin Ad Click Verification

 By [redkirin](https://profiles.wordpress.org/redkirin/)

[Download](https://downloads.wordpress.org/plugin/redkirin-ad-click-verification.1.9.4.zip)

 * [Details](https://wordpress.org/plugins/redkirin-ad-click-verification/#description)
 * [Reviews](https://wordpress.org/plugins/redkirin-ad-click-verification/#reviews)
 *  [Installation](https://wordpress.org/plugins/redkirin-ad-click-verification/#installation)
 * [Development](https://wordpress.org/plugins/redkirin-ad-click-verification/#developers)

 [Support](https://wordpress.org/support/plugin/redkirin-ad-click-verification/)

## Description

日本語: 電話・LINE・メールのクリック、フォーム送信、広告着地を bot の不正クリック
から守るアドフラウド対策プラグインです。管理画面は日本語に対応しています。

Headless browsers and ad-platform crawlers execute JavaScript and click links. When
a site measures phone (`tel:`), LINE, email or other link clicks as GA4 events or
Google Ads conversions (for example through a Google Tag Manager “Just Links” trigger),
those automated clicks are counted as conversions. GA4’s built-in bot filtering 
is based on known bot lists and does not catch them.

Redkirin Ad Click Verification is a lightweight ad fraud countermeasure focused 
on conversion integrity. It verifies that a click comes from a real person before
it reaches your tags:

 * **Human signals** – records mouse movement, scrolling, touch and keyboard activity
   plus time on page from the moment the page starts loading. A long stay on the
   page (default 5 s) counts as one signal, so a visitor who reads and then taps
   a fixed call button is measured while instant taps are not.
 * **Bot signals** – `navigator.webdriver`, headless / crawler user agents (editable
   regex list), automation tool globals, missing language settings, and Google’s
   published crawler IP ranges.
 * **Click interception** – unverified clicks are stopped at the `window` capture
   phase, before Google Tag Manager click triggers or inline `onclick` handlers 
   see them. The navigation itself (dialing, opening LINE, following the link) is
   performed by the plugin, so visitors are never blocked.
 * **dataLayer guard** – `gtm.linkClick` / `gtm.click` and any event names you specify
   are dropped from `dataLayer.push` while the visitor is unverified.
 * **Form submission verification** – the same human verification applies to form
   submissions. Hidden fields carry the verdict for your CRM, verified submissions
   push `rkacv_form_submit`, submissions with definite bot signals are stopped (
   Contact Form 7 marks them as spam, WPForms rejects them), and thank-you pages
   only count when a verified form was submitted in the same session.
 * **In-app browser detection** – landings are classified by app (Yahoo! JAPAN, 
   LINE, Facebook, Instagram, X, Google app, TikTok, generic WebView, …), so you
   can see which apps bot traffic comes from even without ValueTrack placements.
 * **Wasted spend estimate** – enter an average CPC (or per campaign) and the report
   shows bot landings x CPC per campaign and in total.
 * **Evidence export** – CSV of bot landings and blocked clicks for the Google Ads
   invalid click claim form.
 * **Alerts** – hourly check with email when the bot share of ad landings or repeated
   conversions from one click ID exceed your thresholds; optional daily digest.
 * **Country restriction** – allow-list or block-list of countries (all ISO countries,
   grouped by region, searchable). Measurement of phone / LINE / form clicks and
   verified events is withheld for restricted countries, optionally with an HTTP
   403. The country comes from the Internet registries (RDAP) or a CDN country header,
   not from a third-party geolocation API; unknown countries are measured by default.
 * **Page view protection** – obvious bots (webdriver, bot user agents, automation
   globals) get no tags at all: every dataLayer push is dropped, so GTM and gtag.
   js send nothing, not even page_view. Once a visitor is verified, a `rkacv_verified_pageview`
   event is pushed that you can use as a key event instead of page_view (thank-you
   pages, landing pages).
 * **Verified events** – verified clicks push `rkacv_verified_click` to the dataLayer(
   with `rkacv_link_type`, `rkacv_link_url`, `rkacv_link_text`, `rkacv_element_id`),
   and can optionally call `gtag('event', ...)` directly.
 * **Scope** – protect only matched links (phone / LINE / email by default), every
   link, or every click including buttons.
 * **Deny page access to bots (optional, off by default)** – return HTTP 403 to 
   IP ranges you registered and to headless browsers, automation tools and HTTP 
   libraries. Search engine and ad review crawlers are never blocked. Optionally
   hide the page in the browser when `navigator.webdriver` is detected.
 * **Repeat conversion suppression** – one ad click (one gclid) can only produce
   a verified phone / LINE click once per link type within a window (default 30 
   minutes) and at most a daily limit per click ID (default 3) across tabs, devices
   and reloads. Stops manual or automated “conversion seeding” from a single paid
   click.
 * **Every ad platform** – click IDs from Google (gclid / gbraid / wbraid), Meta(
   fbclid), Yahoo! JAPAN (yclid), LINE (ldtag_cl), TikTok (ttclid), X (twclid) and
   Microsoft (msclkid) are recognised for ad landings and repeat suppression; the
   report breaks landings down by platform. A directly installed Meta Pixel or Yahoo
   tag is never loaded for obvious bots, and verified events can be sent to the 
   Meta Pixel as custom events.
 * **Ad traffic analysis** – every visit arriving with an ad click parameter (gclid,
   gbraid, wbraid, …) is scored human / undetermined / bot and recorded with its
   campaign, placement and device (Google Ads ValueTrack parameters are read from
   the URL). The “Ad traffic” report shows the bot share per campaign and placement,
   repeat landings from the same IP or click ID, verified clicks per campaign, and
   an exportable list of IP ranges for Google Ads IP exclusions.
 * **Dashboard widget** – 7-day ad traffic (landings, bot share, undetermined, human,
   estimated waste, daily chart, top campaigns) and click summary with a daily chart,
   top block reasons and the latest blocked clicks.
 * **Log** – blocked and verified clicks are logged with the reason, so you can 
   tune thresholds. IP addresses are anonymised by default. The log endpoint only
   accepts requests carrying a token signed by the site, is rate limited per IP 
   and site-wide, and the table is capped and purged automatically.

Works with page caching plugins: nothing visitor-specific is embedded in the HTML.
Server-side IP checks run through the REST API.

The admin UI is in English with a bundled Japanese translation (the plugin targets
LINE-based lead generation common in Japan).

Google Analytics, Google Ads and Google Tag Manager are trademarks of Google LLC.
LINE is a trademark of LY Corporation. This plugin is an independent product of 
Redkirin and is not affiliated with or endorsed by Google or LY Corporation; the
names are used only to describe compatibility.

### External services

This plugin can connect to three external services.

**RDAP (network operator lookup)** – When “Show the network operator next to IP 
addresses” is enabled (default: enabled), the plugin asks the public RDAP services
of the Internet registries who the registered owner of an anonymised IP range is(
mobile carrier, ISP, hosting provider, or the company holding a fixed-IP assignment)
and caches the answer for 30 days. Japanese ranges are looked up at JPNIC (https://
rdap.nic.ad.jp/ip/{range}, terms: https://www.nic.ad.jp/en/db/whois/), other ranges
through https://rdap.org/ip/{range}, which forwards to the responsible regional 
registry. Only the anonymised /24 range (last octet zero) is sent, never a full 
visitor IP, and lookups happen on the server from WP-Cron or when an administrator
opens the log. Service: https://about.rdap.org/ – registry terms: https://www.apnic.
net/about-apnic/corporate-documents/documents/resource-management/apnic-whois-terms-
and-conditions/

**Google crawler IP ranges** – When the “Google crawler IP check” option is enabled(
default: enabled), the plugin downloads Google’s published crawler IP range lists
once a day via WP-Cron, on plugin activation, and when an administrator clicks “
Refresh” on the Log screen. The lists are cached in a transient. Only the server
makes this request; no visitor data is sent to Google by the plugin.

 * https://developers.google.com/static/search/apis/ipranges/googlebot.json
 * https://developers.google.com/static/search/apis/ipranges/special-crawlers.json
 * https://developers.google.com/static/search/apis/ipranges/user-triggered-fetchers-
   google.json

Published by Google: https://developers.google.com/search/docs/crawling-indexing/
verifying-googlebot

**Cloudflare IP ranges** – Only when “Cloudflare mode” is enabled (default: off;
the plugin offers it when it detects that the site is served through Cloudflare 
without the real visitor IP being restored), the plugin downloads Cloudflare’s published
IP range list once a day from https://www.cloudflare.com/ips-v4/ and https://www.
cloudflare.com/ips-v6/ and caches it for two days. No visitor data is sent; the 
list is used to verify that a request really comes from Cloudflare before the CF-
Connecting-IP header is accepted as the visitor IP. Published by Cloudflare: https://
www.cloudflare.com/ips/
 Google terms of service: https://policies.google.com/terms–
Privacy policy: https://policies.google.com/privacy

The plugin does not send anything to Google Analytics or Google Ads by itself; it
only decides whether the tags you have already installed receive a click.

## Installation

 1. Upload the `redkirin-ad-click-verification` folder to `/wp-content/plugins/` or
    install the zip from Plugins  Add New.
 2. Activate the plugin.
 3. Open the new “Ad Click Verification” menu in the admin sidebar. The defaults work
    for phone / LINE / email links with an existing Google Tag Manager setup.
 4. Optionally create a GTM custom event trigger for `rkacv_verified_click` and move
    your conversion tags to it (see the guide tab in the settings screen).

## FAQ

### Does it block visitors?

No. Only the measurement is withheld. Phone calls, LINE and other links always work;
when a click is intercepted the plugin performs the navigation itself.

### Do I have to change my Google Tag Manager container?

Not necessarily. With “Intercept unverified clicks” enabled, existing “Click – Just
Links” triggers simply stop firing for bots. For the cleanest setup, create a custom
event trigger for `rkacv_verified_click` and pause your old click triggers to avoid
double counting.

### What about visitors who tap a phone number immediately after the page loads?

A tap within the minimum dwell time (default 1 second) with no prior interaction
cannot be distinguished from a bot and is not measured. Lower the dwell time or 
set the required signal count to 0 if this matters more than bot filtering.

### Does it work with caching plugins and CDNs?

Yes. All verification happens in the browser and via the REST API. Behind a reverse
proxy or CDN, return the real visitor IP with the `rkacv_client_ip` filter so the
IP range check works.

### What data is stored?

An optional log of blocked / verified clicks: time, link URL, page URL, reason, 
dwell time, signal count, user agent and an anonymised IP (last octet / lower 80
bits zeroed; can be disabled). Logs are purged after the configured number of days
and the table keeps the newest 20,000 rows. Everything is removed on uninstall.

### Can page view based key events (thank-you pages) be protected too?

Yes. Obvious bots get no tags at all (“Fire no tags for obvious bots”), and once
a visitor is verified the plugin pushes rkacv_verified_pageview. Use that event,
optionally with a page path condition, as your key event instead of page_view. Bots
that are only recognisable after the page view was sent (IP range, no interaction)
cannot be removed from page_view itself, which is why the verified event exists.

### Does it work with Meta Ads, Yahoo! JAPAN Ads or other platforms?

Yes. Verification acts on the page, so it is platform-independent. Click IDs from
Google, Meta (fbclid), Yahoo! JAPAN (yclid), LINE, TikTok, X and Microsoft are recognised
for landings and repeat suppression, and the report shows a per-platform breakdown.
Fire each platform’s conversion tag from GTM on the verified events (rkacv_verified_click,
rkacv_form_submit, rkacv_verified_pageview); a directly installed Meta Pixel can
receive the verified events as custom events.

### Does the ad traffic report tell me which placements to exclude?

It shows, per campaign and per placement, how many landings carried definite bot
signals (webdriver, synthetic clicks, headless user agents, crawler IPs) versus 
how many looked human. Placement and device breakdowns require Google Ads ValueTrack
parameters in your tracking template, for example `{lpurl}?campaignid={campaignid}&
placement={placement}&device={device}`. The plugin never changes your Google Ads
account; exclusions are applied by you in Google Ads.

### Can the log be trusted?

The log is diagnostic data reported by visitors’ browsers. The endpoint requires
a token signed by the site, but the token is part of the public page, so anyone 
who can load the page can also post entries. Treat the log as a tuning aid, not 
as evidence: it never changes what GA4 or Google Ads measure. Writes are rate limited
per IP and site-wide, capped per IP per day, and when the table is full the oldest
rows are discarded so new entries are always stored.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Redkirin Ad Click Verification” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ redkirin ](https://profiles.wordpress.org/redkirin/)

[Translate “Redkirin Ad Click Verification” into your language.](https://translate.wordpress.org/projects/wp-plugins/redkirin-ad-click-verification)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/redkirin-ad-click-verification/),
check out the [SVN repository](https://plugins.svn.wordpress.org/redkirin-ad-click-verification/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/redkirin-ad-click-verification/)
by [RSS](https://plugins.trac.wordpress.org/log/redkirin-ad-click-verification/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.9.4

 * Directory listing: Japanese keyword “アドフラウド” added to the tags, the short
   description and the description so the plugin can be found by Japanese searches.

#### 1.9.3

 * Japanese translation: three remaining spacing fixes.

#### 1.9.2

 * Japanese translation brought in line with the WordPress Japanese style guide (
   half-width parentheses with outer spaces, すでに / すべて / ください, など, no
   spaces around counts).

#### 1.9.1

 * The first option on the Basic settings tab is now called “Protect the site (master
   switch)” and explains what it pauses; the deny-page feature now also respects
   it.

#### 1.9.0

 * Cloudflare detection and Cloudflare mode. When an administrator opens a plugin
   screen through Cloudflare and the server has not restored the real visitor IP,
   a warning explains that IP checks, country restriction and the logs are seeing
   Cloudflare addresses, with a one-click “Enable Cloudflare mode” button. In Cloudflare
   mode the plugin downloads Cloudflare’s IP ranges daily and, only for requests
   that really come from those ranges, uses CF-Connecting-IP as the visitor IP and
   trusts the CF-IPCountry country header. A generic reverse-proxy warning (private
   REMOTE_ADDR with X-Forwarded-For) points to the rkacv_client_ip filter. The current
   request’s status is shown next to the new “Reverse proxy / CDN” setting.

#### 1.8.5

 * Security hardening: the CDN country header (CF-IPCountry / CloudFront-Viewer-
   Country) is no longer trusted by default, because on a site that is not behind
   such a CDN anyone could forge it to bypass the country restriction; a new “Trust
   the CDN country header” option on the Country restriction tab enables it. Synchronous
   registry lookups triggered from the public check endpoint are capped site-wide(
   30 per minute, filter rkacv_geo_sync_lookups_per_minute). Evidence CSV cells 
   that start with =, +, -, @ or a tab are quoted so spreadsheets do not execute
   them.
 * The page cache warning stays hidden for 12 hours for the administrator who clicked“
   Clear page cache now”.

#### 1.8.4

 * Dashboard widget is titled “Redkirin Ad Click Verification”.

#### 1.8.3

 * Number fields on the settings tabs (average CPC, dwell times, delays, retention
   days, thresholds) are wide enough to show six digits; text fields and textareas
   no longer overflow their column.

#### 1.8.2

 * Wasted spend estimate is no longer hidden while the average CPC is unset: the
   Ad traffic report, the dashboard widget and the daily digest show “Average CPC
   not set” with a clearly labelled example calculation and a link to the setting.
   The CPC field explains where to copy the figure from.
 * Network operator / company names next to IP addresses are shown in full instead
   of being cut off with an ellipsis.

#### 1.8.1

 * New “Ad fraud” settings tab: ad traffic analysis, wasted spend estimate, alerts
   and scripted repetition detection moved there from Advanced settings, each tab
   with its own reset button.

#### 1.8.0

 * Scripted repetition detection: groups of different IPs that repeat the same sequence
   of clicks / form submissions on the same pages with the same browser and almost
   identical timing are listed on the Event log tab (“Scripted” badge on their rows,
   one-click “Add bot IP”) and reported by the alert email. Catches stealth bots
   that hide the webdriver flag and pass the dwell / interaction checks.
 * Hosting providers such as Contabo, IONOS, Scaleway, Leaseweb, M247 and Hostinger(
   plus many more VPS / cloud names and Japanese hosts) are now labelled as hosting
   and shown in red; registry names containing “host”, “server”, “cloud”, “datacenter”,“
   vps” or “colo” are flagged too.
 * Country restriction moved to its own tab with its own “Reset this tab” button.

#### 1.7.1

 * Country is now stored with every click log entry and ad landing (DB version 7)
   and shown as a badge next to every IP, Japan included. The event log gets a “
   By country (7 days)” strip with per-country filtering and an “Exclude from measurement”
   shortcut that pre-selects the country in the block list. Known countries are 
   back-filled into older rows as lookups complete.
 * Every reason in the event log and ad landing tables now has an (i) icon; hover
   or click it for a plain-language explanation of what was detected.

#### 1.7.0

 * New “Country restriction” (Advanced settings): allow-list or block-list of countries
   with a searchable, region-grouped checkbox grid, “countries seen recently”, fail-
   open for unknown countries, optional HTTP 403, and a “By country” breakdown in
   the Ad traffic report. Uses the registry country from the RDAP lookups or a CDN
   header (Cloudflare, CloudFront); no geolocation API.

#### 1.6.3

 * Ad traffic: every breakdown table now has the same columns. Verified clicks (
   matched by click ID) and the estimated waste are computed per platform, campaign,
   app, placement, device and source, so the bot-share bars line up across tables.

#### 1.6.2

 * The admin sidebar menu is now labelled “Redkirin Ad Click Verification”.

#### 1.6.1

 * Layout: report headers no longer wrap, breakdown tables with no data for their
   dimension are hidden, numeric gad_source values are labelled, the event log uses
   proportional column widths and the network operator badge sits under the IP instead
   of overflowing.
 * The “Log” tab and menu are now called “Event log”.

#### 1.6.0

 * Log and Ad traffic: the network operator (NTT docomo, au, SoftBank, Rakuten Mobile,
   ISPs, cloud / hosting providers, or the company holding a fixed-IP assignment
   registered with JPNIC) and the country are shown next to each anonymised IP, 
   looked up through the public RDAP services of JPNIC and the regional registries
   and cached for 30 days.
 * Settings: “Reset this tab to defaults” button on the Basic and Advanced settings
   tabs. Hosting / cloud ranges and ranges registered outside Japan are highlighted;
   the country code is included in the evidence CSV. Lookups run hourly via WP-Cron,
   a few at a time when the log is opened, or on demand with “Look up network operators”.
   New option under Bot detection; disclosed under External services.

#### 1.5.1

 * The plugin script is excluded automatically from JavaScript optimisation (aggregation,
   defer, delayed execution) in Autoptimize, WP Rocket, LiteSpeed Cache, Perfmatters,
   Flying Press, SiteGround Optimizer and WP-Optimize, and any defer / async attribute
   is removed, so it keeps running in the head before Google Tag Manager. Without
   this, deferred execution delayed the bot tag block and could lose early landings.

#### 1.5.0

 * Dashboard widget: new ad traffic section with landings, bot share, undetermined,
   human, estimated waste, a daily chart by verdict and the top campaigns.
 * Ad landings are now recorded in two steps: a provisional record right after the
   minimum dwell time and a final verdict after the delay or on leave. Visits from
   in-app browsers that are closed without a leave event are no longer lost. The
   final update is authenticated with a per-row signed key.

#### 1.4.1

 * Log: the “Add bot IP” button is shown only for rows with definite bot signals,
   not for repeat or undetermined rows that may be real visitors.

#### 1.4.0

 * Meta, Yahoo! JAPAN, LINE, TikTok, X and Microsoft click IDs (fbclid, yclid, ldtag_cl,
   ttclid, twclid, msclkid) are recognised for ad landings and repeat suppression;
   new “By platform” breakdown and platform column / CSV field.
 * Directly installed Meta Pixel (fbq) and Yahoo tag (ytag / yjDataLayer) are disabled
   for obvious bots together with GTM / gtag.
 * Optional “Send verified events to the Meta Pixel” (VerifiedClick / VerifiedPageView/
   VerifiedFormSubmit custom events).
 * Default trigger / capture parameters extended (campaign_id, adset_id, ad_id, 
   site_source_name, utm_term); existing installations get the new names appended
   automatically.
 * Guide section for Meta Ads, Yahoo! JAPAN Ads and other platforms.

#### 1.3.3

 * Cache plugin awareness: detects common page cache plugins, shows a notice with
   a “Clear page cache now” button on the plugin screens, and clears the cache automatically
   after plugin updates and settings saves (filter `rkacv_cache_plugins` to add 
   others).

#### 1.3.2

 * Log screen: “Repeat” filter and a “Repeat blocked, last 7 days” card so suppressed
   repeat conversions are easy to find.

#### 1.3.1

 * The plugin now has its own top-level admin menu (Basic settings, Advanced settings,
   Log, Ad traffic, Guide) instead of living under Settings; old links redirect.
 * Ad traffic report: consistent column widths across the breakdown tables and equal-
   width summary cards.

#### 1.3.0

 * In-app browser classification for ad landings (new “By app” breakdown and column);
   evidence CSV export for Google Ads invalid click claims; wasted spend estimate(
   bot landings x CPC, per campaign CPC overrides) in the report, the dashboard 
   and the digest.
 * Form submission verification: hidden verdict fields, rkacv_form_submit event 
   for verified submissions, blocking of submissions with definite bot signals (
   browser, Contact Form 7 spam, WPForms error), configurable excluded forms.
 * Thank-you page gating: verified page view / rkacv_thanks_view only after a verified
   form submission in the same session; direct hits are logged.
 * Alert emails (hourly check: bot share, repeated conversions per click ID) and
   an optional daily digest.

#### 1.2.0

 * New “Fire no tags for obvious bots” (default on): when webdriver, a bot user 
   agent or automation globals are present at load, every dataLayer push is dropped
   so GTM / gtag.js send nothing, including page_view.
 * New “Send a verified page view event” (default on): pushes rkacv_verified_pageview(
   and verified_page_view via gtag when direct sending is enabled) once the visitor
   is verified. Use it as a key event instead of page_view.
 * Guide: new section on page view based key events.

#### 1.1.3

 * Settings are split into “Basic settings” (scope, thresholds, blocking, verified
   events, repeat suppression, log) and “Advanced settings” (bot detection, ad traffic
   analysis, deny page access). Saving one tab keeps the values of the other.

#### 1.1.2

 * Settings: options that depend on a master switch (deny page access, repeat suppression,
   ad landings, logging, dataLayer guard) are greyed out and not editable until 
   the switch is on. Values are preserved.

#### 1.1.1

 * New “Repeat conversion suppression”: verified phone / LINE clicks are measured
   once per link type per click ID (or per browser session) within a window, and
   at most a daily limit per click ID checked against the log through the REST API.
   Repeats are intercepted and logged with the reason “Repeat”.
 * The log stores the click ID (gclid / gbraid / wbraid / msclkid / yclid) of each
   entry; the Ad traffic report lists click IDs with repeated conversions (verified,
   repeat-blocked, distinct IPs, first / last time).
 * Keyboard activity on a touch device is recorded as a note in the log (a hint 
   of desktop device emulation or automation); it does not change the verdict.

#### 1.1.0

 * New “Ad traffic” report: ad landings (gclid / gbraid / wbraid / gad_campaignid
   and ValueTrack parameters) are scored human / undetermined / bot after a configurable
   delay or on leave, and broken down by campaign, placement, device and source 
   with the bot share, repeat landings (same IP within 10 minutes, same click ID
   within 24 hours), verified clicks matched by click ID, and an exportable list
   of IP ranges for Google Ads IP exclusions.
 * New settings section “Ad traffic analysis” (recording on by default when logging
   is on; trigger / capture parameters, verdict delay, retention).
 * Dashboard widget shows the ad landing count and bot share.
 * New table `rkacv_ad_visits` with the same protections as the log (signed token,
   rate limits, per-IP daily cap, ring buffer, retention).

#### 1.0.9

 * Log table is now a ring buffer: when the 20,000-row cap is reached the oldest
   rows are discarded instead of refusing new entries, so flooding cannot suppress
   new logs.
 * New per-IP daily cap on log rows (default 300, filter `rkacv_log_ip_daily_limit`).
 * Clarified in the settings and readme that the log is untrusted diagnostic data.

#### 1.0.8

 * New dashboard widget: blocked / bot-signal / undetermined / verified / denied
   counts for the last 7 days, a daily bar chart, top block reasons and the latest
   blocked clicks.

#### 1.0.7

 * New optional “Deny page access to bots” section: HTTP 403 for registered bot 
   IP ranges and automation / HTTP-library user agents, with a protected list of
   search engine and ad crawlers that are never denied. Optional client-side hiding
   when navigator.webdriver is detected. Denied requests are logged with a new “
   Denied” status and filter.

#### 1.0.6

 * Log screen: blocked rows are marked “Bot signals” (definite bot indicators) or“
   Undetermined” (dwell / interaction only) and colour-coded; IPs blocked more than
   once show a count.
 * Log screen: new “Bot signals” filter.
 * Log screen: one-click “Add bot IP” button adds the row’s IP range (/24 for anonymised
   IPv4, /48 for IPv6) to the additional bot CIDR list, shown only when the user
   agent is not already matched by a bot pattern.

#### 1.0.5

 * Admin UI source strings are now English; Japanese translation is bundled (languages/)
   and loaded via load_plugin_textdomain.
 * Reason labels in the log are now translatable.

#### 1.0.4

 * New “dwell as signal” threshold (default 5000 ms): a long stay counts as one 
   interaction signal, so visitors who read without scrolling and then tap a fixed
   call/LINE button are measured, while instant taps are still withheld.

#### 1.0.3

 * Renamed to Redkirin Ad Click Verification (slug `redkirin-ad-click-verification`,
   prefix `rkacv_`). dataLayer keys are now `rkacv_verified_click`, `rkacv_human`,`
   rkacv_link_type`, etc.
 * The log endpoint now requires a site-signed token (permission_callback) in addition
   to rate limits.
 * Shortened the readme description; added trademark notice.

#### 1.0.2

 * Renamed to Redkirin Ad Click Verification (slug `redkirin-ad-click-verification`,
   PHP prefix `rkacv_`). dataLayer keys (`rkacv_verified_click`, `rkacv_human`, `
   rkacv_link_type`, …) are unchanged.
 * Store log timestamps in UTC and display them in the site timezone.
 * Cap the log table at 20,000 rows and add a site-wide rate limit for the log endpoint.
 * Lock concurrent refreshes of the Google crawler IP range cache.
 * Fix: saving settings removed backslashes from bot user-agent regular expressions.

#### 1.0.1

 * Fix: dataLayer guard caused infinite recursion with the real Google Tag Manager
   runtime, which wraps the original `dataLayer.push`. The guard now keeps a chain
   of replaced implementations and delegates on re-entry.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.9.4**
 *  Last updated **14 minutes ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.8 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [ad fraud](https://wordpress.org/plugins/tags/ad-fraud/)[bot](https://wordpress.org/plugins/tags/bot/)
   [conversion](https://wordpress.org/plugins/tags/conversion/)[google ads](https://wordpress.org/plugins/tags/google-ads/)
 *  [Advanced View](https://wordpress.org/plugins/redkirin-ad-click-verification/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/redkirin-ad-click-verification/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/redkirin-ad-click-verification/reviews/)

## Contributors

 *   [ redkirin ](https://profiles.wordpress.org/redkirin/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/redkirin-ad-click-verification/)