
How it works.
Your website. Ready for AI.

The diagram shows your website, with no changes, feeding the AnswerShare AI Translation Layer, which gives ChatGPT, Claude, Gemini, Perplexity, DeepSeek, Meta AI and Grok trusted answers and recommendations: no noise, all signal; token-economy speed; source grounded. Are you considered and recommended when they do? 94% of B2B buyers report using AI in their buying process (Forrester Buyers’ Journey Survey 2025, reported January 22, 2026).
The short version of your AnswerShare test run on www.texasfirstrentals.com: one rewrite rule your team reviews and deploys, about two weeks from kickoff to production, and a seven-day soak before handover. The schedule below shows how the weeks fit together; the Architecture tab shows what happens to a request once the rule is live. Nothing is deployed to texasfirstrentals.com yet, and nothing goes live until HOLT has approved the rule, the data processing agreement and the preview.
Status on 23 October 2026: not live. Shane Wall asked on 21 October 2026 to move forward with a test run, and the kickoff call is not yet booked. Weeks count from kickoff, and calendar dates are set on that call. Question for HOLT: Which date works for the kickoff call with Stephen?
| Activity | Weeks from kickoff | |||
|---|---|---|---|---|
| Kickoff call, Week 0A technical call with Stephen Marston and your engineers. We agree the test window, the contacts and the access requests. | ||||
| Your review of the rule and the data processing agreement, Weeks 0 to 1Your engineers review the rule and the crawler list. Your counsel reviews the agreement. | ||||
| AI version build, Weeks 0 to 2Our work. We finish the AI versions of your English and Spanish pages while you review. | ||||
| Vercel preview and pre-launch tests, Weeks 1 to 2Your team opens the preview. We run the test matrix and share every result. | ||||
| Production enable on www, Week 2Your team deploys the rule in a deployment of its own, with Stephen and our engineer both online. | ||||
| 7-day soak, Weeks 2 to 3We check every minute. You can ask for a revert at any time. | ||||
| Handover call, Week 3, after day 7 of the soakWe walk your team through the dashboard and give access on this call. | ||||
| Baseline-vs-result readouts, from the handover callAt the handover call, then every two weeks for 3 months, then monthly. Each compares with the baseline taken before launch. | ||||
| Phase | What happens |
|---|---|
| 1. Kickoff with Stephen Marston Week 0 Question for HOLT: Which date works for the kickoff call with Stephen? | A technical call. We walk through the rule, the side-by-side pages, the preview tests and the data processing agreement, agree the test window and contacts, and make the access requests on the Tasks tab.Who: Stephen Marston and HOLT engineers; AnswerShare engineering; Kevin Myers, Co-Founder of AnswerShare and sponsor of this projectDone when: Payment Received. Test window, contacts and access requests agreed. |
| 2. Your review of the rule Weeks 0 to 1 | Your engineers review the rule and the crawler list, and remove any crawler you do not want served. Your counsel reviews the data processing agreement. In parallel we finish the AI versions of your English and Spanish pages and confirm the address the rule points to.Who: HOLT reviews; AnswerShare answers questions and makes requested changesDone when: Rule text approved by HOLT, with a version number. DPA comments returned. |
| 3. Vercel preview and pre-launch tests Weeks 1 to 2 | Your team opens a branch with the rule, which gives a Vercel preview. We run the pre-launch test matrix against it and share every result. Your team runs its own checks, including a form submission and the revert test. We also hold the webhook test session and take the "before" measurements (see measuring results).Who: HOLT creates the preview; AnswerShare runs the matrix; both review resultsDone when: Every test in the matrix passes, and the before measurements are saved. |
| 4. Production enable on www Week 2 Question for HOLT: Which weekday and time suits Stephen for the production deploy? | Your team merges and deploys the rule to production in a deployment of its own, during a slot when Stephen and our engineer are both online. We repeat the core tests against www within the first hour. We confirm the slot 48 hours ahead.Who: HOLT deploys; AnswerShare testsDone when: Core tests pass on www. AI crawlers receive the AI version; people and search crawlers receive the normal page. |
| 5. 7-day soak Weeks 2 to 3 | We check every minute that search crawlers and browsers still get your normal pages, that AI crawlers get the AI version, and that error rates and response times stay inside the limits under Stop conditions on the Requested Details tab. Our AI-crawler traffic watch alerts us if AI-crawler traffic stops.Who: AnswerShare monitors; HOLT can ask for a revert at any timeDone when: Seven consecutive days with no stop condition. |
| 6. Handover call The first day after the 7-day soak ends; the date is fixed once the production slot is agreed | We walk your team through the AnswerShare dashboard and give dashboard access on this call. Access is given only at the handover, after the soak.Who: BothDone when: Your named users can sign in to the dashboard. |
| 7. Baseline-vs-result readouts At the handover call, then every two weeks for the first 3 months after it, then monthly | Each readout compares results with the baseline taken before launch, using the same instruments. The first readout covers the crawler side: AI crawler visits by type, the user-intent share, and the size and cost of what AI crawlers receive. Readouts from 30 days after enable add answer share, the GEO and SEN scores, and AI-referred sessions from Google Analytics.Who: AnswerShare prepares; both reviewDone when: A written readout with every figure, its date and its source. |
The detail behind each phase (the rule, the preview tests, the stop conditions and how we measure results) is on the tab. The proposal is here.
AI assistants describe Texas First Rentals from what they can find. Your proposal records that Texas First Rentals is named in 13 of 15 saved answers and 3 of 5 discovery answers, and that fleet, delivery, service and trench-safety facts are scattered across pages. The AI version of each page organizes those facts, in plain text, with the live page they came from and the date we captured them.
Stephen Marston is already your point of contact for the technical setup, and Shane Wall owns the test run. Stephen Marston also approves what we publish and receives the invoices. Tell us if anything here is wrong.
Click flow: your email > new message to kevin@answershare.com > subject "Texas First Rentals contacts" > any correction to the names above > Send
You should see: a reply from Kevin Myers confirming the change. If everything is right, there is nothing to send.
The kickoff call starts the schedule above. Stephen Marston and an engineer from HOLT join, with Kevin Myers, Co-Founder of AnswerShare and sponsor of this project, and our engineer.
Click flow: your email > new message to kevin@answershare.com > subject "Texas First Rentals kickoff call" > two or three dates and times in the next two weeks that suit Stephen and your engineer > Send
You should see: a calendar invitation from Kevin Myers for the kickoff call.
Your counsel reviews the draft agreement. AnswerShare never receives data about your visitors, and the agreement says so in writing.
The rule is one rewrite in your next.config.js. Your engineers review the text and the list of named AI crawlers, and remove any crawler you do not want served. Nothing is deployed until you merge it.
Click flow: The rule page > How it decides > Named AI crawlers: strike any name you do not want served
You should see: the list of named AI crawlers and the line "Rule version 0.1".
Five of your pages, three English and two Spanish, shown beside their AI versions. Each fact carries the address of the live page it came from and the date we captured it.
Click flow: Side-by-side pages > Home (English) > Facts checked: read the table
You should see: a table of facts with the live page on one side, the AI version on the other, and a Source line with the page address and capture date.
We found Google Tag Manager on your site but could not see the GA4 property. Viewer access lets us read aggregate reports of AI-referred sessions, before and after launch. We never pull revenue, transactions, conversions, funnels or user-level data.
Click flow: analytics.google.com > the Texas First Rentals property > Admin > Property access management > + > Add users > aria@aryah.ai: Viewer
You should see: aria@aryah.ai in the list with the role Viewer.
We could not see a Search Console verification record. If the property is verified another way, add us as a Restricted user. If it is not set up, tell us and we plan without it.
Click flow: search.google.com/search-console > www.texasfirstrentals.com > Settings > Users and permissions > Add user > aria@aryah.ai: Restricted
You should see: aria@aryah.ai in the Users and permissions list with the permission Restricted.
Your Vercel request counts are the only "before" count of AI-crawler visits. We want counts by user agent only, no IP addresses. If Vercel keeps no history on your plan, we report crawler visits from launch onward and say so. Question for HOLT: How many days of request logs does your Vercel plan keep, and can your team export counts by AI-crawler user agent for the last 30 days?
Click flow: vercel.com > your team > the Texas First Rentals project > Logs > filter by user agent (GPTBot, ClaudeBot, PerplexityBot) > last 30 days: counts only. We confirm the exact menu names on the call.
You should see: a count of requests per AI-crawler user agent for the last 30 days, with no IP addresses.
Your team opens two previews from the same branch point. Preview A has the rule. Preview B is the same commit without it, as the control. We run the pre-launch test matrix against them and share every result. Vercel previews are often protected, so you choose how we reach them. Question for HOLT: Which do you prefer: your team runs our test script, or you give us a protection-bypass value on a call?
Click flow: vercel.com > your team > the Texas First Rentals project > Deployments > the preview built from the branch that carries the rule: Ready. We confirm the exact menu names on the call.
You should see: the preview deployment with the status Ready and a preview address you can open.
When your site deploys, one short step sends us the addresses of the pages that changed, signed with a secret we hand over on a call, never by email. We refresh the AI version of those pages within minutes. We never poll or crawl your site on a schedule to find changes. Stephen receives the publish webhook guide (version 1.0, 8 October) before the kickoff call.
Click flow: your deploy pipeline > the step that runs after a production deploy > add the webhook step from the guide: enabled. We confirm the exact steps on the webhook test session.
You should see: the step in your deploy log, and a test delivery we confirm on the call.
Two views help us build the question set from your own data: pages with their keywords and monthly search volume, and keywords mapped to pages. Any tool's export works. This does not block the build.
Click flow: your SEO tool > Export > page planning CSV and keyword mapping CSV > share the folder with aria@aryah.ai: Viewer
You should see: both files in the shared folder, with the export date, tool and market in the file names or a note.
Our work, not yours. It needs nothing from your team beyond the answers above.
Your team merges and deploys the rule in a deployment of its own, in a slot when Stephen Marston and our engineer are both online. We repeat the core tests against www within the first hour.
Click flow: Book the cutover call > pick a date and time > Confirm
You should see: a confirmation page with the date and time, and a calendar invitation in your inbox.
Then, on the call:
Click flow: your Git host > the Texas First Rentals repository > the pull request with the rule > Merge: merged; then vercel.com > your team > the Texas First Rentals project > Deployments > Production: Ready. We confirm the exact menu names on the call.
You should see: a Production deployment with the status Ready, and our core tests passing on www.
To revert at any time:
Click flow: vercel.com > your team > the Texas First Rentals project > Deployments > the production deployment before the rule > Instant Rollback: confirm
You should see: the earlier deployment marked as Production, and the rule no longer active.
We check every minute that search crawlers and browsers still get your normal pages, that AI crawlers get the AI version, and that error rates and response times stay inside the agreed limits. Our AI-crawler traffic watch alerts us if AI-crawler traffic stops.
After day 7 of the soak we walk your team through the AnswerShare dashboard and give dashboard access on this call. Access is given only at the handover, after the soak. The date is fixed once the production slot is agreed. Question for HOLT: Who on your team needs a dashboard account?
The FAQ review is a post-launch task, and nothing before production waits on it. Until you approve the FAQ, the AI version carries only FAQ content already published on your site, never the draft. The draft we sent on 18 October moves to this step.
| Item | Value |
|---|---|
| OwnerTexas First Rentals is a Texas equipment-rental business within HOLT Companies, according to its AnswerShare proposal. | HOLT Group. Shane Wall owns the test run; Stephen Marston is the technical contact. |
| DNSNot touched. The www record keeps pointing at Vercel. Read on 8 October 2026. | Network Solutions (ns95 and ns96.worldnic.com) |
| WebsiteServer-rendered, not a single-page app. Many pages are prerendered, which is why the rule sits in next.config.js and not in vercel.json. | Next.js App Router, hosted on Vercel |
| PagesSitemap read on 8 October 2026. | 497 page addresses: 377 equipment, 42 locations, 42 news and 36 other |
| LanguagesYour language routing is untouched. The rule runs after it, so it covers both. | English at / and Spanish under /es-US |
| How AnswerShare connectsOne rewrite rule in beforeFiles. No middleware, no code on any visitor's request, no credential in your project. | A rewrite rule in next.config.js, reviewed, merged and deployed by your team |
| EmailMail runs on a different part of your setup and is not touched. Read on 8 October 2026. | Proofpoint for mail routing, Microsoft 365 in the SPF record |
| Web analyticsWe could not see the GA4 property ID. See the Tasks tab. | Google Tag Manager detected |
| Search ConsoleNo verification record was visible. | Not detected |
| How content stays currentWebhook, not polling. Our page fetcher uses its own user agent, which the rule does not match, so a refresh always reads your normal page. | A signed publish notice from your deploy, with the addresses of changed pages |
| What you approve firstEach is a written approval with a named approver and a retained timestamp. | The rule version, the data processing agreement and the preview pages |
| Dashboard accessNever at kickoff or at production enable. | At the handover call, after the 7-day soak |
| Measure | Value |
|---|---|
| GEO scoreMedian of five engines. Measured 6 October 2026 23:07 UTC, comparison_scores row 0d5e398e-82ef-4d4f-a334-9ac99bf0f223. Grok 49, Perplexity 47, Claude 31, Gemini 50, OpenAI 55; Claude dropped as an outlier. | 49.5 |
| SEN (brand sentiment)Same row. Grok 65, Perplexity 0, Claude 5, Gemini 50, OpenAI 50. | 50 |
| RR (Relevance Ratio)Same row. Home page: 1,267 characters of content out of 2,299 visible. | 0.5511 |
| RTC (Retrieval Token Cost)Same row. Home page: 67,753 tokens, 0.052 seconds to last byte, 1,267 useful characters. | 2.7807 |
| Answer shareNo prompt set exists yet. We build it from your data and review it with you before the first run. Checked 21 October 2026. | Not yet measured |
| AI-crawler visitsWe have no view of your traffic until the rule is live. Your Vercel counts are the only before source. | Not yet measured |
Requested details
Shane Wall asked for the detail behind the test run. It is collected here, in the order your team will need it. Each section links to its full document. Everything on this tab is a draft for your review, and points marked for confirmation are settled at kickoff.
Each item links to the place on these pages where we ask it. Answers on a call or by reply are fine.
The rule is revertible in one step: roll back to the production deployment before the rule (Vercel's Instant Rollback, no rebuild), or remove the rule and redeploy. Because the rule ships in a deployment of its own, a rollback removes nothing else. Details are on the rule page.
| Condition | Action |
|---|---|
| Any browser or search crawler receives the AI version of any page | Revert at once, then investigate. |
| The AI version fails (5xx or timeout) for more than 1% of AI-crawler requests in any hour, or for 15 minutes in a row Question for HOLT: Do these limits (more than 1% failures in an hour, or 15 minutes in a row) suit Stephen's team, or would you set different ones? | Revert, or fix within the hour if the cause is known and on our side. |
| Your normal pages get slower for people after the rule ships (median time to first byte more than 10% above the week before) Question for HOLT: Is a 10% rise in median time to first byte the right trigger for your team, or would you set a different limit? | Revert and investigate. |
| HOLT asks for a revert for any reason | Revert. No justification needed. |
| HOLT / Texas First Rentals | AnswerShare |
|---|---|
| Reviews and owns the rule; removes any crawler name it does not want. | Writes the rule and the crawler list; sends any change as a pull request. |
| Creates the Vercel preview; runs its own checks, the form test and the revert test. | Runs the pre-launch test matrix and shares every raw result. |
| Deploys to production in the agreed slot; can revert at any time. | Builds and hosts the AI versions of your pages; keeps them current from your webhook. |
| Adds the webhook step to your deploy. | Monitors every minute and alerts on a stop. |
| Grants read-only analytics access. | Takes the baseline and writes each readout. |
| Reviews the FAQ after go-live. | Signs the data processing agreement; never receives data about your visitors. |
Our page fetcher identifies itself with its own user agent, which the rule does not match, so a refresh always reads your normal page. We give you that user agent and its IP address before the webhook test so you can recognise it, or allow it in your Vercel firewall. [CONFIRM: fetcher user agent and IP]
Rule version 0.1, draft of 21 October 2026. Nothing here is deployed. Your team reviews, edits, merges and deploys it.
We propose a Next.js rewrite rule in next.config.js, in the beforeFiles phase, that sends page requests from named AI crawlers to AnswerShare as an external rewrite. We are not proposing middleware, and the rule does not go in vercel.json.
vercel.json. Our 19 October email said the rule would go in vercel.json. That was a mistake; the diagram we sent with it shows the correct place, next.config.js. Vercel applies vercel.json rewrites only after it checks for a matching file ("precedence is given to the filesystem prior to rewrites being applied", Vercel's vercel.json documentation). Your pages are prerendered: on 21 October your home page and /es-US both answered with x-nextjs-prerender: 1. A vercel.json rule would therefore be skipped for most of your pages. Next.js beforeFiles rewrites are checked before files and pages, so the rule works on prerendered pages.rewrites() once, at build time, and no code of ours runs on any request. Middleware would run on every page request, including your visitors' requests. It would also need a credential in your Vercel environment variables, and it would have to be kept current with Next.js releases. Your 21 October reply said the move to the rewrite rule addressed your biggest concerns, so we kept it.User-Agent header. It never looks at IP addresses or networks.AI_BOTS set in src/bot-classification.ts, at commit b43382d of 2 October 2026. Changes reach you only as pull requests.SEARCH_BOTS set from the same file: Googlebot in all its variants, Google-InspectionTool (Search Console's inspection tool), Bingbot, Applebot, DuckDuckBot, YandexBot, Baiduspider and PetalBot. Everyone else, including every person, gets your site untouched./_next/), /api/, /_vercel/, /.well-known/ and any path ending in a file extension: images, scripts, styles, icons, robots.txt, sitemap.xml and manifest.webmanifest. None of the 497 page addresses in your sitemap ends in a file extension, so every page is covered and every asset is excluded.RSC header (Next.js in-app navigation data) or the Next-Action header (Next.js form submissions), and /api/ is excluded by path. We found no checkout, cart or account pages on www; the rental portal sign-up page is an ordinary page with a form.Question for HOLT: Does www have any other account, checkout or transaction paths we should exclude from the rule?
/ and Spanish pages under /es-US. We test both on the preview.Matching is case-sensitive, because Next.js header patterns are. Each name matches as written in the list and in lower case, which covers the published user agent of every crawler on the list. A crawler that spells its name with some other capitalisation gets your normal page, which is the safe direction.
Only requests that match the rule. Vercel forwards the crawler's request as it arrived: the page path and query, the crawler's user agent and its other request headers, plus Vercel's standard forwarding headers (x-forwarded-for, x-real-ip, x-forwarded-host, x-forwarded-proto), which carry the crawler's IP address. Requests from people and search crawlers never match, so nothing from them reaches us. This is the same description we gave in our answer to your question 13.
Every response we send back is marked Cache-Control: private, no-store. Vercel honours upstream cache headers on external rewrites, so it does not store the AI version, and an AI copy never sits in a cache where a visitor could get it.
The rule points at an AnswerShare edge service that builds each response. Here is what an AI crawler gets in each case. In every case, people and search crawlers get your normal page, because their requests never reach us.
| Case | What the AI crawler gets |
|---|---|
| Normal | The AI version of the page, status 200. |
| The page has no AI version yet (for example, a page you published minutes ago) | Your normal page. Our edge service fetches it from your site and returns it unchanged. That fetch carries a pass-through header the rule excludes, so it cannot loop back to us. |
| Our content service fails or is slow | Your normal page, the same way, once our time budget runs out [CONFIRM: time budget, proposed 2.5 seconds]. |
| Your site is slow or down when our edge service fetches your page | Status 502 from our edge service, if your page has not arrived within 10 seconds or the fetch fails. |
| Our edge service itself is down or unreachable | An error from Vercel, status 502 (ROUTER_EXTERNAL_TARGET_CONNECTION_ERROR). There is no fallback to your page in this case. |
| Our edge service accepts the connection but never answers | Vercel waits up to its 120-second limit for external rewrites, then returns 502 (ROUTER_EXTERNAL_TARGET_ERROR). |
The last two cases are the cost of having no code on your visitors' requests. A crawler that gets an error retries later. The stop conditions in the plan call for a revert if failures pass 1% of AI-crawler requests in an hour or last 15 minutes.
The fall-back to your normal page in the second and third rows is built and running on our side. On 22 October 2026 we sent GPTBot requests for your home page and for /es-US to our edge service. Each got your own page back with status 200, marked Cache-Control: private, no-store and x-answershare-variant: passthrough, in under 2 seconds. We test it again on your preview (tests T14 and T15).
For each failure below: what your human layer gets (your visitors, plus Googlebot and the other search crawlers), what our layer gets (the AI crawlers on the list, and the records we keep), how the failure is detected, and how it is contained. Three things hold in every case.
missing, so their requests never reach us. A failure on our side cannot change what they get or how fast they get it. The exceptions are the link previews and the two optional files, noted where they apply.Cache-Control: private, no-store, so Vercel keeps no copy. Once a failure ends, the next request gets the right page.| Your human layer | No change. Visitors and search crawlers get your page as they do today, on every page, at its normal speed. |
|---|---|
| Our layer | The AI crawler gets your normal page, status 200, instead of the AI version. This affects that page only, until its AI version is published. The crawler waits slightly longer: 0.7 to 1.7 seconds for the whole round trip in our 22 October check. If the rule went live today this would apply to every page, English and Spanish: the AI versions are still in review and none is live. Today this leaves no record on our side. |
| Detected by | This is the designed behaviour, not an alarm. Each such response is marked x-answershare-variant: passthrough and x-answershare-passthrough-reason: miss. |
| Contained by | The fall-back, automatically, on each request. There is nothing to revert. It ends for a page when that page's AI version is published. |
| Your human layer | No change. |
|---|---|
| Our layer | The AI crawler gets your normal page, status 200, instead of the AI version. It gets it at once if our content service errors, or after our time budget if the service is slow. This covers every page for as long as the fault lasts. Nothing is recorded on our side today. |
| Detected by | Our every-minute uptime check, once your site is added to it (see the note below). |
| Contained by | The fall-back, automatically, on each request. We fix the cause on our side. If it is not fixed within the hour, the stop conditions call for a revert. |
| Your human layer | Whatever your site gives visitors at that moment. The rule adds nothing to it, because their requests never reach us. |
|---|---|
| Our layer | This happens only when a page also has no AI version, or our content service has failed. Our fall-back fetch then waits up to 10 seconds for your page. If your page has not arrived by then, or the fetch fails, the AI crawler gets status 502 from us instead of your slow page. Without the rule, it would have waited on your site directly. This lasts as long as your site is slow, and it leaves no record on our side today. |
| Detected by | Your own monitoring of your site. Our check sees a 502 marked x-answershare-passthrough-reason: live-failed. |
| Contained by | It ends when your site recovers. There is nothing to revert. |
| Your human layer | No change for visitors or search crawlers. Two side effects reach people:
(1) If FacebookExternalHit stays on the list, links to your pages shared on Facebook, Messenger or WhatsApp during the outage may appear without a title and image. This applies to pages Meta has not already stored a preview for. Removing that entry removes this effect.
(2) If you keep Rule 2, /llms.txt and /llms-full.txt return an error to everyone during the outage. Both return 404 today. |
|---|---|
| Our layer | Every AI-crawler page request gets Vercel's 502, on every page, English and Spanish, for as long as the outage lasts. That includes user-triggered fetchers such as ChatGPT-User, Claude-User and Perplexity-User: an assistant fetching your page for a person's question gets no page. Nothing reaches us, so we record nothing. Only your Vercel logs show these requests. |
| Detected by | Our every-minute uptime check, once your site is added to it. It marks a check as down after 3 failures in a row, about 3 minutes. |
| Contained by | A revert, which only your team can make, because the rule lives in your deployment. The stop conditions call for one when failures pass 1% of AI-crawler requests in an hour, or run 15 minutes in a row. Instant Rollback takes effect without a rebuild. We time it on the preview (test T18). Until the rollback lands, AI crawlers keep getting 502. People and search crawlers are unaffected throughout. |
| Your human layer | The same as the case above. Visitors and search crawlers see no change. Shared-link previews and the two optional files wait up to 120 seconds and then fail. |
|---|---|
| Our layer | Each AI-crawler request waits up to Vercel's 120 seconds, then gets 502. Our edge service caps its own work at 2.5 seconds for the AI version plus 10 seconds for the fall-back. So this case arises only if the edge platform itself hangs. Nothing is recorded on our side. |
| Detected by | The same every-minute check. It counts a check as failed if no answer arrives within 15 seconds. |
| Contained by | The same revert as the case above. |
The alternative, if you prefer it. If HOLT would rather AI crawlers always fall back to your page, even when our edge service is down, the way to do that is a small Next.js middleware with a timeout: if we do not answer within 2.5 seconds, the request falls through to your normal page. That is the middleware design in our 8 October overview, with the credential kept in your environment variables as you asked. Its costs are the ones listed above: code on every page request, a credential in your environment variables, and upkeep across Next.js releases. We recommend the rule. We will provide the middleware for review if you choose it.
For next.config.js. If your config is next.config.mjs or next.config.ts, the same object goes in your existing export. If you already have rewrites, keep them: a rewrites() that returns an array maps to afterFiles below.
// AnswerShare AI-crawler rule for www.texasfirstrentals.com (rule v0.1, test run)
// Crawler names: AnswerShare src/bot-classification.ts,
// AI_BOTS and SEARCH_BOTS at commit b43382d (2 October 2026).
// Matching is by user agent only. No IP or network lookups.
// To remove: delete this block and the answershareRewrites entry in rewrites().
const ANSWERSHARE_ORIGIN = 'https://customers.texasfirstrentals.production.answershare.com';
// AI crawlers and AI agents that get the AI version of a page.
const AI_CRAWLERS = [
// OpenAI
'GPTBot', 'OAI-SearchBot', 'ChatGPT-User', 'ChatGPT',
// Anthropic
'ClaudeBot', 'Claude-SearchBot', 'Claude-User', 'claude-web', 'anthropic-ai',
// Perplexity
'PerplexityBot', 'Perplexity-User',
// Google AI agents: not search crawlers. Remove any you prefer.
'Gemini-Deep-Research', 'Gemini-Research', 'Gemini-User', 'GeminiBot', 'Gemini-AI',
'GoogleAgent-Mariner', 'GoogleAgent-URLContext', 'Google-CloudVertexBot',
'GoogleOther', 'Google-Extended',
// Apple: AI only. Plain Applebot is a search crawler and is excluded below.
'Applebot-Extended',
// Meta
'Meta-ExternalAgent', 'FacebookExternalHit',
// Others
'Bytespider', 'Amazonbot', 'YouBot', 'Diffbot', 'CCBot', 'Cohere-AI',
'DeepSeekBot', 'MistralAI-User', 'Qwen-Bot', 'GrokBot', 'xAI-Grok', 'Grok-DeepSearch',
// AnswerShare's own measurement crawler
'AnswerShareBot',
];
// Search crawlers always get your normal site, even if a user agent
// also contains a name from the list above.
const SEARCH_CRAWLERS = [
'Googlebot', 'Googlebot-Image', 'Google-InspectionTool', 'Bingbot', 'Applebot',
'DuckDuckBot', 'YandexBot', 'Baiduspider', 'PetalBot',
];
// Next.js anchors header patterns (^...$) and matches them case-sensitively.
// Each name matches as written above and in lower case.
// Names contain only letters, digits and hyphens, so no escaping is needed.
const uaPattern = (names) =>
`.*(?:${[...new Set(names.flatMap((n) => [n, n.toLowerCase()]))].join('|')}).*`;
const answershareRewrites = [
// Rule 1: page requests from a named AI crawler get the AI version of that page.
{
// Every page path except /_next/, /_vercel/, /api/, /.well-known/
// and any path ending in a file extension (assets, robots.txt, sitemap.xml).
source: '/:path((?!(?:_next|_vercel|api|\\.well-known)(?:/|$)|.*\\.[A-Za-z0-9]+$).*)',
has: [{ type: 'header', key: 'user-agent', value: uaPattern(AI_CRAWLERS) }],
missing: [
{ type: 'header', key: 'user-agent', value: uaPattern(SEARCH_CRAWLERS) },
{ type: 'header', key: 'rsc' }, // in-app navigation data
{ type: 'header', key: 'next-action' }, // form submissions
{ type: 'header', key: 'x-answershare-passthrough' }, // our fall-back fetch; stops loops
],
destination: `${ANSWERSHARE_ORIGIN}/:path`,
},
// Rule 2: two public files, identical for every visitor and crawler.
// Both return 404 on your site today.
{ source: '/llms.txt', destination: `${ANSWERSHARE_ORIGIN}/llms.txt` },
{ source: '/llms-full.txt', destination: `${ANSWERSHARE_ORIGIN}/llms-full.txt` },
];
module.exports = {
// ...your existing settings, unchanged...
async rewrites() {
return {
beforeFiles: answershareRewrites,
afterFiles: [], // your existing rewrites, if any
fallback: [],
};
},
};
Requires Next.js 13.3 or later (for missing).
Question for HOLT: Which Next.js version does the site run?
Rule 2 is optional for the test run. It adds two files that do not exist today and serves them the same way to everyone, so it changes nothing that people or search engines currently get. If you would rather leave it out, delete those two lines. Vercel does not allow rewrites of /.well-known/, so any file we supply for that folder would be a static file you commit. We are not asking for one in the test run.
Nothing goes live from these steps; they only prepare your preview.
"User-triggered" means the crawler fetches a page because a person just asked an assistant something. "Crawler" means a background index or training crawl. We use this split for the user-intent share on measuring results. Entries marked "Review" are ones we suggest your team looks at.
| Name in the rule | Operator | Type | Note |
|---|---|---|---|
| GPTBot | OpenAI | Crawler | |
| OAI-SearchBot | OpenAI | User-triggered | ChatGPT search. |
| ChatGPT-User, ChatGPT | OpenAI | User-triggered | "ChatGPT" also catches other ChatGPT fetchers. |
| ClaudeBot | Anthropic | Crawler | |
| Claude-SearchBot, Claude-User | Anthropic | User-triggered | |
| claude-web, anthropic-ai | Anthropic | Crawler | Older names. |
| PerplexityBot | Perplexity | Crawler | |
| Perplexity-User | Perplexity | User-triggered | |
| Gemini-User, Gemini-Deep-Research | User-triggered | Review: Google AI agents, not search crawlers. | |
| Gemini-Research, GeminiBot, Gemini-AI | Crawler | Review: Google AI agents, not search crawlers. | |
| GoogleAgent-Mariner, GoogleAgent-URLContext | User-triggered | Review. URLContext is the fetcher Gemini uses when a person hands it a URL. | |
| Google-CloudVertexBot | Crawler | Review. Vertex AI Agent Builder; no effect on Google Search. | |
| GoogleOther | Crawler | Review. Google's general-purpose crawler outside Search. | |
| Google-Extended | Crawler | A robots.txt token. Google crawls with Googlebot, which is excluded, so this entry is not expected to match any request. | |
| Applebot-Extended | Apple | Crawler | A robots.txt token. Apple crawls with Applebot, which is excluded, so this entry is not expected to match any request. |
| Meta-ExternalAgent | Meta | Crawler | |
| FacebookExternalHit | Meta | Crawler | Review. Meta also uses this agent to build link previews when people share your pages on Facebook, Messenger or WhatsApp. If it stays, those previews are built from the AI version, and the AI versions we build today carry no Open Graph title, description or image (checked on the five sample pages). Remove this entry if you want shared links to keep your own preview. |
| Bytespider | ByteDance | Crawler | |
| Amazonbot | Amazon | Crawler | |
| YouBot | You.com | User-triggered | |
| Diffbot | Diffbot | Crawler | |
| CCBot | Common Crawl | Crawler | |
| Cohere-AI | Cohere | Crawler | |
| DeepSeekBot | DeepSeek | Crawler | |
| MistralAI-User | Mistral | User-triggered | |
| Qwen-Bot | Alibaba | Crawler | |
| GrokBot, xAI-Grok, Grok-DeepSearch | xAI | Crawler | |
| AnswerShareBot | AnswerShare | Crawler | Our own measurement crawler, so our scores read what AI crawlers read. Review: you may remove it, and our measurements would then read your normal page. |
Every test runs on a Vercel preview of your site with the rule in place, before anything reaches production.
/es-US, one equipment page, one location page, one news page and the rental portal sign-up page.Question for HOLT: Please confirm the final list of pages under test, and add any page your team wants covered.
Question for HOLT: Is Vercel's bot protection or a firewall rule active on the preview or on www, and can your team add the temporary allow rule?
Within one deployment, your pages are byte-identical from request to request when they are served from Vercel's cache. So on Preview A we compare the SHA-256 of the body a search crawler or browser receives with the SHA-256 of the body Chrome receives for the same URL at the same time. They must be equal. Between Preview A and Preview B, file names of scripts and styles can differ because the builds differ, so there we compare the parts that matter: status code, title, main heading, meta description, canonical link, language tags, structured data and visible text, each by hash. For any page not served from cache, where bytes can differ between requests, we use the same parts comparison and say so in the results.
| ID | Test | How | Pass when | Runs it |
|---|---|---|---|---|
| T1 | AI crawlers get the AI version | Every AI user agent on the list, against every page under test, on Preview A. | Status 200; the body equals what our service returns for that page; the response carries Cache-Control: private, no-store. Every name on the list routes. | AnswerShare |
| T2 | People get the live page, unchanged | Chrome, Safari (iPhone) and Firefox against every page, on Preview A and Preview B. | On Preview A, body SHA-256 equals Chrome's for the same URL. Between A and B, every part hash matches. No AnswerShare header on any response. | AnswerShare; HOLT spot-checks from its own network |
| T3 | Search crawlers get the live page, unchanged | Every search user agent above against every page, on Preview A. | Body SHA-256 equals Chrome's for the same URL. Status codes equal Chrome's. | AnswerShare; HOLT spot-checks |
| T4 | The search exclusion wins | A made-up user agent containing both "Googlebot" and "GPTBot". | Gets the live page (hash equals Chrome's). | AnswerShare |
| T5 | Unlisted agents and edge cases | No user agent, an empty user agent, an unknown bot, and "GPTBOT" in capitals. | Each gets the live page. (Capitals are not matched; the rule matches each name as published and in lower case.) | AnswerShare |
| T6 | Status codes | For each user agent class: a page that does not exist, /en-US, a trailing-slash address, and a HEAD request. | AI crawlers get the same status code and redirect target as Chrome for the missing page and every redirect. Redirects run before the rule, so they are unchanged. | AnswerShare |
| T7 | Assets and internal paths are never rewritten | AI user agents against /_next/static/ files, /_next/image, an /api/ path, /favicon.ico, /manifest.webmanifest, an image and a /.well-known/ path. | Body SHA-256 equals Chrome's for each. | AnswerShare |
| T8 | robots.txt and the sitemap are untouched | Chrome, Googlebot and GPTBot against /robots.txt and /sitemap.xml, on Preview A and on production today. | All bodies identical across user agents. Compared with production, robots.txt is identical, and the sitemap differs only where your own build changes it (for example, dates). | AnswerShare |
| T9 | The two new files (rule 2, if kept) | Chrome, Googlebot and GPTBot against /llms.txt and /llms-full.txt. | Status 200, plain text, identical body for every user agent. | AnswerShare |
| T10 | No AI copy is ever cached for visitors | For every page: GPTBot, then Chrome straight after, 20 times; repeated after the page is warm in Vercel's cache. | Chrome always gets the live page (hash equals the control). No AI response is served from Vercel's cache. | AnswerShare |
| T11 | In-app navigation and forms work as today | GPTBot user agent with the RSC header, and with the Next-Action header. Your team submits the quote and portal sign-up forms in a browser on Preview A. | Requests with those headers are not rewritten. Form submissions reach your systems exactly as on Preview B. | AnswerShare (headers); HOLT (forms) |
| T12 | English and Spanish with your language routing in place | AI, browser and search user agents against /, /es-US and the Spanish pages under test. | AI crawlers get the AI version in the right language; browsers and search crawlers get the live page. We record the path our service receives for English pages, because your language routing serves / from /en-US internally, and confirm it maps to the right page. | AnswerShare; HOLT confirms routing |
| T13 | Speed | 50 requests per page for Chrome, Googlebot and GPTBot on Preview A and Preview B, from the same place, at the same time. | Chrome and Googlebot: median time to first byte on A within 10% of B. GPTBot: median time to last byte of the AI version no slower than the live page's, and 95th percentile under 1 second [CONFIRM: thresholds]. | AnswerShare |
| T14 | Fall-back and error cases | (a) GPTBot asks for a page that has no AI version. (b) Our service is made to fail for one test page. (c) A third preview points the rule at an address that refuses connections. (d) A test page on our side that answers only after 10 seconds. | (a) and (b): the crawler gets your live page, status 200, hash equal to Chrome's. (c): the crawler gets Vercel's 502, and browsers and search crawlers are unaffected. (d): result recorded against our time budget. [CONFIRM: time budget] | AnswerShare |
| T15 | No loops | GPTBot with our pass-through header; then (a) above while we watch our service's logs. | The pass-through request gets the live page. Our fall-back fetch reaches your site once and never returns to us. | AnswerShare |
| T16 | Nothing from people reaches us | Our service's logs for the whole test window, compared with the requests we sent. | Every request we received carries an AI user agent from the list. None carries a browser or search user agent. | AnswerShare; log extract shared with HOLT |
| T17 | Your firewall and bot protection still work | Your team reviews Vercel's firewall view for the test window. | Your rules and bot protection saw every request, including the AI-crawler ones, before the rule ran. | HOLT |
| T18 | Revert | On Preview A, remove the rule and redeploy; separately, promote the pre-rule deployment. Then repeat T1 for three pages. | AI crawlers get the live page after each revert. Time to revert is recorded. | HOLT; AnswerShare re-tests |
| T19 | Content updates by webhook | Your deploy step sends a signed test event for one page; we refresh it. | Our log shows the event verified; the refreshed AI page matches the changed live page; our refresh fetch was not rewritten by the rule. | HOLT sends; AnswerShare verifies |
Every figure gives its date and the stored record it comes from. A missing figure is never shown as zero. Today's baseline is on the Setup tab.
| Measure | What it is |
|---|---|
| GEO score | How accurately and consistently AI engines describe and recommend Texas First Rentals, scored 0 to 100 by each of five engines (ChatGPT, Claude, Gemini, Perplexity and Grok) on the same rubric. We report the median, with an outlier dropped when one engine is far from the rest. |
| SEN | Brand sentiment: how favourably the same five engines describe Texas First Rentals. We report the median. |
| RR, Relevance Ratio | The share of the visible text on your home page that is page content rather than navigation and footer. Higher is better. |
| RTC, Retrieval Token Cost | What a page costs an AI crawler to read: the page's size in tokens, multiplied by the seconds to receive it, divided by the characters of useful content. Lower is better. |
| AI crawler visits | Requests from each AI crawler on the rule's list, by day and by crawler. |
| U/T, user-intent share of AI crawler traffic | The share of AI visits made while an assistant is looking for information to answer a person's question. We identify these visits by the type of AI crawler. It is evidence that AI is coming to your site for information while preparing a response. It does not measure whether that response names you or cites your website. |
| Answer share | For a fixed, versioned set of questions your customers ask, the share of AI engine answers that name Texas First Rentals or cite your site. |
| AI-referred sessions | Visits to your site from AI assistants (for example chatgpt.com, perplexity.ai, claude.ai, gemini.google.com and copilot.microsoft.com), from your Google Analytics 4 property. |
Results move from run to run even when nothing on your site changes, because AI engines do not answer identically every time and response times vary. These are all five runs on prompt set 5.5.1. We read any later change against this spread, not against a single number.
| Measured (UTC) | Source row | Judge panel | GEO | SEN | RR | RTC | TTFB |
|---|---|---|---|---|---|---|---|
| 2026-09-26 18:41 | 27c2a91d | 2026-09-15.pplx-agent-sonar | 47 | 60 | 0.5513 | 2.8316 | 52 ms |
| 2026-09-29 15:43 | 4cdc0d13 | 2026-09-15.pplx-agent-sonar | 45 | 15 | 0.5513 | 2.8850 | 53 ms |
| 2026-10-01 19:07 | 428b88dd | 2026-09-15.pplx-agent-sonar | 49 | 55 | 0.5513 | 3.7398 | 68 ms |
| 2026-10-03 20:29 | 93f2ede1 | 2026-09-15.pplx-agent-sonar | 49 | 50 | 0.5513 | 3.4193 | 63 ms |
| 2026-10-06 23:07 | 0d5e398e | 2026-10-04.claude-sonnet-5-5 | 49.5 | 50 | 0.5511 | 2.7807 | 52 ms |
Across these runs GEO ranged from 45 to 49.5, SEN from 15 to 60 and RTC from 2.78 to 3.74. The 26 September run is the baseline we recorded when the work began. The "Now" figures in our 19 October email (RTC 3.4, about 60 ms) come from the 3 October run.
| Measure | How it is taken after launch | First reported |
|---|---|---|
| GEO and SEN | Same prompt set and same judge panel version as the pre-launch run. If an instrument has to change during the test, we re-run the baseline on the new version and compare like with like, never across versions. | 30 days after enable |
| RR and RTC | The home page and the five side-by-side pages, fetched through the live rule as an AI crawler receives them, with the same metric code. | Handover call |
| AI crawler visits by type | Counted at AnswerShare for every request the rule sends us, by crawler and by day. Your Vercel request counts give an independent check. | Handover call, then daily on your dashboard |
| U/T | User-triggered AI visits divided by all AI crawler visits, with the crawler types listed on the rule page. | Handover call |
| Answer share | Same prompt set version, same engines, same scoring. | 30 days after enable |
| AI-referred sessions | Google Analytics 4, aggregate reports only, by assistant, compared with the same weeks before launch and the same period a year earlier. | 30 days after enable |
| Google-side search | Search Console clicks and impressions. The rule does not touch Google Search, so this series shows change that has other causes. | 30 days after enable |
Readouts are at the handover call after the 7-day soak, then every two weeks for the first 3 months after it, then monthly.
Every run keeps the complete response from each engine, with its run and attempt IDs, timestamps, instrument versions and a SHA-256 hash. A retry never overwrites an earlier attempt or inflates a count. If a capture fails, the readout says the run is incomplete and shows what was recovered; it never fills the gap with zero. We read your analytics with read-only access and aggregate reports only: no revenue, transactions, conversions, funnels or user-level data.
Five of your pages, three English and two Spanish, each beside its AI version. Every fact block shows the live page it came from and the date it was captured.
| Page | Language | Live |
|---|---|---|
| Home | English | Live and AI version |
| Excavators | English | Live and AI version |
| San Antonio location | English | Live and AI version |
| Inicio | Español | Live and AI version |
| Ubicación San Antonio | Español | Live and AI version |
A draft for your counsel. AnswerShare never receives data about your visitors, and the agreement says so in writing. Nothing in it is in force until both parties sign. It reaches Stephen Marston separately, from Kevin Myers, for your counsel to review.
It covers the roles of the parties, the processing instructions, the data involved, retention, security and incidents, subprocessors and deletion at the end of the test run, with annexes on the data processed, the security measures and the subprocessors.