<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Veilvex</title>
    <description>The latest articles on DEV Community by Veilvex (@veilvex).</description>
    <link>https://dev.to/veilvex</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4215099%2F0c092727-388c-4961-a2d5-c46819bc20ed.jpg</url>
      <title>DEV Community: Veilvex</title>
      <link>https://dev.to/veilvex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/veilvex"/>
    <language>en</language>
    <item>
      <title>We checked 178 small business websites on Google's first page: half hide prices, 8% block AI</title>
      <dc:creator>Veilvex</dc:creator>
      <pubDate>Fri, 30 Oct 2026 13:28:19 +0000</pubDate>
      <link>https://dev.to/veilvex/we-checked-178-small-business-websites-on-googles-first-page-half-hide-prices-8-block-ai-47d9</link>
      <guid>https://dev.to/veilvex/we-checked-178-small-business-websites-on-googles-first-page-half-hide-prices-8-block-ai-47d9</guid>
      <description>&lt;p&gt;In October 2026 we opened 178 websites of small businesses that rank on the first page of Google for local queries: dentists in Dubai, plumbers in London, hair salons in Berlin, family lawyers in Sydney, vets in Vienna, accountants in Miami and more. 24 cities, 15 niches. 157 sites could be opened and checked.&lt;/p&gt;

&lt;p&gt;We looked at the home page the way a phone browser loads it, and at what a search engine or an AI assistant can read.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basics are solved
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Share of sites&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile layout (viewport)&lt;/td&gt;
&lt;td&gt;98%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page title&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta description&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tap-to-call &lt;code&gt;tel:&lt;/code&gt; link&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contact or booking form&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On page one, an unsafe or non-mobile site is now rare. The gaps are elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gap 1: prices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;48%&lt;/strong&gt; of the sites show no price on the home page and have no visible link to a price page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0 of 7 vet clinics showed prices&lt;/li&gt;
&lt;li&gt;1 of 7 family law firms did&lt;/li&gt;
&lt;li&gt;beauty salons and cleaning companies were the most open: 80%+ showed prices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gap 2: no messenger
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;52%&lt;/strong&gt; have no link to WhatsApp or Telegram (45% link WhatsApp, 8% Telegram). &lt;strong&gt;11%&lt;/strong&gt; have neither a &lt;code&gt;tel:&lt;/code&gt; link nor a messenger link, so on a phone the visitor copies the number by hand.&lt;/p&gt;

&lt;p&gt;Dental clinics lead: 22 of 23 have a messenger link. Law firms and vet clinics: 0 of 7 each.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gap 3: AI crawlers blocked
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;12 of 157 sites (8%)&lt;/strong&gt; disallow AI crawlers such as GPTBot, ClaudeBot or Google-Extended in &lt;code&gt;robots.txt&lt;/code&gt;, often through a default setting of a site builder or security plugin. Another 14 sites returned 401/403/429 to an automated request.&lt;/p&gt;

&lt;p&gt;The most striking niche: &lt;strong&gt;6 of 10 accounting firms&lt;/strong&gt; blocked AI crawlers. If someone asks an assistant to recommend an accountant in Miami, those firms give it very little to work with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;This is a snapshot of first-page results, not a random sample. Sites that already rank well are usually in better shape than average. Messenger links injected by JavaScript widgets may be undercounted.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check on your own site
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Show a price "from" or a range, or link a price page.&lt;/li&gt;
&lt;li&gt;Put a WhatsApp or Telegram button on the first screen on mobile.&lt;/li&gt;
&lt;li&gt;Make the phone number a &lt;code&gt;tel:&lt;/code&gt; link.&lt;/li&gt;
&lt;li&gt;Open your &lt;code&gt;robots.txt&lt;/code&gt; and make sure you are not blocking the AI assistants your clients use.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Full study with the method and niche breakdown: &lt;a href="https://veilvex.com/blog/small-business-websites-study-2026/" rel="noopener noreferrer"&gt;We checked 178 small business websites&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The anonymized data (CSV, one row per site), summaries by niche and city, and the checker script are open on GitHub: &lt;a href="https://github.com/Veilvex/small-business-websites-study" rel="noopener noreferrer"&gt;Veilvex/small-business-websites-study&lt;/a&gt; (data CC BY 4.0, code MIT).&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>ai</category>
      <category>opendata</category>
    </item>
    <item>
      <title>Before you build an app: the 4 questions we ask small businesses first</title>
      <dc:creator>Veilvex</dc:creator>
      <pubDate>Fri, 30 Oct 2026 10:53:57 +0000</pubDate>
      <link>https://dev.to/veilvex/before-you-build-an-app-the-4-questions-we-ask-small-businesses-first-49ma</link>
      <guid>https://dev.to/veilvex/before-you-build-an-app-the-4-questions-we-ask-small-businesses-first-49ma</guid>
      <description>&lt;p&gt;When a small business asks us for "an app", the first thing we do is not a quote. It is a question: &lt;strong&gt;what is the one thing your user needs to do?&lt;/strong&gt; Surprisingly often the answer does not need an App Store listing at all.&lt;/p&gt;

&lt;p&gt;Here is the short decision path we walk clients through before anyone draws a screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Is it a repeat action or a one-off?
&lt;/h2&gt;

&lt;p&gt;Apps earn their place on a home screen when people come back weekly or daily: ordering from the same café, tracking a loyalty balance, booking the same trainer. If a customer uses the product twice a year, they will not install anything. A fast mobile website that ranks in search does the job better.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Can it live inside a messenger?
&lt;/h2&gt;

&lt;p&gt;Bookings, orders, reminders, simple personal accounts: a Telegram or WhatsApp bot covers a surprising share of "we need an app" requests. No store review, no install friction, notifications work out of the box, and the launch takes days, not months.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. If it must be an app, does it need to be native?
&lt;/h2&gt;

&lt;p&gt;For typical business apps (catalogs, bookings, loyalty, service requests) one cross-platform codebase for iOS and Android is usually enough. Native development makes sense for heavy graphics, deep device features or very large audiences. Two native apps roughly mean two codebases to build and maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. What is the smallest version that proves demand?
&lt;/h2&gt;

&lt;p&gt;We write down the single main action, keep only the screens it needs, add sign-in only if it is truly required, launch, and watch real usage for a few weeks. Everything else goes to a "next stage" list with its own estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The costs people forget
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Store accounts:&lt;/strong&gt; Apple Developer is about $99 a year, Google Play a one-time $25.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; hosting, a database, push notifications, maps. Small for a small app, but monthly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updates:&lt;/strong&gt; every new iOS and Android release can break something. Many teams budget around 15–20% of the build cost per year for maintenance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is exotic, but it changes the conversation from "how much is an app" to "how much is the first useful version".&lt;/p&gt;

&lt;p&gt;We put the full breakdown, with a comparison table and the questions to answer before asking for a quote, here: &lt;a href="https://veilvex.com/blog/mobile-app-cost-2026/" rel="noopener noreferrer"&gt;How much does a mobile app cost in 2026&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>webdev</category>
      <category>startup</category>
      <category>freelance</category>
    </item>
    <item>
      <title>Landing page or multi-page website? The 5-minute question we ask every small-business client</title>
      <dc:creator>Veilvex</dc:creator>
      <pubDate>Thu, 29 Oct 2026 14:12:29 +0000</pubDate>
      <link>https://dev.to/veilvex/landing-page-or-multi-page-website-the-5-minute-question-we-ask-every-small-business-client-5kf</link>
      <guid>https://dev.to/veilvex/landing-page-or-multi-page-website-the-5-minute-question-we-ask-every-small-business-client-5kf</guid>
      <description>&lt;p&gt;Every small-business website project we take starts with the same question from the client: "Do I need a full website, or is one page enough?" It sounds like a budget question. It is really a question about where clients will come from.&lt;/p&gt;

&lt;p&gt;Here is the short framework we use to answer it in about five minutes, before anyone talks about design.&lt;/p&gt;

&lt;h2&gt;
  
  
  One page, one offer
&lt;/h2&gt;

&lt;p&gt;A landing page is one page built around one action: call, message, book, buy. It works best when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the business sells &lt;strong&gt;one product or one service&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;traffic is &lt;strong&gt;paid or already yours&lt;/strong&gt;: ads, social media, a newsletter, a QR code on a flyer;&lt;/li&gt;
&lt;li&gt;the goal is to &lt;strong&gt;test demand&lt;/strong&gt; before investing more;&lt;/li&gt;
&lt;li&gt;it is an &lt;strong&gt;event, launch or promotion&lt;/strong&gt; with a short life.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good landing page is not "everything on one long page". It answers the visitor's questions in order: what is offered, why it is worth it, what it costs, what others say, how to get in touch.&lt;/p&gt;

&lt;h2&gt;
  
  
  A page per service
&lt;/h2&gt;

&lt;p&gt;A multi-page site gives every service its own page, plus about, cases, contacts and articles. It makes sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there are &lt;strong&gt;three or more services&lt;/strong&gt; and people search for each one separately;&lt;/li&gt;
&lt;li&gt;the client wants customers &lt;strong&gt;from search without paying per click&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;the business works in &lt;strong&gt;several cities or languages&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;trust&lt;/strong&gt; matters: cases, team and articles in one place look more solid than a single page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this decides search visibility
&lt;/h2&gt;

&lt;p&gt;Search engines and AI assistants match a query to a page. Someone searching "teeth whitening in Dubai" lands on a page about teeth whitening, not on a dental clinic's one-page site where whitening is one line in a list. A landing page can rank for a narrow topic and a handful of queries. A site with a page per service has a chance for each of those services.&lt;/p&gt;

&lt;p&gt;So the honest rule we give clients: &lt;strong&gt;if most traffic will be paid, start with a landing page. If you want clients from Google, Yandex or ChatGPT-style answers, you need pages.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The five-minute checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Count the services.&lt;/strong&gt; One or two: a landing page may be enough. Three or more: multi-page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name the traffic source.&lt;/strong&gt; Mostly ads: landing page. Search and AI answers: multi-page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look one year ahead.&lt;/strong&gt; New services, cities or languages planned? Multi-page saves a rebuild.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare the price gap with the average order.&lt;/strong&gt; Often one or two extra clients cover it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build the landing page so it can grow.&lt;/strong&gt; Many projects start as one page for ads and become a full site once it is clear which services sell.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Numbers, if you need them
&lt;/h2&gt;

&lt;p&gt;For reference, at Veilvex a landing page starts at $500 and a multi-page business site at $900. We wrote longer, client-facing versions of this topic with tables and FAQs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://veilvex.com/blog/landing-vs-website/" rel="noopener noreferrer"&gt;Landing page or multi-page website: which to choose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://veilvex.com/blog/website-cost-2026/" rel="noopener noreferrer"&gt;How much does a website cost in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://veilvex.com/blog/seo-cost-2026/" rel="noopener noreferrer"&gt;How much does SEO cost in 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are also available in Russian, Azerbaijani and German, linked from the &lt;a href="https://veilvex.com/blog/" rel="noopener noreferrer"&gt;articles page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How do you answer this question for your clients? Curious whether other teams use a different rule of thumb.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We are &lt;a href="https://veilvex.com" rel="noopener noreferrer"&gt;Veilvex&lt;/a&gt;, a remote team working on websites, SEO, visibility in AI answers and AI automation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>freelance</category>
      <category>startup</category>
    </item>
    <item>
      <title>llms.txt on a 4-language static site: how we generate it, validate it and keep it honest</title>
      <dc:creator>Veilvex</dc:creator>
      <pubDate>Thu, 29 Oct 2026 11:11:13 +0000</pubDate>
      <link>https://dev.to/veilvex/llmstxt-on-a-4-language-static-site-how-we-generate-it-validate-it-and-keep-it-honest-4m8f</link>
      <guid>https://dev.to/veilvex/llmstxt-on-a-4-language-static-site-how-we-generate-it-validate-it-and-keep-it-honest-4m8f</guid>
      <description>&lt;p&gt;AI assistants now answer "who does X in Y" questions directly, and they build those answers from what they can read about you. For a small team, the cheapest thing you control is your own site: what crawlers are allowed to read, and how clearly your facts are stated.&lt;/p&gt;

&lt;p&gt;On veilvex.com (an Astro static site in English, Russian, Azerbaijani and German) we treat this as part of the build, not a one-off file. Here is the setup and the rules we ended up with.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. robots.txt: say yes explicitly
&lt;/h2&gt;

&lt;p&gt;Many sites block AI crawlers by accident: a template, a CDN toggle, a security plugin. We generate &lt;code&gt;robots.txt&lt;/code&gt; at build time and list the crawlers by name, even though &lt;code&gt;User-agent: *&lt;/code&gt; already allows everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=yes

User-agent: GPTBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Google-Extended
Allow: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why list them? Because the next person who adds a "block bots" rule will see the intent, and because a test can assert that every agent in the list stays allowed. The &lt;code&gt;Content-Signal&lt;/code&gt; line follows &lt;a href="https://contentsignals.org" rel="noopener noreferrer"&gt;contentsignals.org&lt;/a&gt; and states how the content may be used.&lt;/p&gt;

&lt;p&gt;Also check your CDN: on Cloudflare, "Block AI bots" and bot-fight settings can override a perfectly good &lt;code&gt;robots.txt&lt;/code&gt;. We verified with real requests that GPTBot, ClaudeBot and PerplexityBot get a 200 and the full HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. llms.txt: a fact sheet, generated from the same source as the pages
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://llmstxt.org" rel="noopener noreferrer"&gt;llms.txt&lt;/a&gt; is a proposed convention: a short Markdown file at the site root that tells language models what the site is and where the important pages are. It is not a ranking factor and no engine promises to use it. We still ship it because it costs nothing and removes ambiguity.&lt;/p&gt;

&lt;p&gt;The important decision: &lt;strong&gt;never write it by hand.&lt;/strong&gt; Ours is built by a script from the same i18n content files that render the pages. So the price on the services page and the price in &lt;code&gt;llms.txt&lt;/code&gt; cannot drift apart.&lt;/p&gt;

&lt;p&gt;What goes in (English, compact):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one-sentence brand line (the same sentence is used in the footer, the &lt;code&gt;Organization.description&lt;/code&gt; in JSON-LD and external profiles);&lt;/li&gt;
&lt;li&gt;an About block: name spelled out letter by letter (search engines like to "correct" unusual brand names), legal status stated plainly, official contacts only;&lt;/li&gt;
&lt;li&gt;every service with its "from" price and a link to its own page;&lt;/li&gt;
&lt;li&gt;service names in the other languages, linked to the localized pages;&lt;/li&gt;
&lt;li&gt;a "what we do not promise" section;&lt;/li&gt;
&lt;li&gt;a page list per language.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next to it there is &lt;code&gt;llms-full.txt&lt;/code&gt; with the full text of every page in all four languages (about 400 KB for us), for tools that want everything in one fetch.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The generator fails the build
&lt;/h2&gt;

&lt;p&gt;This is the part that keeps it honest. The script throws, and the deploy stops, when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; grows over &lt;strong&gt;15 KB&lt;/strong&gt; (a fact sheet nobody reads in full is not a fact sheet);&lt;/li&gt;
&lt;li&gt;a price in the file does not match the single price source (&lt;code&gt;prices.ts&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;the text contains words we decided never to publish: guarantees, "official", leftover template markup like &lt;code&gt;[[...]]&lt;/code&gt; or &lt;code&gt;{{...}}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simplified version of the price check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;formatFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PRICES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`llms.txt: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; shows a price that is not &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Models repeat what they read. If your site says "guaranteed first place" in one corner, that is what an assistant may quote back to a customer. A build-time check is cheaper than finding it later.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Structured data that agrees with the text
&lt;/h2&gt;

&lt;p&gt;Each service page carries &lt;code&gt;Service&lt;/code&gt; + &lt;code&gt;Offer&lt;/code&gt; and &lt;code&gt;FAQPage&lt;/code&gt; JSON-LD built from the same content object as the visible text, with stable &lt;code&gt;@id&lt;/code&gt;s across languages. The organization node uses the same brand line as &lt;code&gt;llms.txt&lt;/code&gt;. One source, three outputs (HTML, JSON-LD, llms.txt), so a crawler sees the same facts whichever it reads.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Sitemaps with honest dates and IndexNow
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt; is the date of the last git commit that touched the page's source files, not the build time. A build date on every URL tells crawlers nothing. After a deploy, a script compares the new sitemap with the live one and sends only new or changed URLs to IndexNow (Bing, Yandex and others).&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not do
&lt;/h2&gt;

&lt;p&gt;None of this makes an assistant recommend you. It removes the reasons not to: blocked crawlers, conflicting prices, vague descriptions. Being named still depends on being mentioned in places models trust: directories, reviews, articles, discussions. We check monthly by asking ChatGPT, Perplexity and Gemini the same set of queries and logging who they name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] AI crawlers allowed in &lt;code&gt;robots.txt&lt;/code&gt; and not blocked by your CDN&lt;/li&gt;
&lt;li&gt;[ ] One page per service with price range, area and FAQ in plain text&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;llms.txt&lt;/code&gt; generated from your content, not typed by hand&lt;/li&gt;
&lt;li&gt;[ ] Build fails on price mismatch or forbidden claims&lt;/li&gt;
&lt;li&gt;[ ] JSON-LD built from the same source as the visible text&lt;/li&gt;
&lt;li&gt;[ ] Real &lt;code&gt;lastmod&lt;/code&gt; dates, IndexNow after deploy&lt;/li&gt;
&lt;li&gt;[ ] A fixed list of 10–20 queries you re-check every month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see the live files at &lt;a href="https://veilvex.com/llms.txt" rel="noopener noreferrer"&gt;veilvex.com/llms.txt&lt;/a&gt; and &lt;a href="https://veilvex.com/robots.txt" rel="noopener noreferrer"&gt;veilvex.com/robots.txt&lt;/a&gt;. Questions about the setup are welcome in the comments.&lt;/p&gt;

&lt;p&gt;For business owners rather than developers, we explain the same topic in plain language here: &lt;a href="https://veilvex.com/blog/chatgpt-recommend-business/" rel="noopener noreferrer"&gt;How to get ChatGPT to recommend your business&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We are &lt;a href="https://veilvex.com" rel="noopener noreferrer"&gt;Veilvex&lt;/a&gt;, a remote team working on GEO (visibility in AI answers), SEO, websites and AI automation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>astro</category>
    </item>
  </channel>
</rss>
