{"id":352972,"date":"2026-08-24T15:57:06","date_gmt":"2026-08-24T15:57:06","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smartmatch-search\/"},"modified":"2026-09-23T13:43:17","modified_gmt":"2026-09-23T13:43:17","slug":"smartmatch-search","status":"publish","type":"plugin","link":"https:\/\/pe.wordpress.org\/plugins\/smartmatch-search\/","author":23232135,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.2","requires":"7.0","requires_php":"8.0","requires_plugins":null,"header_name":"SmartMatch Search","header_author":"Burst Statistics","header_description":"Overrides the WordPress site search with AI-powered semantic relevance, using the WordPress \"AI\" plugin for provider\/model selection and Burst Statistics to restrict the feature to validated human visits (bot exclusion). Works in both cookie and cookieless mode.","assets_banners_color":"484b5d","last_updated":"2026-09-23 13:43:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/burst-statistics.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":199,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"burstbv","date":"2026-08-24 16:05:57","revision":3663877},"1.0.1":{"tag":"1.0.1","author":"burstbv","date":"2026-09-23 13:43:17","revision":3709438}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3664878,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3664878,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3664878,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3664878,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[220145,944,140844,3541,47816],"plugin_category":[],"plugin_contributors":[277287,193375,259172,78306,223420],"plugin_business_model":[],"class_list":["post-352972","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-search","plugin_tags-search","plugin_tags-semantic-search","plugin_tags-site-search","plugin_tags-smart-search","plugin_contributors-burstbv","plugin_contributors-hesseldejong","plugin_contributors-parthnvaswani","plugin_contributors-rogierlankhorst","plugin_contributors-sh4lin","plugin_committers-burstbv","plugin_committers-rogierlankhorst"],"banners":{"banner":"https:\/\/ps.w.org\/smartmatch-search\/assets\/banner-772x250.png?rev=3664878","banner_2x":"https:\/\/ps.w.org\/smartmatch-search\/assets\/banner-1544x500.png?rev=3664878","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/smartmatch-search\/assets\/icon-128x128.png?rev=3664878","icon_2x":"https:\/\/ps.w.org\/smartmatch-search\/assets\/icon-256x256.png?rev=3664878","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Default WordPress search only matches keywords. If the words a visitor types\ndon't literally appear in a post, they get \"nothing found\", even when your site\nhas exactly the right page.<\/p>\n\n<p>SmartMatch Search looks at what the visitor means instead. It puts the best\nmatching page at the top of the normal search results, marked as the best\nmatch. Visitors can search the way they talk:<\/p>\n\n<ul>\n<li>\"page where I can find my orders\" finds your <strong>Order history<\/strong> page.<\/li>\n<li>\"how do I get my money back\" finds your <strong>Returns &amp; refunds<\/strong> policy.<\/li>\n<li>\"wo finde ich meine rechnung\" (German) finds your English <strong>Invoices<\/strong>\npage. Visitors can search in their own language.<\/li>\n<li>\"cancel my subscription\" finds <strong>Manage your membership<\/strong>, not every post\nthat happens to contain the word \"cancel\".<\/li>\n<\/ul>\n\n<p>It also leaves out results that only share a word with the query: a post\nisn't suggested just because the search term shows up in it somewhere.<\/p>\n\n<h4>Your search only gets better<\/h4>\n\n<p>The normal search results stay where they are. SmartMatch Search only adds a\nsuggestion above them. If nothing relevant is found, or the AI is unavailable,\nvisitors see the normal results as before. When the normal search finds\nnothing, the suggestion becomes the result, so visitors don't hit an empty\npage.<\/p>\n\n<p>It works with your existing search form and theme, both classic and block\nthemes. You don't need a new template or shortcode.<\/p>\n\n<h4>Only real visitors, so you only pay for real searches<\/h4>\n\n<p>Every AI search costs you a small amount at your AI provider, so you want to\nspend that on people, not bots. This is why SmartMatch Search works together\nwith Burst Statistics. Burst already filters bots, crawlers and spam out of\nyour visits. SmartMatch Search only uses the AI for visits Burst has counted as\nhuman. Bots get the normal search results and cost you nothing.<\/p>\n\n<p>Logged-in users always get the AI search, even without a Burst visit, for\nexample when Burst doesn't track their user role. A logged-in user is never\na bot.<\/p>\n\n<p>Costs are also limited by:<\/p>\n\n<ul>\n<li><strong>A daily budget<\/strong>: a maximum number of AI searches per day (default 50).\nWhen it's used up, visitors get the normal search results until midnight.<\/li>\n<li><strong>Caching<\/strong>: the same search is answered from cache and costs nothing extra.<\/li>\n<li><strong>A rate limit per visitor<\/strong>, which stops one person from using up your\nbudget.<\/li>\n<\/ul>\n\n<h4>See what visitors are looking for<\/h4>\n\n<p>Searches show up in the Engagement tab of your Burst dashboard. You see what\nvisitors search for, and where your content doesn't answer their questions yet.<\/p>\n\n<h3>Settings<\/h3>\n\n<ul>\n<li><strong>Daily search budget<\/strong>: the maximum number of AI searches per day.<\/li>\n<li><strong>Posts sent to the AI<\/strong>: how many posts the AI can choose from per search.\nPages are always included, the rest are your most recently updated posts.\nMore posts help on large sites, but make each search more expensive.<\/li>\n<li><strong>Excerpt length in words<\/strong>: how much of each post the AI gets to read.\nLonger excerpts help the AI judge relevance, but cost more per search.<\/li>\n<li><strong>Badge for the suggested result<\/strong>: a short text before the title of the\nsuggestion, e.g. \"(Best match)\". Leave it empty to show no badge.<\/li>\n<li><strong>Prompt customization<\/strong>: extra instructions for the AI, for example to\ngive certain content priority.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>SmartMatch Search does not connect to any service of its own and sends no data\nto Burst or SmartMatch servers. When a search needs an AI answer, the search\nterm and the candidate posts (post ID, post type, title, URL path and a short\nexcerpt of public, published content) are sent to the AI provider that you\nconfigured in the WordPress AI plugin. Which provider that is depends entirely\non your configuration there, and its terms of service and privacy policy apply\nto those requests. This only happens for validated human visits, within the\ndaily budget, and only when the answer isn't already cached. No IP addresses or\nvisitor identifiers are included in these requests.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the <a href=\"https:\/\/wordpress.org\/plugins\/ai\/\">AI plugin<\/a>\nand connect an AI provider in its settings.<\/li>\n<li>Install and activate Burst Statistics (free) or Burst Pro.<\/li>\n<li>Install and activate SmartMatch Search.<\/li>\n<\/ol>\n\n<p>That's it. Your search now shows a best match for human visitors and\nlogged-in users. You can adjust the settings under Statistics \u2192 Settings \u2192\nSmartMatch Search.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20ai%20provider%20does%20smartmatch%20search%20use%3F\"><h3>Which AI provider does SmartMatch Search use?<\/h3><\/dt>\n<dd><p>The one you set up in the WordPress AI plugin. SmartMatch Search has no AI\nservice of its own. Your credentials are configured once, in the AI plugin,\nand SmartMatch Search uses them.<\/p><\/dd>\n<dt id=\"why%20don%27t%20i%20see%20a%20suggestion%20when%20i%20test%20it%20myself%3F\"><h3>Why don't I see a suggestion when I test it myself?<\/h3><\/dt>\n<dd><p>Test while logged in: logged-in users always get the AI search. Logged out,\nthe AI only runs for visits Burst has counted, so if you block tracking in\nyour browser you'll see the normal results. Also check that the AI plugin\nhas a working provider and that today's search budget isn't used up.<\/p>\n\n<p>To find out why a search didn't get a suggestion, add this to wp-config.php.\nEvery reason for skipping the AI is then written to the PHP error log:<\/p>\n\n<pre><code>define( 'SMARTMATCH_SEARCH_DEBUG', true );\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20exclude%20certain%20post%20types%20from%20the%20suggestions%3F\"><h3>Can I exclude certain post types from the suggestions?<\/h3><\/dt>\n<dd><p>Yes, with the <code>smartmatch_search_post_types<\/code> filter. It receives the list of\npost types that can be suggested. By default that's all public post types\nthat are included in search. For example, to leave out WooCommerce products:<\/p>\n\n<pre><code>add_filter( 'smartmatch_search_post_types', function ( $post_types ) {\n    return array_diff( $post_types, [ 'product' ] );\n} );\n<\/code><\/pre><\/dd>\n<dt id=\"does%20it%20change%20the%20search%20results%20on%20page%202%20and%20beyond%3F\"><h3>Does it change the search results on page 2 and beyond?<\/h3><\/dt>\n<dd><p>No. The suggestion only appears on the first page of the results.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>September 8th, 2026<\/li>\n<li>Fix: pages are always part of the candidate set instead of being pushed out\nby more recently updated posts.<\/li>\n<li>Improvement: each candidate now includes its URL path, so navigational\nqueries (e.g. \"invoice\" for \/account\/invoices\/) match pages whose title and\nexcerpt do not mention the term.<\/li>\n<li>Fix: the provider is asked for schema-enforced JSON output, so the model can\nno longer answer in prose; plain-text fallback for models without\noutput-schema support.<\/li>\n<li>Fix: the response parser tolerates prose around the answer and object-shaped\nresponses, and logs provider errors explicitly.<\/li>\n<li>Improvement: default number of posts sent to the AI raised from 200 to 500.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>July 9th, 2026<\/li>\n<li>New: Initial release.<\/li>\n<\/ul>","raw_excerpt":"AI search that understands what visitors mean: they find the right page in their own words \u2014 or another language. Burst keeps bots out.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/352972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=352972"}],"author":[{"embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/burstbv"}],"wp:attachment":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=352972"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=352972"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=352972"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=352972"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=352972"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=352972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}