{"id":360747,"date":"2026-08-30T11:30:18","date_gmt":"2026-08-30T11:30:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/robse-form-guard\/"},"modified":"2026-10-17T02:13:42","modified_gmt":"2026-10-17T02:13:42","slug":"robse-form-guard","status":"publish","type":"plugin","link":"https:\/\/sq.wordpress.org\/plugins\/robse-form-guard\/","author":23557140,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.3.0","stable_tag":"2.3.0","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Robse Form Guard","header_author":"Robse LLC","header_description":"Blocks Japanese cold-sales submissions to your contact form by scoring the wording, with a honeypot and a rate limit. Blocked messages are forwarded to you instead of being thrown away.","assets_banners_color":"474746","last_updated":"2026-10-17 02:13:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/robse.jp\/plugins\/robse-form-guard\/","header_author_uri":"https:\/\/robse.jp\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":387,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.1":{"tag":"2.1.1","author":"robsejp","date":"2026-08-30 11:29:57","revision":3672453},"2.2.0":{"tag":"2.2.0","author":"robsejp","date":"2026-10-05 12:59:33","revision":3728951},"2.3.0":{"tag":"2.3.0","author":"robsejp","date":"2026-10-17 02:13:42","revision":3751325}},"upgrade_notice":{"2.3.0":"<p>Adds a history of blocked submissions kept on your site for 30 days, a too-fast check, and matching that sees through full-width letters and inserted spaces. Your mode and keyword list are kept.<\/p>","2.2.0":"<p>Messages that match only greetings and forms of address are no longer blocked. Your saved keyword list and settings are kept as they are.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3672453,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3672453,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3672453,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3672453,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.1.1","2.2.0","2.3.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[109,358,1152,5622,599],"plugin_category":[54],"plugin_contributors":[278315],"plugin_business_model":[],"class_list":["post-360747","plugin","type-plugin","status-publish","hentry","plugin_tags-antispam","plugin_tags-contact-form","plugin_tags-contact-form-7","plugin_tags-japanese","plugin_tags-spam","plugin_category-security-and-spam-protection","plugin_contributors-robsejp","plugin_committers-robsejp"],"banners":{"banner":"https:\/\/ps.w.org\/robse-form-guard\/assets\/banner-772x250.png?rev=3672453","banner_2x":"https:\/\/ps.w.org\/robse-form-guard\/assets\/banner-1544x500.png?rev=3672453","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/robse-form-guard\/assets\/icon-128x128.png?rev=3672453","icon_2x":"https:\/\/ps.w.org\/robse-form-guard\/assets\/icon-256x256.png?rev=3672453","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>A CAPTCHA proves the sender is a human being. It does not stop a human being\nwhose job is to send sales pitches through other people's contact forms. If you\nrun a small business in Japan, that is most of what arrives in your inbox.<\/p>\n\n<p>Robse Form Guard reads each submission and scores its wording. Japanese\nbusiness-to-business sales boilerplate \u2014 \u8cb4\u793e, \u3054\u62c5\u5f53\u8005\u69d8, \u521d\u671f\u8cbb\u7528,\n\u5c0e\u5165\u5b9f\u7e3e and the like \u2014 is language a private customer asking about your work\nsimply does not use. When enough of it piles up in one message, the submission\nis stopped.<\/p>\n\n<p><strong>Blocked submissions are kept, and can be forwarded to you.<\/strong> Each blocked\nsubmission is saved in a history on your own site (Settings &gt; Robse Form Guard &gt;\nHistory) for 30 days by default, with the reason, the score and the words that\nmatched. With forwarding turned on (the default), it is also emailed in full to\nthe site administrator or an address you choose. The history shows whether\neach email went out, and can send any entry again, so a copy is not lost when\nyour site cannot send mail. The visitor is shown a phone number or address you\nchoose, so a real customer caught by mistake can still reach you.<\/p>\n\n<h4>What it checks<\/h4>\n\n<ol>\n<li><strong>A honeypot.<\/strong> A field a person cannot see and a script fills in.<\/li>\n<li><strong>Too fast.<\/strong> A form sent within a few seconds of being shown (3 by\ndefault) was not typed by a person. Cached pages are never caught by this.<\/li>\n<li><strong>A rate limit.<\/strong> Repeated submissions from one address in a short time.<\/li>\n<li><strong>The wording.<\/strong> Each keyword carries points; the submission is stopped when\nthe total reaches the score you set. The starting list and every weight are\neditable, and you can add your own words. Forms of address and greetings\n(\u8cb4\u793e, \u3054\u62c5\u5f53\u8005\u69d8, \u3068\u7533\u3057\u307e\u3059, \u5f0a\u793e and so on) are written by companies asking\nfor a quote as well as by salespeople, so a message that matches only those\nis never stopped: something being sold, or a link, has to be there too.<\/li>\n<\/ol>\n\n<p>The wording is compared after folding the ways a word can be written:\nfull-width and half-width letters, upper and lower case, and spaces or\ninvisible characters slipped into a word (\uff33\uff25\uff2f, seo, \u5fa1 \u793e) all count.\nLinks are found in http(s):\/\/, www. and example.com\/page forms, but a\nvisitor's own email address is never counted as a link.<\/p>\n\n<h4>Try it before you trust it<\/h4>\n\n<p>A new installation starts in <strong>watch only<\/strong>: it records, and emails you, what\nit <em>would<\/em> have blocked while letting everything through. Run that for a week,\nlook at the History tab, then turn blocking on. Sites that used an earlier\nversion keep the mode they had.<\/p>\n\n<h4>Which form plugins<\/h4>\n\n<ul>\n<li>Contact Form 7<\/li>\n<li>Snow Monkey Forms<\/li>\n<\/ul>\n\n<p>It sits alongside reCAPTCHA, Akismet or Turnstile rather than replacing them:\nthose stop machines, this stops people who are paid to write to you.<\/p>\n\n<h4>For Japanese sites<\/h4>\n\n<p>The keyword list is Japanese and the plugin is aimed at Japanese-language\nsites. On a site in another language, replace the list with your own wording\nunder Settings.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>When a submission is stopped (or, in watch-only mode, would have been), the\nplugin stores its full contents, the time and the submitting IP address in a\ndatabase table of its own (<code>{prefix}robse_form_guard_log<\/code>). Entries are deleted\nautomatically after the number of days set on the settings screen (30 by\ndefault, at most 5,000 entries), and can be deleted by hand at any time. The\nhistory can be turned off. It is included in WordPress's personal data export\nand erasure tools, matched by the email address in the submission, and the\nplugin suggests wording for your privacy policy.<\/p>\n\n<p>When forwarding is turned on (the default), the same contents are emailed to\nthe address configured on the settings screen, which defaults to the site's\nown administration email address. That email is sent by WordPress from the\nsite itself. No data is transmitted to the plugin author or to any third\nparty, and the plugin makes no outbound network requests.<\/p>\n\n<p>The rate limit stores a hashed form of the submitting IP address in a\ntransient, which expires on its own within the window you configure. The\ntoo-fast check adds a hidden field holding the time the form was shown and a\nsignature; nothing about the visitor is stored for it.<\/p>\n\n<p>Uninstalling the plugin removes its settings and the history table.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Settings &gt; Robse Form Guard<\/strong>.<\/li>\n<li>Fill in <strong>how a real customer can still reach you<\/strong> \u2014 a phone number is the\nusual choice. Do not skip this: it is the only way out for someone the\nplugin wrongly stops.<\/li>\n<li>The plugin starts in <strong>watch only<\/strong>. Leave it so for the first week and read\nthe History tab (or the emails it sends you).<\/li>\n<li>Switch to <strong>block<\/strong> once the verdicts look right.<\/li>\n<\/ol>\n\n<h4>Rolling it out to many sites<\/h4>\n\n<p>These constants in <code>wp-config.php<\/code> win over the settings screen, so a\ndeployment script can configure a site without touching its database:<\/p>\n\n<pre><code>define( 'ROBSE_FORM_GUARD_TEL', '03-0000-0000' );\ndefine( 'ROBSE_FORM_GUARD_QUARANTINE', 'you@example.com' );\ndefine( 'ROBSE_FORM_GUARD_THRESHOLD', 4 );\ndefine( 'ROBSE_FORM_GUARD_MODE', 'block' ); \/\/ or 'monitor'\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"it%20blocked%20a%20real%20customer.\"><h3>It blocked a real customer.<\/h3><\/dt>\n<dd><p>Open the History tab, or the email it sent you \u2014 both list the words that\nmatched and the score, and the history keeps what they wrote so you can reply.\nEither lower the points on the word that misfired, or raise the score needed\nto match. Both are on the settings screen.<\/p><\/dd>\n<dt id=\"will%20it%20stop%20bots%3F\"><h3>Will it stop bots?<\/h3><\/dt>\n<dd><p>The honeypot will stop simple ones. For machine submissions in general, keep\nreCAPTCHA, Turnstile or Akismet switched on as well. This plugin is aimed at\nthe sales messages a human being typed.<\/p><\/dd>\n<dt id=\"does%20it%20send%20my%20form%20data%20anywhere%3F\"><h3>Does it send my form data anywhere?<\/h3><\/dt>\n<dd><p>No. Blocked submissions are kept in your own site's database. The only\nmessage it sends is the copy of a blocked submission, by email and only while\nforwarding is turned on, to the address you set on the settings screen \u2014 your\nown site's administrator address unless you change it. Nothing is sent to the\nplugin author or to any other server.<\/p><\/dd>\n<dt id=\"the%20blocked%20copies%20are%20filling%20my%20inbox.\"><h3>The blocked copies are filling my inbox.<\/h3><\/dt>\n<dd><p>Read them for the first few weeks. After that you can filter the subject line\ninto a folder, or turn forwarding off and use the History tab instead.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20on%20a%20site%20that%20is%20not%20in%20japanese%3F\"><h3>Can I use it on a site that is not in Japanese?<\/h3><\/dt>\n<dd><p>Yes, but the built-in list will not match anything. Replace it with the sales\nboilerplate used in your language.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>New History tab: every blocked submission, and in watch-only mode every one\nthat would have been blocked, is kept on your site with the reason, the score,\nthe matched words and whether the forwarding email went out. Entries can be\nread, emailed to you again or deleted, and are deleted automatically after\n30 days (adjustable, or turn the history off).<\/li>\n<li>New \"too fast\" check: a form sent within 3 seconds of being shown is stopped.\nThe number of seconds can be changed, or the check turned off.<\/li>\n<li>The wording is now compared after folding full-width\/half-width letters,\nupper\/lower case and spaces or invisible characters inside a word, so \uff33\uff25\uff2f,\nseo and \u5fa1 \u793e now match SEO and \u5fa1\u793e. Latin-letter keywords such as SEO match\nas whole words only. Your saved keyword list keeps working as it is.<\/li>\n<li>Links written as www.example.jp, example.com\/page or a defanged hxxp:\/\/ now\ncount as a link. A visitor's email address never does.<\/li>\n<li>A new installation now starts in watch-only mode. Sites updating from an\nearlier version keep their mode. <code>ROBSE_FORM_GUARD_MODE<\/code> can set it from\nwp-config.php.<\/li>\n<li>A failed forwarding email is now detected and shown in the history.<\/li>\n<li>Uninstalling now also removes the history table and its scheduled clean-up.<\/li>\n<li>Requires WordPress 6.2 or later (was 6.0).<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>A message whose matches are only forms of address and greetings (\u8cb4\u793e,\n\u5fa1\u793e, \u3054\u62c5\u5f53\u8005, \u62c5\u5f53\u8005\u69d8, \u4ee3\u8868\u8005\u69d8, \u3054\u62c5\u5f53\u8005\u5404\u4f4d, \u3068\u7533\u3057\u307e\u3059, \u7a81\u7136\u306e\u3054\u9023\u7d61,\n\u521d\u3081\u3066\u3054\u9023\u7d61, \u5f0a\u793e, \u696d\u8005\u69d8) is no longer blocked, whatever it scores.\nCompanies asking for a quote write like this too. The honeypot and the rate\nlimit are unchanged. The list can be changed with the\n  robse_form_guard_context_words filter.<\/li>\n<li>\u3068\u7533\u3057\u307e\u3059, \u7a81\u7136\u306e\u3054\u9023\u7d61 and \u521d\u3081\u3066\u3054\u9023\u7d61 now carry 1 point instead of 2 in the\nstarting list. Your saved settings are not changed by the update: if you have\never pressed Save on the settings screen, the keyword list was saved with the\nold points and stays as it is. Edit those three lines, or clear the box to\nuse the new starting list.<\/li>\n<li>Reworded the settings screen, the plugin description and this readme so that\nforwarding of blocked submissions is described as a setting that depends on\nyour site sending mail, not a guarantee.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Removed the bundled Japanese translation files. Translations are handled by\ntranslate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Settings screen: mode, score, keyword list, honeypot, rate limit, quarantine\naddress and the contact route shown to blocked visitors.<\/li>\n<li>Blocked submissions are emailed to the site's own administrator by default.<\/li>\n<li>Watch-only mode for tuning before blocking.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Contact Form 7 support alongside Snow Monkey Forms.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Internal release for Snow Monkey Forms.<\/li>\n<\/ul>","raw_excerpt":"Stops Japanese cold-sales messages reaching your contact form, and keeps each one it blocks so you can check for false positives.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360747"}],"author":[{"embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/robsejp"}],"wp:attachment":[{"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360747"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360747"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360747"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360747"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360747"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sq.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}