Phoenix contractor websites: AI readiness, October 2026
How ready 382 contractor websites in Phoenix (roofing, HVAC, windows and doors) are for AI search, from up to 8 pages each, read Oct 1, 2026 to Oct 2, 2026: five tests (AI crawler access in robots.txt, llms.txt, LocalBusiness structured data, published prices, warranties, and specs, and other citable data) with the score distribution, plus FAQ, dataset, table, license, review markup, and platform measures and per-crawler robots.txt rules. Aggregate counts only, by trade, each with its sample size.
Download
The data
| group | measure | label | base | count | of | share | read_from | read_to |
|---|---|---|---|---|---|---|---|---|
| all | not_read_robots_unreachable | Not read: robots.txt did not answer (an error or no response), so we did not crawl | sites | 3 | 382 | 0.0079 | 2026-10-01 | 2026-10-02 |
| all | not_read_disallowed | Not read: robots.txt disallows our crawler | sites | 1 | 382 | 0.0026 | 2026-10-01 | 2026-10-02 |
| all | home_ok | Homepage loaded | sites whose homepage we requested | 361 | 378 | 0.955 | 2026-10-01 | 2026-10-02 |
| all | sample_beyond_home | At least one page beyond the homepage read | sites whose homepage loaded | 318 | 361 | 0.8809 | 2026-10-01 | 2026-10-02 |
| all | https | Served over HTTPS | sites whose homepage loaded | 361 | 361 | 1 | 2026-10-01 | 2026-10-02 |
| all | no_answer_engine_blocked | Test 1: robots.txt blocks none of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended | sites whose robots.txt answered | 377 | 379 | 0.9947 | 2026-10-01 | 2026-10-02 |
| all | llms_valid | Test 2: has an llms.txt that starts with a title line, as the llmstxt.org format asks | sites where we checked /llms.txt | 108 | 378 | 0.2857 | 2026-10-01 | 2026-10-02 |
| all | local_business_nap | Test 3: homepage has a LocalBusiness (or subtype) node with the business's name, phone, and address | sites whose homepage loaded | 156 | 361 | 0.4321 | 2026-10-01 | 2026-10-02 |
| all | pws_any | Test 4: publishes a price, a warranty term, or a product spec, in structured data or in page text | sites whose homepage loaded (up to 8 pages read each) | 180 | 361 | 0.4986 | 2026-10-01 | 2026-10-02 |
| all | citable | Test 5: publishes two or more of five kinds of other citable data (FAQ, dataset, table of numbers, service-area cities, license number or years in business) | sites whose homepage loaded (up to 8 pages read each) | 215 | 361 | 0.5956 | 2026-10-01 | 2026-10-02 |
| all | all_five | Passes all five tests | sites whose robots.txt, llms.txt, and homepage were all read | 43 | 361 | 0.1191 | 2026-10-01 | 2026-10-02 |
| all | tests_passed_0 | Passes exactly 0 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 0 | 361 | 0 | 2026-10-01 | 2026-10-02 |
| all | tests_passed_1 | Passes exactly 1 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 81 | 361 | 0.2244 | 2026-10-01 | 2026-10-02 |
| all | tests_passed_2 | Passes exactly 2 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 69 | 361 | 0.1911 | 2026-10-01 | 2026-10-02 |
| all | tests_passed_3 | Passes exactly 3 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 87 | 361 | 0.241 | 2026-10-01 | 2026-10-02 |
| all | tests_passed_4 | Passes exactly 4 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 81 | 361 | 0.2244 | 2026-10-01 | 2026-10-02 |
| all | tests_passed_5 | Passes exactly 5 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 43 | 361 | 0.1191 | 2026-10-01 | 2026-10-02 |
| all | price_structured | A price in structured data (an Offer price, or a priceRange with a number) | sites whose homepage loaded (up to 8 pages read each) | 10 | 361 | 0.0277 | 2026-10-01 | 2026-10-02 |
| all | price_any | A price, in structured data or page text (a range, per unit, installed, or starting at) | sites whose homepage loaded (up to 8 pages read each) | 95 | 361 | 0.2632 | 2026-10-01 | 2026-10-02 |
| all | warranty_structured | A warranty in structured data | sites whose homepage loaded (up to 8 pages read each) | 2 | 361 | 0.0055 | 2026-10-01 | 2026-10-02 |
| all | warranty_any | A warranty term with its length (years or lifetime), in structured data or page text | sites whose homepage loaded (up to 8 pages read each) | 139 | 361 | 0.385 | 2026-10-01 | 2026-10-02 |
| all | spec_structured | A product spec in structured data (additionalProperty on a Product or Service) | sites whose homepage loaded (up to 8 pages read each) | 1 | 361 | 0.0028 | 2026-10-01 | 2026-10-02 |
| all | spec_any | A product spec with its value (U-factor, SEER2, impact class, and the like), in structured data or page text | sites whose homepage loaded (up to 8 pages read each) | 44 | 361 | 0.1219 | 2026-10-01 | 2026-10-02 |
| all | pws_structured | A price, warranty, or product spec in structured data | sites whose homepage loaded (up to 8 pages read each) | 13 | 361 | 0.036 | 2026-10-01 | 2026-10-02 |
| all | faq_structured | FAQPage structured data | sites whose homepage loaded (up to 8 pages read each) | 107 | 361 | 0.2964 | 2026-10-01 | 2026-10-02 |
| all | faq_any | FAQ content: FAQPage schema, or an FAQ page or section with three or more questions | sites whose homepage loaded (up to 8 pages read each) | 183 | 361 | 0.5069 | 2026-10-01 | 2026-10-02 |
| all | dataset | A published dataset (Dataset schema, a /data/ section, or a CSV, JSON, or spreadsheet download) | sites whose homepage loaded (up to 8 pages read each) | 0 | 361 | 0 | 2026-10-01 | 2026-10-02 |
| all | numeric_table | An HTML table with numbers in it | sites whose homepage loaded (up to 8 pages read each) | 33 | 361 | 0.0914 | 2026-10-01 | 2026-10-02 |
| all | service_area | Service-area cities: city location pages, or a service-area page naming three or more metro cities | sites whose homepage loaded (up to 8 pages read each) | 180 | 361 | 0.4986 | 2026-10-01 | 2026-10-02 |
| all | license_on_site | A contractor license number (Arizona ROC format) on the site | sites whose homepage loaded (up to 8 pages read each) | 176 | 361 | 0.4875 | 2026-10-01 | 2026-10-02 |
| all | years_in_business | Years in business stated ("since 1998", "25 years of experience", or foundingDate) | sites whose homepage loaded (up to 8 pages read each) | 216 | 361 | 0.5983 | 2026-10-01 | 2026-10-02 |
| all | jsonld | Homepage has JSON-LD structured data | sites whose homepage loaded | 269 | 361 | 0.7452 | 2026-10-01 | 2026-10-02 |
| all | local_business | Homepage has a LocalBusiness (or subtype) node | sites whose homepage loaded | 183 | 361 | 0.5069 | 2026-10-01 | 2026-10-02 |
| all | nap_in_schema | Homepage schema gives the business's name, phone, and address together (any business node) | sites whose homepage loaded | 157 | 361 | 0.4349 | 2026-10-01 | 2026-10-02 |
| all | duplicate_business_nodes | Homepage has more than one separate business node | sites whose homepage loaded | 87 | 361 | 0.241 | 2026-10-01 | 2026-10-02 |
| all | conflicting_nap | Business schema gives more than one phone or street address across the pages read | sites whose homepage loaded (up to 8 pages read each) | 25 | 361 | 0.0693 | 2026-10-01 | 2026-10-02 |
| all | jsonld_errors | Homepage has a JSON-LD block that does not parse | sites whose homepage loaded | 6 | 361 | 0.0166 | 2026-10-01 | 2026-10-02 |
| all | review_markup | Review or aggregateRating markup on a page read | sites whose homepage loaded (up to 8 pages read each) | 67 | 361 | 0.1856 | 2026-10-01 | 2026-10-02 |
| all | same_as | Homepage business node lists sameAs profiles | sites whose homepage loaded (up to 8 pages read each) | 144 | 361 | 0.3989 | 2026-10-01 | 2026-10-02 |
| all | heavy_homepage | Homepage is over 150 KB of HTML | sites whose homepage loaded (up to 8 pages read each) | 223 | 361 | 0.6177 | 2026-10-01 | 2026-10-02 |
| all | generic_title | A page read has a template title ("Complete Guide", "Everything You Need") | sites whose homepage loaded (up to 8 pages read each) | 3 | 361 | 0.0083 | 2026-10-01 | 2026-10-02 |
| all | post_byline | The blog post read names a person as its author | sites where we read a blog post | 66 | 199 | 0.3317 | 2026-10-01 | 2026-10-02 |
| all | post_dated | The blog post read shows a date | sites where we read a blog post | 95 | 199 | 0.4774 | 2026-10-01 | 2026-10-02 |
| all | llms_present | Has an llms.txt file | sites where we checked /llms.txt | 128 | 378 | 0.3386 | 2026-10-01 | 2026-10-02 |
| all | robots_read | Has a robots.txt with rules | sites whose robots.txt answered | 313 | 379 | 0.8259 | 2026-10-01 | 2026-10-02 |
| all | blocks_gptbot | robots.txt blocks GPTBot from the homepage | sites whose robots.txt answered | 2 | 379 | 0.0053 | 2026-10-01 | 2026-10-02 |
| all | blocks_oai-searchbot | robots.txt blocks OAI-SearchBot from the homepage | sites whose robots.txt answered | 1 | 379 | 0.0026 | 2026-10-01 | 2026-10-02 |
| all | blocks_claudebot | robots.txt blocks ClaudeBot from the homepage | sites whose robots.txt answered | 1 | 379 | 0.0026 | 2026-10-01 | 2026-10-02 |
| all | blocks_perplexitybot | robots.txt blocks PerplexityBot from the homepage | sites whose robots.txt answered | 1 | 379 | 0.0026 | 2026-10-01 | 2026-10-02 |
| all | blocks_google-extended | robots.txt blocks Google-Extended from the homepage | sites whose robots.txt answered | 2 | 379 | 0.0053 | 2026-10-01 | 2026-10-02 |
| all | blocks_ccbot | robots.txt blocks CCBot from the homepage | sites whose robots.txt answered | 2 | 379 | 0.0053 | 2026-10-01 | 2026-10-02 |
| all | blocks_any_answer_engine | robots.txt blocks at least one of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended | sites whose robots.txt answered | 2 | 379 | 0.0053 | 2026-10-01 | 2026-10-02 |
| all | blocks_any_ai_crawler | Blocks any AI crawler in robots.txt | sites whose robots.txt answered | 2 | 379 | 0.0053 | 2026-10-01 | 2026-10-02 |
| all | names_gptbot | robots.txt has a rule group naming GPTBot | sites with a robots.txt file | 32 | 313 | 0.1022 | 2026-10-01 | 2026-10-02 |
| all | names_any_ai_agent | robots.txt has a rule group naming any of the six AI agents | sites with a robots.txt file | 35 | 313 | 0.1118 | 2026-10-01 | 2026-10-02 |
| all | platform_wordpress | WordPress | sites whose homepage loaded | 185 | 361 | 0.5125 | 2026-10-01 | 2026-10-02 |
| all | platform_wix | Wix | sites whose homepage loaded | 15 | 361 | 0.0416 | 2026-10-01 | 2026-10-02 |
| all | platform_squarespace | Squarespace | sites whose homepage loaded | 8 | 361 | 0.0222 | 2026-10-01 | 2026-10-02 |
| all | platform_godaddy | GoDaddy Website Builder | sites whose homepage loaded | 12 | 361 | 0.0332 | 2026-10-01 | 2026-10-02 |
| all | platform_duda | Duda | sites whose homepage loaded | 14 | 361 | 0.0388 | 2026-10-01 | 2026-10-02 |
| all | platform_webflow | Webflow | sites whose homepage loaded | 6 | 361 | 0.0166 | 2026-10-01 | 2026-10-02 |
| all | platform_shopify | Shopify | sites whose homepage loaded | 1 | 361 | 0.0028 | 2026-10-01 | 2026-10-02 |
| all | platform_hubspot | HubSpot | sites whose homepage loaded | 0 | 361 | 0 | 2026-10-01 | 2026-10-02 |
| all | platform_weebly | Weebly | sites whose homepage loaded | 2 | 361 | 0.0055 | 2026-10-01 | 2026-10-02 |
| all | platform_other | Other or not detected | sites whose homepage loaded | 118 | 361 | 0.3269 | 2026-10-01 | 2026-10-02 |
| hvac | not_read_robots_unreachable | Not read: robots.txt did not answer (an error or no response), so we did not crawl | sites | 1 | 147 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | not_read_disallowed | Not read: robots.txt disallows our crawler | sites | 1 | 147 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | home_ok | Homepage loaded | sites whose homepage we requested | 135 | 145 | 0.931 | 2026-10-01 | 2026-10-02 |
| hvac | sample_beyond_home | At least one page beyond the homepage read | sites whose homepage loaded | 120 | 135 | 0.8889 | 2026-10-01 | 2026-10-02 |
| hvac | https | Served over HTTPS | sites whose homepage loaded | 135 | 135 | 1 | 2026-10-01 | 2026-10-02 |
| hvac | no_answer_engine_blocked | Test 1: robots.txt blocks none of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended | sites whose robots.txt answered | 145 | 146 | 0.9932 | 2026-10-01 | 2026-10-02 |
| hvac | llms_valid | Test 2: has an llms.txt that starts with a title line, as the llmstxt.org format asks | sites where we checked /llms.txt | 37 | 145 | 0.2552 | 2026-10-01 | 2026-10-02 |
| hvac | local_business_nap | Test 3: homepage has a LocalBusiness (or subtype) node with the business's name, phone, and address | sites whose homepage loaded | 67 | 135 | 0.4963 | 2026-10-01 | 2026-10-02 |
| hvac | pws_any | Test 4: publishes a price, a warranty term, or a product spec, in structured data or in page text | sites whose homepage loaded (up to 8 pages read each) | 72 | 135 | 0.5333 | 2026-10-01 | 2026-10-02 |
| hvac | citable | Test 5: publishes two or more of five kinds of other citable data (FAQ, dataset, table of numbers, service-area cities, license number or years in business) | sites whose homepage loaded (up to 8 pages read each) | 91 | 135 | 0.6741 | 2026-10-01 | 2026-10-02 |
| hvac | all_five | Passes all five tests | sites whose robots.txt, llms.txt, and homepage were all read | 20 | 135 | 0.1481 | 2026-10-01 | 2026-10-02 |
| hvac | tests_passed_0 | Passes exactly 0 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 0 | 135 | 0 | 2026-10-01 | 2026-10-02 |
| hvac | tests_passed_1 | Passes exactly 1 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 24 | 135 | 0.1778 | 2026-10-01 | 2026-10-02 |
| hvac | tests_passed_2 | Passes exactly 2 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 26 | 135 | 0.1926 | 2026-10-01 | 2026-10-02 |
| hvac | tests_passed_3 | Passes exactly 3 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 34 | 135 | 0.2519 | 2026-10-01 | 2026-10-02 |
| hvac | tests_passed_4 | Passes exactly 4 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 31 | 135 | 0.2296 | 2026-10-01 | 2026-10-02 |
| hvac | tests_passed_5 | Passes exactly 5 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 20 | 135 | 0.1481 | 2026-10-01 | 2026-10-02 |
| hvac | price_structured | A price in structured data (an Offer price, or a priceRange with a number) | sites whose homepage loaded (up to 8 pages read each) | 6 | 135 | 0.0444 | 2026-10-01 | 2026-10-02 |
| hvac | price_any | A price, in structured data or page text (a range, per unit, installed, or starting at) | sites whose homepage loaded (up to 8 pages read each) | 47 | 135 | 0.3481 | 2026-10-01 | 2026-10-02 |
| hvac | warranty_structured | A warranty in structured data | sites whose homepage loaded (up to 8 pages read each) | 1 | 135 | 0.0074 | 2026-10-01 | 2026-10-02 |
| hvac | warranty_any | A warranty term with its length (years or lifetime), in structured data or page text | sites whose homepage loaded (up to 8 pages read each) | 49 | 135 | 0.363 | 2026-10-01 | 2026-10-02 |
| hvac | spec_structured | A product spec in structured data (additionalProperty on a Product or Service) | sites whose homepage loaded (up to 8 pages read each) | 1 | 135 | 0.0074 | 2026-10-01 | 2026-10-02 |
| hvac | spec_any | A product spec with its value (U-factor, SEER2, impact class, and the like), in structured data or page text | sites whose homepage loaded (up to 8 pages read each) | 32 | 135 | 0.237 | 2026-10-01 | 2026-10-02 |
| hvac | pws_structured | A price, warranty, or product spec in structured data | sites whose homepage loaded (up to 8 pages read each) | 8 | 135 | 0.0593 | 2026-10-01 | 2026-10-02 |
| hvac | faq_structured | FAQPage structured data | sites whose homepage loaded (up to 8 pages read each) | 48 | 135 | 0.3556 | 2026-10-01 | 2026-10-02 |
| hvac | faq_any | FAQ content: FAQPage schema, or an FAQ page or section with three or more questions | sites whose homepage loaded (up to 8 pages read each) | 75 | 135 | 0.5556 | 2026-10-01 | 2026-10-02 |
| hvac | dataset | A published dataset (Dataset schema, a /data/ section, or a CSV, JSON, or spreadsheet download) | sites whose homepage loaded (up to 8 pages read each) | 0 | 135 | 0 | 2026-10-01 | 2026-10-02 |
| hvac | numeric_table | An HTML table with numbers in it | sites whose homepage loaded (up to 8 pages read each) | 9 | 135 | 0.0667 | 2026-10-01 | 2026-10-02 |
| hvac | service_area | Service-area cities: city location pages, or a service-area page naming three or more metro cities | sites whose homepage loaded (up to 8 pages read each) | 86 | 135 | 0.637 | 2026-10-01 | 2026-10-02 |
| hvac | license_on_site | A contractor license number (Arizona ROC format) on the site | sites whose homepage loaded (up to 8 pages read each) | 71 | 135 | 0.5259 | 2026-10-01 | 2026-10-02 |
| hvac | years_in_business | Years in business stated ("since 1998", "25 years of experience", or foundingDate) | sites whose homepage loaded (up to 8 pages read each) | 83 | 135 | 0.6148 | 2026-10-01 | 2026-10-02 |
| hvac | jsonld | Homepage has JSON-LD structured data | sites whose homepage loaded | 107 | 135 | 0.7926 | 2026-10-01 | 2026-10-02 |
| hvac | local_business | Homepage has a LocalBusiness (or subtype) node | sites whose homepage loaded | 78 | 135 | 0.5778 | 2026-10-01 | 2026-10-02 |
| hvac | nap_in_schema | Homepage schema gives the business's name, phone, and address together (any business node) | sites whose homepage loaded | 67 | 135 | 0.4963 | 2026-10-01 | 2026-10-02 |
| hvac | duplicate_business_nodes | Homepage has more than one separate business node | sites whose homepage loaded | 40 | 135 | 0.2963 | 2026-10-01 | 2026-10-02 |
| hvac | conflicting_nap | Business schema gives more than one phone or street address across the pages read | sites whose homepage loaded (up to 8 pages read each) | 13 | 135 | 0.0963 | 2026-10-01 | 2026-10-02 |
| hvac | jsonld_errors | Homepage has a JSON-LD block that does not parse | sites whose homepage loaded | 3 | 135 | 0.0222 | 2026-10-01 | 2026-10-02 |
| hvac | review_markup | Review or aggregateRating markup on a page read | sites whose homepage loaded (up to 8 pages read each) | 39 | 135 | 0.2889 | 2026-10-01 | 2026-10-02 |
| hvac | same_as | Homepage business node lists sameAs profiles | sites whose homepage loaded (up to 8 pages read each) | 62 | 135 | 0.4593 | 2026-10-01 | 2026-10-02 |
| hvac | heavy_homepage | Homepage is over 150 KB of HTML | sites whose homepage loaded (up to 8 pages read each) | 76 | 135 | 0.563 | 2026-10-01 | 2026-10-02 |
| hvac | generic_title | A page read has a template title ("Complete Guide", "Everything You Need") | sites whose homepage loaded (up to 8 pages read each) | 0 | 135 | 0 | 2026-10-01 | 2026-10-02 |
| hvac | post_byline | The blog post read names a person as its author | sites where we read a blog post | 23 | 82 | 0.2805 | 2026-10-01 | 2026-10-02 |
| hvac | post_dated | The blog post read shows a date | sites where we read a blog post | 41 | 82 | 0.5 | 2026-10-01 | 2026-10-02 |
| hvac | llms_present | Has an llms.txt file | sites where we checked /llms.txt | 51 | 145 | 0.3517 | 2026-10-01 | 2026-10-02 |
| hvac | robots_read | Has a robots.txt with rules | sites whose robots.txt answered | 120 | 146 | 0.8219 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_gptbot | robots.txt blocks GPTBot from the homepage | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_oai-searchbot | robots.txt blocks OAI-SearchBot from the homepage | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_claudebot | robots.txt blocks ClaudeBot from the homepage | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_perplexitybot | robots.txt blocks PerplexityBot from the homepage | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_google-extended | robots.txt blocks Google-Extended from the homepage | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_ccbot | robots.txt blocks CCBot from the homepage | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_any_answer_engine | robots.txt blocks at least one of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | blocks_any_ai_crawler | Blocks any AI crawler in robots.txt | sites whose robots.txt answered | 1 | 146 | 0.0068 | 2026-10-01 | 2026-10-02 |
| hvac | names_gptbot | robots.txt has a rule group naming GPTBot | sites with a robots.txt file | 13 | 120 | 0.1083 | 2026-10-01 | 2026-10-02 |
| hvac | names_any_ai_agent | robots.txt has a rule group naming any of the six AI agents | sites with a robots.txt file | 13 | 120 | 0.1083 | 2026-10-01 | 2026-10-02 |
| hvac | platform_wordpress | WordPress | sites whose homepage loaded | 75 | 135 | 0.5556 | 2026-10-01 | 2026-10-02 |
| hvac | platform_wix | Wix | sites whose homepage loaded | 4 | 135 | 0.0296 | 2026-10-01 | 2026-10-02 |
| hvac | platform_squarespace | Squarespace | sites whose homepage loaded | 2 | 135 | 0.0148 | 2026-10-01 | 2026-10-02 |
| hvac | platform_godaddy | GoDaddy Website Builder | sites whose homepage loaded | 1 | 135 | 0.0074 | 2026-10-01 | 2026-10-02 |
| hvac | platform_duda | Duda | sites whose homepage loaded | 2 | 135 | 0.0148 | 2026-10-01 | 2026-10-02 |
| hvac | platform_webflow | Webflow | sites whose homepage loaded | 2 | 135 | 0.0148 | 2026-10-01 | 2026-10-02 |
| hvac | platform_shopify | Shopify | sites whose homepage loaded | 1 | 135 | 0.0074 | 2026-10-01 | 2026-10-02 |
| hvac | platform_hubspot | HubSpot | sites whose homepage loaded | 0 | 135 | 0 | 2026-10-01 | 2026-10-02 |
| hvac | platform_weebly | Weebly | sites whose homepage loaded | 1 | 135 | 0.0074 | 2026-10-01 | 2026-10-02 |
| hvac | platform_other | Other or not detected | sites whose homepage loaded | 47 | 135 | 0.3481 | 2026-10-01 | 2026-10-02 |
| roofing | not_read_robots_unreachable | Not read: robots.txt did not answer (an error or no response), so we did not crawl | sites | 1 | 125 | 0.008 | 2026-10-01 | 2026-10-02 |
| roofing | not_read_disallowed | Not read: robots.txt disallows our crawler | sites | 0 | 125 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | home_ok | Homepage loaded | sites whose homepage we requested | 121 | 124 | 0.9758 | 2026-10-01 | 2026-10-02 |
| roofing | sample_beyond_home | At least one page beyond the homepage read | sites whose homepage loaded | 106 | 121 | 0.876 | 2026-10-01 | 2026-10-02 |
| roofing | https | Served over HTTPS | sites whose homepage loaded | 121 | 121 | 1 | 2026-10-01 | 2026-10-02 |
| roofing | no_answer_engine_blocked | Test 1: robots.txt blocks none of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended | sites whose robots.txt answered | 123 | 124 | 0.9919 | 2026-10-01 | 2026-10-02 |
| roofing | llms_valid | Test 2: has an llms.txt that starts with a title line, as the llmstxt.org format asks | sites where we checked /llms.txt | 40 | 124 | 0.3226 | 2026-10-01 | 2026-10-02 |
| roofing | local_business_nap | Test 3: homepage has a LocalBusiness (or subtype) node with the business's name, phone, and address | sites whose homepage loaded | 56 | 121 | 0.4628 | 2026-10-01 | 2026-10-02 |
| roofing | pws_any | Test 4: publishes a price, a warranty term, or a product spec, in structured data or in page text | sites whose homepage loaded (up to 8 pages read each) | 58 | 121 | 0.4793 | 2026-10-01 | 2026-10-02 |
| roofing | citable | Test 5: publishes two or more of five kinds of other citable data (FAQ, dataset, table of numbers, service-area cities, license number or years in business) | sites whose homepage loaded (up to 8 pages read each) | 71 | 121 | 0.5868 | 2026-10-01 | 2026-10-02 |
| roofing | all_five | Passes all five tests | sites whose robots.txt, llms.txt, and homepage were all read | 14 | 121 | 0.1157 | 2026-10-01 | 2026-10-02 |
| roofing | tests_passed_0 | Passes exactly 0 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 0 | 121 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | tests_passed_1 | Passes exactly 1 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 29 | 121 | 0.2397 | 2026-10-01 | 2026-10-02 |
| roofing | tests_passed_2 | Passes exactly 2 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 21 | 121 | 0.1736 | 2026-10-01 | 2026-10-02 |
| roofing | tests_passed_3 | Passes exactly 3 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 24 | 121 | 0.1983 | 2026-10-01 | 2026-10-02 |
| roofing | tests_passed_4 | Passes exactly 4 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 33 | 121 | 0.2727 | 2026-10-01 | 2026-10-02 |
| roofing | tests_passed_5 | Passes exactly 5 of the five tests | sites whose robots.txt, llms.txt, and homepage were all read | 14 | 121 | 0.1157 | 2026-10-01 | 2026-10-02 |
| roofing | price_structured | A price in structured data (an Offer price, or a priceRange with a number) | sites whose homepage loaded (up to 8 pages read each) | 2 | 121 | 0.0165 | 2026-10-01 | 2026-10-02 |
| roofing | price_any | A price, in structured data or page text (a range, per unit, installed, or starting at) | sites whose homepage loaded (up to 8 pages read each) | 28 | 121 | 0.2314 | 2026-10-01 | 2026-10-02 |
| roofing | warranty_structured | A warranty in structured data | sites whose homepage loaded (up to 8 pages read each) | 1 | 121 | 0.0083 | 2026-10-01 | 2026-10-02 |
| roofing | warranty_any | A warranty term with its length (years or lifetime), in structured data or page text | sites whose homepage loaded (up to 8 pages read each) | 46 | 121 | 0.3802 | 2026-10-01 | 2026-10-02 |
| roofing | spec_structured | A product spec in structured data (additionalProperty on a Product or Service) | sites whose homepage loaded (up to 8 pages read each) | 0 | 121 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | spec_any | A product spec with its value (U-factor, SEER2, impact class, and the like), in structured data or page text | sites whose homepage loaded (up to 8 pages read each) | 9 | 121 | 0.0744 | 2026-10-01 | 2026-10-02 |
| roofing | pws_structured | A price, warranty, or product spec in structured data | sites whose homepage loaded (up to 8 pages read each) | 3 | 121 | 0.0248 | 2026-10-01 | 2026-10-02 |
| roofing | faq_structured | FAQPage structured data | sites whose homepage loaded (up to 8 pages read each) | 38 | 121 | 0.314 | 2026-10-01 | 2026-10-02 |
| roofing | faq_any | FAQ content: FAQPage schema, or an FAQ page or section with three or more questions | sites whose homepage loaded (up to 8 pages read each) | 63 | 121 | 0.5207 | 2026-10-01 | 2026-10-02 |
| roofing | dataset | A published dataset (Dataset schema, a /data/ section, or a CSV, JSON, or spreadsheet download) | sites whose homepage loaded (up to 8 pages read each) | 0 | 121 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | numeric_table | An HTML table with numbers in it | sites whose homepage loaded (up to 8 pages read each) | 16 | 121 | 0.1322 | 2026-10-01 | 2026-10-02 |
| roofing | service_area | Service-area cities: city location pages, or a service-area page naming three or more metro cities | sites whose homepage loaded (up to 8 pages read each) | 56 | 121 | 0.4628 | 2026-10-01 | 2026-10-02 |
| roofing | license_on_site | A contractor license number (Arizona ROC format) on the site | sites whose homepage loaded (up to 8 pages read each) | 62 | 121 | 0.5124 | 2026-10-01 | 2026-10-02 |
| roofing | years_in_business | Years in business stated ("since 1998", "25 years of experience", or foundingDate) | sites whose homepage loaded (up to 8 pages read each) | 73 | 121 | 0.6033 | 2026-10-01 | 2026-10-02 |
| roofing | jsonld | Homepage has JSON-LD structured data | sites whose homepage loaded | 89 | 121 | 0.7355 | 2026-10-01 | 2026-10-02 |
| roofing | local_business | Homepage has a LocalBusiness (or subtype) node | sites whose homepage loaded | 64 | 121 | 0.5289 | 2026-10-01 | 2026-10-02 |
| roofing | nap_in_schema | Homepage schema gives the business's name, phone, and address together (any business node) | sites whose homepage loaded | 56 | 121 | 0.4628 | 2026-10-01 | 2026-10-02 |
| roofing | duplicate_business_nodes | Homepage has more than one separate business node | sites whose homepage loaded | 30 | 121 | 0.2479 | 2026-10-01 | 2026-10-02 |
| roofing | conflicting_nap | Business schema gives more than one phone or street address across the pages read | sites whose homepage loaded (up to 8 pages read each) | 8 | 121 | 0.0661 | 2026-10-01 | 2026-10-02 |
| roofing | jsonld_errors | Homepage has a JSON-LD block that does not parse | sites whose homepage loaded | 1 | 121 | 0.0083 | 2026-10-01 | 2026-10-02 |
| roofing | review_markup | Review or aggregateRating markup on a page read | sites whose homepage loaded (up to 8 pages read each) | 19 | 121 | 0.157 | 2026-10-01 | 2026-10-02 |
| roofing | same_as | Homepage business node lists sameAs profiles | sites whose homepage loaded (up to 8 pages read each) | 52 | 121 | 0.4298 | 2026-10-01 | 2026-10-02 |
| roofing | heavy_homepage | Homepage is over 150 KB of HTML | sites whose homepage loaded (up to 8 pages read each) | 80 | 121 | 0.6612 | 2026-10-01 | 2026-10-02 |
| roofing | generic_title | A page read has a template title ("Complete Guide", "Everything You Need") | sites whose homepage loaded (up to 8 pages read each) | 2 | 121 | 0.0165 | 2026-10-01 | 2026-10-02 |
| roofing | post_byline | The blog post read names a person as its author | sites where we read a blog post | 26 | 68 | 0.3824 | 2026-10-01 | 2026-10-02 |
| roofing | post_dated | The blog post read shows a date | sites where we read a blog post | 33 | 68 | 0.4853 | 2026-10-01 | 2026-10-02 |
| roofing | llms_present | Has an llms.txt file | sites where we checked /llms.txt | 43 | 124 | 0.3468 | 2026-10-01 | 2026-10-02 |
| roofing | robots_read | Has a robots.txt with rules | sites whose robots.txt answered | 104 | 124 | 0.8387 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_gptbot | robots.txt blocks GPTBot from the homepage | sites whose robots.txt answered | 1 | 124 | 0.0081 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_oai-searchbot | robots.txt blocks OAI-SearchBot from the homepage | sites whose robots.txt answered | 0 | 124 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_claudebot | robots.txt blocks ClaudeBot from the homepage | sites whose robots.txt answered | 0 | 124 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_perplexitybot | robots.txt blocks PerplexityBot from the homepage | sites whose robots.txt answered | 0 | 124 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_google-extended | robots.txt blocks Google-Extended from the homepage | sites whose robots.txt answered | 1 | 124 | 0.0081 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_ccbot | robots.txt blocks CCBot from the homepage | sites whose robots.txt answered | 1 | 124 | 0.0081 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_any_answer_engine | robots.txt blocks at least one of GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended | sites whose robots.txt answered | 1 | 124 | 0.0081 | 2026-10-01 | 2026-10-02 |
| roofing | blocks_any_ai_crawler | Blocks any AI crawler in robots.txt | sites whose robots.txt answered | 1 | 124 | 0.0081 | 2026-10-01 | 2026-10-02 |
| roofing | names_gptbot | robots.txt has a rule group naming GPTBot | sites with a robots.txt file | 10 | 104 | 0.0962 | 2026-10-01 | 2026-10-02 |
| roofing | names_any_ai_agent | robots.txt has a rule group naming any of the six AI agents | sites with a robots.txt file | 10 | 104 | 0.0962 | 2026-10-01 | 2026-10-02 |
| roofing | platform_wordpress | WordPress | sites whose homepage loaded | 64 | 121 | 0.5289 | 2026-10-01 | 2026-10-02 |
| roofing | platform_wix | Wix | sites whose homepage loaded | 4 | 121 | 0.0331 | 2026-10-01 | 2026-10-02 |
| roofing | platform_squarespace | Squarespace | sites whose homepage loaded | 2 | 121 | 0.0165 | 2026-10-01 | 2026-10-02 |
| roofing | platform_godaddy | GoDaddy Website Builder | sites whose homepage loaded | 4 | 121 | 0.0331 | 2026-10-01 | 2026-10-02 |
| roofing | platform_duda | Duda | sites whose homepage loaded | 8 | 121 | 0.0661 | 2026-10-01 | 2026-10-02 |
| roofing | platform_webflow | Webflow | sites whose homepage loaded | 2 | 121 | 0.0165 | 2026-10-01 | 2026-10-02 |
| roofing | platform_shopify | Shopify | sites whose homepage loaded | 0 | 121 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | platform_hubspot | HubSpot | sites whose homepage loaded | 0 | 121 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | platform_weebly | Weebly | sites whose homepage loaded | 0 | 121 | 0 | 2026-10-01 | 2026-10-02 |
| roofing | platform_other | Other or not detected | sites whose homepage loaded | 37 | 121 | 0.3058 | 2026-10-01 | 2026-10-02 |
| windows | not_read_robots_unreachable | Not read: robots.txt did not answer (an error or no response), so we did not crawl | sites | 1 | 110 | 0.0091 | 2026-10-01 | 2026-10-02 |
| windows | not_read_disallowed | Not read: robots.txt disallows our crawler | sites | 0 | 110 | 0 | 2026-10-01 | 2026-10-02 |
| windows | home_ok | Homepage loaded | sites whose homepage we requested | 105 | 109 | 0.9633 | 2026-10-01 | 2026-10-02 |
| windows | sample_beyond_home | At least one page beyond the homepage read | sites whose homepage loaded | 92 | 105 | 0.8762 | 2026-10-01 | 2026-10-02 |
| windows | https | Served over HTTPS | sites whose homepage loaded | 105 | 105 | 1 | 2026-10-01 | 2026-10-02 |
Method
The sample is every business we track in Phoenix's roofing, heating and air conditioning, and window and door trades that is active (confirmed as the trade) and has a website: 382 sites after removing duplicate listings of the same domain. Each site was read once, Oct 1, 2026 to Oct 2, 2026, by our crawler (CiteMyResearch/1.0 (+https://citemy.ai/research/phoenix-contractor-ai-readiness; contact https://citemy.ai/contact)), one request at a time per site, a second apart, at most four sites at once, with a 15-second timeout, and only at public addresses. We read robots.txt first and obeyed it for our own crawler: a site whose robots.txt disallows us, or does not answer (a server error or no response, which RFC 9309 says to treat as a full disallow), was not read further and is counted apart. Then /llms.txt, the homepage, the sitemap (the file robots.txt names or /sitemap.xml, and up to two files of a sitemap index), and up to 7 more pages from the sitemap and the homepage's links, 8 pages at most: pricing, warranty, FAQ, service, product, about, service-area, one blog post, and financing pages first, only pages robots.txt allows us. Crawler access is what robots.txt says for each AI agent's token at the homepage path, using the same robots.txt parser as our audit; we did not send requests as those agents, so a firewall that blocks them is not measured here. llms.txt counts as present when /llms.txt returns a non-HTML file, and valid when its first line is a "# " title, as the llmstxt.org format asks. Structured data is the pages' JSON-LD, read with our audit's parser. Prices, warranties, specs, license numbers, location pages, datasets, and duplicate or conflicting business nodes are judged with our audit's own checks and patterns; FAQ sections and tables are read from the page markup. The five tests: (1) AI answer-engine crawlers allowed: robots.txt does not block GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, or Google-Extended from the homepage (no robots.txt at all passes). (2) A valid llms.txt: /llms.txt is a text file whose first line is a "# " title, as the llmstxt.org format asks. (3) Business details in schema: The homepage's JSON-LD has a LocalBusiness node (or a subtype, such as RoofingContractor or HVACBusiness) that itself carries the business's name, a phone number, and an address. (4) Prices, warranties, or specs published: On any page we read, a price (an Offer price, a priceRange with a number, or a dollar figure stated as a range, per unit, installed, or "starting at"), a warranty with its length (in years, or lifetime), or a product spec with its value (U-factor, SHGC, SEER2, AFUE, impact class, wind rating, and the like), in structured data or in the page text. (5) Other citable data: At least two of five kinds, on the pages we read: FAQ content (FAQPage schema, or an FAQ page or section with three or more questions); a published dataset (Dataset schema, a /data/ section, or a CSV, JSON, or spreadsheet download); an HTML table with numbers in it (business hours do not count); service-area cities (city location pages, or a service-area page naming three or more of the metro's cities); and a business fact (a contractor license number, or years in business). A site is scored on the tests only when its robots.txt, llms.txt, and homepage were all read. Platform is detected from markers in the homepage HTML (theme and asset paths, generator tags), as in our audit. Every share is over the sites the measure could be read on, stated beside it. A share is stated only from 20 sites up. No business or website is named in this study or its data. Results describe what was measured, not a promise of ranking.
Sources
License: CC BY 4.0. Cite as: Phoenix contractor websites: AI readiness, October 2026, CiteMy (Ben Hinton), 2026-10-02, https://citemy.ai/data/phoenix-contractor-ai-readiness-2026-10
Want data like this for your business?
We build first-party datasets from your own jobs and publish them where the engines read. Start with a free audit: a score out of 100 and the three findings that matter most.