Fixing AI Agent Compatibility on a WordPress Site
Most WordPress sites that trouble AI agents are not broken in any obvious way. They look fine and work for people.
The problems come from the plugins layered on top: a contact form with no real labels, a booking calendar made of clickable boxes, a page builder menu that opens only on hover, a cache plugin that holds back scripts until someone moves a mouse, and a cookie banner that covers everything. This guide works through the WordPress plugins and settings that most often stop an agent booking, enquiring or buying, and shows how to fix each without rebuilding the site.
Why WordPress sites trip agents up
WordPress core produces clean HTML. The block editor's own blocks, the default themes and the core Navigation block all follow accessibility guidance reasonably well. Agents run into trouble with what gets added on top, and a typical small business site has a lot on top: a page builder, a form plugin, a booking or appointment plugin, a cache and optimisation plugin, a cookie consent plugin, a security plugin and often WooCommerce with its own extensions.
Each of those plugins produces its own markup and loads its own scripts. Each one was built and configured with human visitors in mind, and each has settings that make it more or less usable by software acting for a person. An AI agent that is booking an appointment, asking for a quote or buying something moves through several of them in one visit, so a single badly configured plugin can end the task.
The good news is that most fixes are settings, not code. Where code is needed it is usually a small change to a form template or a line in the cache plugin's exclusion list.
Plugin by plugin: what to check
| Plugin type | Examples | What goes wrong for agents | Where to look |
|---|---|---|---|
| Form builders | Contact Form 7, Gravity Forms, WPForms, Fluent Forms, Elementor Forms | Placeholder text used instead of labels; hidden labels removed from the HTML; invisible spam checks rejecting the submission | Form template or field settings; spam protection settings |
| Booking and appointments | Amelia, Bookly, Simply Schedule Appointments, WooCommerce Bookings | Calendars drawn as boxes with no names; time slots that only respond to a mouse click; steps that reset on refresh | Plugin appearance settings; an alternative booking route |
| Page builders and menus | Elementor, Divi, Beaver Builder, Max Mega Menu | Sub-menus that open only on hover; icon links with no name; buttons that are styled divs | Menu widget settings; link and button fields |
| Cache and optimisation | WP Rocket, LiteSpeed Cache, Perfmatters, FlyingPress | Scripts delayed until the first interaction, so menus and forms do nothing at first | Delay JavaScript settings and exclusion lists |
| Cookie consent | CookieYes, Complianz, Cookiebot | A full-screen wall that must be answered first; unnamed buttons | Banner layout and button settings |
| Ecommerce | WooCommerce and its extensions | Forced accounts; checkout add-ons with unclear fields | WooCommerce settings for accounts and checkout |
Form plugins
Forms are how a service business gets enquiries, so this is usually the most valuable fix. An agent fills a form by matching each field to what it knows: name, email, phone, the service wanted, the preferred date. It relies on the field's label to do that. A form that uses placeholder text inside the box instead of a label, which many themes and form styles do to look tidy, leaves the agent guessing.
Contact Form 7
Contact Form 7 builds forms from a text template, so labels are only there if the template includes them. The pattern below wraps each field in a label, which is the simplest reliable form:
<label> Your name
[text* your-name autocomplete:name] </label>
<label> Email address
[email* your-email autocomplete:email] </label>
<label> Phone number (optional)
[tel your-phone autocomplete:tel] </label>
<label> What do you need help with?
[select your-service "Boiler service" "Boiler repair" "New installation"] </label>
[submit "Send enquiry"]
If your version of Contact Form 7 does not accept the autocomplete option, leave it out; the labels matter more.
Gravity Forms, WPForms, Fluent Forms and Elementor Forms
These builders create labels from the field name you type, which is good. Check two settings. First,
label visibility: some options hide the label visually but keep it in the HTML, which is fine, while
others remove it altogether and leave only a placeholder. View the page source and check a <label>
element is still there for each field. Second, field names: a field called "Field 3" or "Untitled" produces
a label of "Field 3". Rename every field to what it asks for.
Spam protection
Score-based checks such as Google reCAPTCHA v3 and Cloudflare Turnstile run invisibly. When they judge a visitor to be automated, the form may fail with a vague "there was an error" message or, worse, appear to send while the plugin quietly discards it. A genuine agent working for a customer can be marked as automated because, strictly, it is. Test the form with an agent and check the submission arrives. If it does not, consider a honeypot field, which most form plugins offer, as your first line of defence, and keep the heavier challenge for forms that attract a lot of spam.
Booking and appointment plugins
Booking is a task people increasingly hand to an agent, and booking plugins are some of the hardest pages for agents to use. Many draw their calendar and time slots with JavaScript as a grid of boxes, with the date shown only as a number inside each box and availability shown only by colour.
What an agent needs from a booking step is simple: controls it can identify and operate, with names that say what they are.
<!-- Hard to use: a number in a box, availability shown by colour -->
<div class="day available">14</div>
<!-- Usable: a button whose name gives the full date and status -->
<button type="button" aria-label="Tuesday 14 October, 3 slots available">14</button>
<button type="button" aria-label="Wednesday 15 October, fully booked" disabled>15</button>
You usually cannot change a booking plugin's markup yourself, so the practical route is:
- Check the plugin's settings for an accessible or list view. Several plugins can show available times as a list of buttons rather than a calendar grid, which agents and keyboard users both find easier.
- Try booking with only the keyboard. If you cannot tab to a date and choose it with Enter, an agent will struggle too. Report it to the plugin developer with the details; accessibility fixes help every customer of theirs.
- Offer a second route. A short, well-labelled "request an appointment" form with a preferred date and time lets an agent make the request even when the calendar defeats it. Link to it from the booking page.
- Keep the booking page at its own address. If the booking widget is inside a pop-up on the home page, give it a dedicated page so an agent can be sent straight there.
The fix, step by step
Step 1
List the plugins on your key journeys
Pick the two or three things you most want visitors to do, such as sending an enquiry, booking a visit or buying a product, and note every plugin involved in each: the page builder, the form or booking plugin, the cache plugin, the cookie banner and any shop extensions. Run the AI Agent Compatibility audit on the start page of each journey and set up a staging copy so you can change settings safely.
Step 2
Give every form field a real label
Open each enquiry and quote form in its plugin, rename any field called Field 1 or Untitled to what it asks for, and make sure a label element appears in the page source for every input, even if it is visually hidden. In Contact Form 7, wrap each tag in a label in the template. Submit the form yourself and check the message arrives, then check it again after any spam setting change.
Step 3
Make the booking calendar usable without a mouse
Try making a booking using only the Tab, arrow and Enter keys. If you cannot reach or pick a date or time, look in the booking plugin for a list view of available times or an accessibility option, and switch it on. Give the booking tool its own page rather than a pop-up, and add a short, labelled appointment request form as a fallback route that an agent can always complete.
Step 4
Switch menus from hover to click
In the core Navigation block, set submenus to open on click; in Elementor, Divi or your mega menu plugin, choose the click option where it exists. Make every parent item a real link to a page that lists its children, so the section can be reached even if the sub-menu never opens. Give icon-only header links, such as search, account and basket, a text name in the link settings or a visually hidden label.
Step 5
Exclude interactive scripts from delayed loading
Open your cache or optimisation plugin and find its delay JavaScript setting. If it is on, add exclusions for the scripts your journeys need, such as the form plugin, the booking plugin, the menu toggle and any add to cart script, using part of each file path. Clear every cache layer, load the page in a private window and click the menu and form straight away without moving the mouse first.
Step 6
Make the cookie banner easy to answer
In your consent plugin, choose a banner or box layout rather than a full-screen wall where the law and your own advice allow, and give Accept and Reject buttons plain text names of equal prominence. Check the banner is a labelled dialog or region, that it can be answered with the keyboard, and that answering it once is remembered across pages rather than asked again on every visit.
Step 7
Open up WooCommerce guest checkout and retest
If you run WooCommerce, go to the Accounts and Privacy settings and allow customers to place orders without an account. Review checkout extensions that add fields and make the extras optional unless you truly need them. Then walk each journey again with the keyboard, re-run the audit on each start page, and give an AI agent a realistic enquiry, booking or purchase on the staging site.
Cookie banners and WooCommerce
Cookie banners
In the UK, PECR as amended by the Data (Use and Access) Act 2025 still generally requires consent before non-essential cookies are set, so a consent banner is often needed. This is not legal advice, and your own obligations depend on what the site sets. From an agent's point of view the design matters more than the plugin. A banner that sits at the bottom of the screen with two plainly named buttons is quick to answer. A full-screen wall with a single "Manage" link leading to a panel of toggle switches is slow and error-prone, and an agent may refuse to make a privacy choice on the person's behalf and stop to ask.
WooCommerce
WooCommerce is used differently from Shopify because you control the whole checkout. Newer installs use the Cart and Checkout blocks, which are built with labelled fields and autocomplete attributes. Older sites may still use the shortcode checkout with a theme template on top, where field labels and error messages vary. Points to check:
- Guest checkout is a setting under Accounts and Privacy. Forced accounts are the step most likely to stop an agent.
- Extensions that add checkout fields, such as delivery date pickers and gift options, should add labelled fields and keep them optional.
- Payment gateways usually take over in an embedded frame or a separate page. That is where the agent hands back to the customer, and it should be.
- Stock and price should be in the product page HTML, not loaded later by a variation script, so an agent that reads the page gets the right answer. The checkout guide covers the rest of the hand-over.
Keeping it working after updates
- Test after plugin updates to your form, booking, page builder and cache plugins. Updates can reset settings or change markup.
- Keep changes on staging first. A staging copy lets you try a menu or delay setting without affecting customers.
- Write down your exclusions. A note of which scripts you excluded from delayed loading, and why, stops a future speed tweak undoing the fix.
- Check new forms before publishing. Label every field and submit a test before linking the form anywhere.
- Re-run the audit on your enquiry and booking pages each quarter and after any theme change.
1. Why can an AI agent not send my Contact Form 7 form?
The usual reasons are missing labels and spam protection. Contact Form 7 only outputs labels that are written into the form template, so a template that uses placeholders alone leaves an agent unsure which box is which. If you use reCAPTCHA v3 or another invisible check, the agent may be scored as automated and the message rejected or discarded. Add labels to the template, then submit a test with an agent and check the message actually reaches your inbox.
2. Do I need to replace my booking plugin?
Not necessarily. Start by trying a booking with only the keyboard and looking for a list view or accessibility option in the plugin settings. If the calendar still cannot be operated without a mouse, add a simple, labelled appointment request form as a second route, and ask the plugin developer about accessibility improvements. Replace the plugin only if bookings are central to the business and the developer cannot or will not fix it.
3. Is WP Rocket bad for AI agents?
No. WP Rocket and similar plugins make pages faster, which helps agents. The one feature to watch is delaying JavaScript until the first interaction, because menus, forms and booking tools that depend on those scripts do nothing until the visitor moves, scrolls or presses a key. An agent clicking a menu button first may see no response. Keep the feature if you like it, but exclude the scripts that power your key journeys, then retest.
4. Does Elementor work with AI agents?
Elementor sites can work well, but some widgets need care. Check that nav menus open on click as well as hover, that icon boxes and buttons use real links with meaningful text rather than empty links around an image, and that form fields keep their labels in the HTML. Elementor and other builders add a lot of wrapper markup, which does not stop agents on its own. What matters is that every control has a name and does something predictable.
5. Will a cookie banner stop an AI agent?
A simple banner rarely stops an agent, although many agents will pause and ask the person before making a consent choice for them. A full-screen wall that must be answered before the page can be used, especially with toggles hidden behind a Manage link, is more likely to end the task. Use a banner layout with clearly named Accept and Reject buttons, remember the answer, and check the banner can be operated with the keyboard.
6. Should I let AI agents create WooCommerce accounts?
Agents generally should not be creating accounts for people, and reputable ones avoid it because it involves passwords and personal commitments. The better approach is to allow guest checkout so the account question never comes up, and offer account creation after the order for customers who want one. Forcing an account before payment is the single step most likely to make an agent stop, and it also loses some human customers.
7. How do I test my WordPress site with an agent safely?
Use a staging copy so no real orders, bookings or emails go out, or switch payment gateways to test mode and use a test email address. Give an agent you have access to a realistic task, such as booking the next free appointment for a boiler service, and watch where it hesitates or asks for help. Note each point, fix the matching plugin setting, and repeat until it can reach the confirmation or payment hand-over.
The AI Agent Compatibility audit tests your page for bot blocks, content hidden behind JavaScript, unlabelled forms and controls, navigation agents cannot follow and missing structured data, and links each finding to the guide that fixes it.
Open AI Agent Compatibility Fixes โ