=== SearchCue: AI Site Search & Answers ===
Contributors: donoharm
Tags: search, site search, ai search, chatbot, agent
Requires at least: 6.0
Tested up to: 7.1
Stable tag: 0.5.1
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Fast, typo-tolerant site search with cited AI answers for your pages, products, and documents. Fast setup, no code, and no local search index.

== Description ==

Give your visitors instant, typo-tolerant search, combined with AI answers that are based on only your content. SearchCue takes minutes to install, and since you don't have to hold the local index in your database, it keeps your backend clean.

[Live demo](https://searchcue.com/) | [Pricing](https://searchcue.com/#pricing) | [Docs](https://searchcue.com/docs/) | [Privacy policy](https://donoharm.world/privacy-policy/searchcue/)

**What you get**

Exceptional search:

* Real-time, typo-tolerant results that appear as visitors type
* Search across pages, PDFs, Word documents, PowerPoint presentations, and other supported documents
* OCR and image understanding that can make image content discoverable when useful text is missing
* Rich WooCommerce product and variation results with prices, sale and stock status, images, tags, and more

Complete answers and not just links:

* Optional cited AI answers generated from your indexed site content, with links to the sources used
* Semantic matching that can find relevant pages even when a query uses different wording

Full control:

* Search lenses for managing what content is searchable in different parts of your website or based on the users language
* Built-in search analytics showing popular terms, clicks, and searches that returned no results
* A hosted design editor for adapting the search interface without changing the plugin or your theme
* Optional automatic reindexing of public pages, posts, or products as you make changes

**Works beyond WordPress**

The same SearchCue account can also provide search for Webflow, Shopify, Squarespace, and hand-built sites.

**Pricing**

The plugin is free and GPL-licensed. The hosted service starts with a 15-day free trial, no credit card required. After that, plans start at €9 per month and include an AI answer allowance. You can set a hard monthly AI budget; once it is reached, SearchCue falls back to keyword results at no extra cost. Paying for AI answers beyond the allowance is always optional. See the [current SearchCue pricing and plan limits](https://searchcue.com/#pricing).


== Screenshots ==

1. One search window for keyword results and cited AI answers
2. Easily change colours, layout, position and more in the design editor


== Installation ==

1. Install and activate SearchCue through the WordPress Plugins screen.
2. Open SearchCue in WordPress admin and enter your email address.
3. Follow the magic link to sign up or sign in and connect the site.
4. SearchCue crawls the site and enables its floating search launcher. It can also use your existing search input or any link to `/search`.

If Password Protected is enabled, first allow the SearchCue IP addresses shown in the plugin, either automatically or manually. Without that access, connection verification and crawling will fail.


== Frequently Asked Questions ==

= What are cited AI answers? =

SearchCue can answer a visitor's question using indexed content from your site and link to the sources used. AI answers can be incomplete or inaccurate, so visitors should use the cited sources to verify important information.

= What does it cost? =

The plugin is free. The hosted service has a 15-day free trial with no credit card. Paid plans currently start at €9 per month. Current prices and limits are listed on the [SearchCue pricing page](https://searchcue.com/#pricing).

= Does it slow down my site or database? =

The browser embed downloads without delaying the page's load event. If the site's Content Security Policy prevents this loading route, a native script request starts only after the page has loaded. SearchCue does not build or query a local search index. The plugin stores its settings in WordPress and, when Automatic updates is enabled, notifies us when public content changes so we can ensure the search always remains up to date.

= Does it answer unrelated general-knowledge questions? =

SearchCue is designed to answer questions from the content of your site. If your website does not support an answer, our system says as much rather than inventing an answer.

= Does it search images? =

SearchCue extract text content from images and also does its best to to derive an understanding of what your images contain. This can make image content discoverable even when captions or alt texts are missing.

= Do I need to change my theme or add code? =

No. SearchCue includes a floating search launcher and can take over a standard search input or any link to `/search`. As with other frontend plugins, the theme must call the standard WordPress `wp_head()` function.

= Does it search PDFs and office documents? =

Yes. Supported PDFs, Word documents, PowerPoint presentations, and spreadsheets can be indexed alongside your pages, so manuals, specifications, and price lists can appear in results.

= Does it provide faceted filters or refinement menus? =

Yes. When WooCommerce is active, SearchCue indexes published, catalog-visible products and visible variations as rich product results. Their prices, sale and stock status, categories, tags, and attributes can power faceted filters and refinement menus. Ordinary page crawling remains available if the catalog cannot be retrieved.

= Does it index translated WooCommerce products from GTranslate? =

Yes, for active GTranslate Translation Delivery Network (TDN) installations that translate on the server and use language subdirectories on the same origin, such as `/en/`. Browser-only translation, language subdomains, and separate translation domains are not supported.

SearchCue detects the configured source and enabled target languages. Product names, long and short descriptions, visible attribute names and values, category and tag labels, image alternative text, and public URLs are translated. Product and variation IDs, SKUs, prices, currency, and stock status stay tied to the current WooCommerce catalogue. Category hierarchies remain separate for each language. Proven product-page URL aliases are replaced by the corresponding rich product result without merging different languages or losing variations. Retained aliases are reconciled before applying partial-crawl page limits, so they do not displace ordinary pages.

Editorial pages remain pages when they merely embed a product. Previously replaced product pages can fall back to retained page content when only the crawl request budget prevented a fresh fetch. Confirmed updates and removals still take precedence.

The hosted crawler requests only bounded product selections through GTranslate, using a per-request translation header rather than changing global JSON translation settings. Cached text is reused when its source content is unchanged, including during price and stock updates. Adding or removing another target language does not refresh valid cached translations for unchanged targets. Cached translations become eligible for refresh after seven days to pick up manual translation edits; missing translations take priority.

Each translation request is limited to 20 parent products and 200,000 bytes of untranslated JSON. Each crawl is limited to 100 translation attempts and 1,000,000 bytes across all target languages, within the product-fetch deadline of 15 minutes. WordPress enforces each request's reserved byte allowance before returning translatable content, including when products change after the source fetch. Translation requests are not retried automatically or followed through redirects. Products deferred by these limits are considered on later crawls. A family too large for one request, or a failed translation without a complete valid cache for its current variations, remains eligible for ordinary page indexing instead of being labelled with untranslated text. These are request and input-size limits, not a guarantee of zero charges under your GTranslate plan.

Crawl progress reports the language and batch being fetched, for example `Fetching products (EN)`, and distinguishes cached text from translation refreshes.

= Can I limit search to one section or language? =

Yes. Search lenses can include or exclude URL paths and select different content for sections or language paths on your site.

= Can I disable automatic content updates? =

Yes. Disable Automatic updates in the SearchCue settings page to stop the plugin from sending changed public URLs. Our content indexer will still crawl your website once per day.

= Can I use a password-protected staging site? =

The plugin detects Password Protected and lists SearchCue's public IP addresses. You can add them manually in Password Protected settings or explicitly enable automatic permission. Automatic permission checks the list hourly through WordPress cron, on settings-page visits when a check is due, or when you click Refresh IP list. WordPress cron needs traffic or a server-side scheduler. Managed access expires seven days after the last successful check. Turning it off, deactivating SearchCue, or uninstalling SearchCue removes managed access without changing IPs you entered manually.

Allowing access lets SearchCue crawl and index content behind Password Protected. The WordPress password does not protect SearchCue results or AI answers. Do not grant access to content that must stay private. Use SearchCue's Exclude and Search Lens controls to select content, not to authenticate visitors. Excluding content from one lens does not remove it from other lenses. Other password plugins, HTTP authentication, firewalls, proxies, or CDNs may need separate configuration.

= Does SearchCue work without an account? =

No. The plugin is an interface to the hosted SearchCue service. An account and an active trial or paid subscription are required for hosted search.

= Is this compatible with my WordPress version? =

The clean-install matrix covers WordPress 6.0 through 7.1 and PHP 7.4 through 8.5. It tests the PHP 7.4 floor on WordPress 6.0, every PHP 8 minor, and the available PHP 8.2 and 8.5 boundaries on WordPress 7.1 with debugging enabled.


== External services ==

SearchCue is a hosted site search and optional cited AI answer service. The plugin makes these external requests:

* Setup and admin analytics: When an administrator submits the connection form, the plugin sends the email address, site URL, WordPress admin return URL, and a random setup state to `https://central.searchcue.com`. It later exchanges a one-time handoff token there and uses the assigned API key to retrieve site search analytics.
* Password Protected access: When an administrator opens SearchCue settings with Password Protected installed, or requests a refresh, the plugin retrieves the public IP list from `https://central.searchcue.com/site-search/integrations/wordpress/allowed-ips.json`. Settings-page checks are limited to once per hour. With automatic permission enabled, it also refreshes through hourly WordPress cron. This request needs no account and sends no content or account credentials. The list includes the public addresses used by SearchCue's central and crawler nodes, not internal network addresses.
* Automatic content updates: While Automatic updates is enabled, the plugin sends the site hostname, an IndexNow verification key, and changed public URLs to `https://central.searchcue.com` so SearchCue can refresh the index. It sends the parent product URL after product or variation changes, the public URL of a post or product after its category or tag assignments change, and the home page URL after a category or tag is edited or deleted. Unchanged core saves ignore modification timestamps and editor locks; custom-field changes made alongside a save remain eligible. Image changes notify affected public pages and products instead of image files, using upload parents, featured images, WooCommerce galleries, saved content, gallery shortcodes, and synced blocks. Public HTML attachment pages are notified when enabled; unreferenced parentless images without these pages do not trigger updates. Public document attachments keep their direct URLs. Theme-generated references, CSS, options, and plugin-specific fields are outside this standard reference mapping. Changed URLs and image-reference snapshots are stored in non-autoloaded WordPress options. A once-per-minute cron job sends bounded URL batches and resolves image references in resumable slices of at most 200 stored post IDs, combining changes across requests. Large sites take multiple cron runs to resolve all references. Unacknowledged batches remain queued for retry. Disabling Automatic updates or deactivating the plugin pauses delivery and scanning; deleting the plugin removes queued work and scheduled jobs. Sites with WP-Cron disabled need an external cron runner.
* WooCommerce catalogue indexing: SearchCue requests WooCommerce products and visible variations from an authenticated plugin endpoint, with 10 parent products per ordinary page and each parent's variations kept together. The plugin returns names, descriptions, public URLs, product and variation IDs, SKUs, prices and currency, sale and stock status, categories and tags with their identities and parent relationships, attributes, images, and timestamps. Only published, visible catalogue data is returned. The plugin excludes drafts, hidden or password-protected products, orders, customers, and download files.
* GTranslate product translations: For supported server-side, same-origin subdirectory installations, SearchCue requests selected public product text through the site's existing GTranslate TDN. The authenticated endpoint exposes the active translation configuration and a bounded text-only projection; orders, customers, hidden attributes, and private products are excluded. This uses the site's existing GTranslate service and does not change global JSON translation settings.
* Blog taxonomy indexing: SearchCue requests the categories and tags of published posts from an authenticated plugin endpoint. The plugin returns public post URLs, post IDs, and the identities, names, and parent relationships of the categories and tags assigned to each post, including ancestor categories. Only published, public posts are returned. The plugin excludes post content, drafts, private posts, password-protected posts, and user data.
* Visitor search: After the site is connected, public pages load executable code from `https://searchcue.com/search-embed.js`. That embed contacts `https://central.searchcue.com` and `https://edge.searchcue.com` to load settings, perform searches, and record visitor search terms, originating page paths, whether searches returned results, clicked result paths, and search performance and outcome metrics. If cited answers are enabled, visitor questions and relevant indexed excerpts are sent to SearchCue for cited answer generation.

Admin interface fonts are bundled with the plugin under the SIL Open Font License 1.1 and do not make external requests. The font license texts are included with the font files.

Like other web requests, these connections disclose network information such as the requester IP address and browser user agent. SearchCue uses the data to provide, secure, maintain, troubleshoot, and improve the service and to show search analytics to the site administrator. Site administrators are responsible for providing any visitor privacy notices and obtaining any consent required for their site.

Use of the service is governed by the [SearchCue Terms and Conditions](https://searchcue.com/terms/). Data handling is described in the [SearchCue Privacy Policy](https://donoharm.world/privacy-policy/searchcue/).

== Hosted service disclosure ==

SearchCue is a software-as-a-service (SaaS) product operated by DoNoHarm GmbH. This plugin connects your site to SearchCue, which crawls or receives public content, hosts the search index, and serves visitor searches and optional AI answers. A SearchCue account is required. The plugin does not provide search locally without the hosted service.

By connecting a site, an administrator agrees to the SearchCue terms and acknowledges the privacy policy:

* Service: [https://searchcue.com/](https://searchcue.com/)
* Terms and Conditions: [https://searchcue.com/terms/](https://searchcue.com/terms/)
* Privacy Policy: [https://donoharm.world/privacy-policy/searchcue/](https://donoharm.world/privacy-policy/searchcue/)


== Changelog ==

= 0.5.1 =

* Reduce server load during WooCommerce indexing
* Process image changes in smaller, resumable background batches
* Avoid unnecessary reindexing when posts are saved without content, custom-field, or taxonomy changes.
* Limit blog category and tag lookups to posts included in the crawl instead of scanning every post.

= 0.5.0 =

* Add support for indexing GTranslate-translated WooCommerce products on sites using server-side translation and same-site language subdirectories.
* Improve automatic reindexing when images change or are deleted, including images reused across pages, featured images, galleries, and synced blocks. Notify affected pages and products rather than image-only URLs.
* Make automatic content updates more reliable with a persistent queue, batched delivery, and retries through WordPress cron. Saving content no longer waits for a remote request.
* Exclude the SearchCue embed from WP Rocket minification so it continues to load and update directly from SearchCue.

= 0.4.0 =

* Add support for the Password Protected plugin, with optional automatic whitelisting of IP addresses needed by SearchCue to crawl and access your site

= 0.3.0 =

* Add authenticated exports of category and tag IDs, names, and category hierarchies for public blog posts.
* Include category and tag IDs and category hierarchies in WooCommerce product exports.
* Notify SearchCue when categories, tags, or their assignments change, respecting the Automatic updates setting.

= 0.2.2 =

* Reorganize plugin internals for readability without changing behavior.

= 0.2.1 =

* Keep WooCommerce product search availability synchronized with SearchCue.
* Reset stale connections when the WordPress site URL changes or the SearchCue connection is revoked.

= 0.2 =

* Add support for WooCommerce products.

= 0.1.2 =

* Fixes redirect to the SearchCue administrative interface after activation to help users complete the required setup.

= 0.1.1 =

* Declare compatibility with WordPress 7.1.

= 0.1.0 =

* Initial WordPress.org release.
