<?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: Celestia Studio</title>
    <description>The latest articles on DEV Community by Celestia Studio (@celestia_studio).</description>
    <link>https://dev.to/celestia_studio</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%2F3970400%2F238bce5e-6809-4fa1-a6dd-8546822b8a9f.png</url>
      <title>DEV Community: Celestia Studio</title>
      <link>https://dev.to/celestia_studio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/celestia_studio"/>
    <language>en</language>
    <item>
      <title>Your Website Is Beautiful. Google Can't Find It. Here's Why.</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Sun, 12 Jul 2026 22:14:17 +0000</pubDate>
      <link>https://dev.to/celestia_studio/your-website-is-beautiful-google-cant-find-it-heres-why-2chg</link>
      <guid>https://dev.to/celestia_studio/your-website-is-beautiful-google-cant-find-it-heres-why-2chg</guid>
      <description>&lt;h1&gt;
  
  
  8 SEO Mistakes We Fix on Every Beautiful Website
&lt;/h1&gt;

&lt;p&gt;We run a Webflow agency. In the past year, we've audited over 60 websites for clients across France and internationally.&lt;/p&gt;

&lt;p&gt;The pattern is always the same: beautiful design, terrible SEO foundation.&lt;/p&gt;

&lt;p&gt;Here are the 8 issues we find on almost every site we audit, with the actual code fixes we apply.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. JavaScript-rendered content
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Content that renders client-side is often missed by Googlebot, especially on initial crawl.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ❌ Content only exists after JS executes
document.querySelector('.services').innerHTML = `
  &amp;lt;h2&amp;gt;Our Services&amp;lt;/h2&amp;gt;
  &amp;lt;p&amp;gt;Web design, SEO, branding...&amp;lt;/p&amp;gt;
`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; Keep all SEO-critical content in static HTML. Use JS for enhancement only.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ✅ Google sees this immediately --&amp;gt;
&amp;lt;section class="services"&amp;gt;
  &amp;lt;h2&amp;gt;Web Design Agency Lyon&amp;lt;/h2&amp;gt;
  &amp;lt;p&amp;gt;Webflow websites optimized for Google...&amp;lt;/p&amp;gt;
&amp;lt;/section&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For Webflow specifically: never put important copy inside interaction-triggered elements that start invisible.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Generic title tags
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ❌ Nobody searches for this --&amp;gt;
&amp;lt;title&amp;gt;Welcome | Creative Agency&amp;lt;/title&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ✅ Keyword first, 60 chars max --&amp;gt;
&amp;lt;title&amp;gt;Web Design Agency Lyon | Celestia Studio&amp;lt;/title&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rule:&lt;/strong&gt; 60 characters max, primary keyword first, brand last.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Missing or duplicate meta descriptions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Either blank (Google auto-generates, usually badly) or copy-pasted from page to page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ✅ Unique, 155 chars max, written like ad copy --&amp;gt;
&amp;lt;meta name="description" content="Webflow agency in Lyon. 
We build fast, SEO-optimized websites for SMBs and startups. 
Visible on Google from day 1. Free quote in 24h."&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Write meta descriptions as mini-ads: what you offer, for whom, why now, call to action.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Bad image alt text and filenames
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ❌ Meaningless filename, no alt --&amp;gt;
&amp;lt;img src="IMG_4892.jpg" alt=""&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ✅ Descriptive filename, keyword-rich alt --&amp;gt;
&amp;lt;img 
  src="agence-webflow-lyon-equipe.webp" 
  alt="Équipe Celestia Studio, agence Webflow à Lyon"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For local SEO: alt text should include the city and service when relevant.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Broken heading hierarchy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ❌ Design-first H1 with no keyword value --&amp;gt;
&amp;lt;h1&amp;gt;We Create Stories.&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ✅ One H1, keyword-rich, direct --&amp;gt;
&amp;lt;h1&amp;gt;Webflow Agency for Restaurants and Hotels in Lyon&amp;lt;/h1&amp;gt;

&amp;lt;!-- ✅ H2s build the content outline --&amp;gt;
&amp;lt;h2&amp;gt;Why Webflow for your restaurant website?&amp;lt;/h2&amp;gt;
&amp;lt;h2&amp;gt;Our recent projects in Lyon&amp;lt;/h2&amp;gt;
&amp;lt;h2&amp;gt;Frequently asked questions&amp;lt;/h2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Think of your H tags as the table of contents Google reads to understand your page.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Core Web Vitals failures
&lt;/h2&gt;

&lt;p&gt;Beautiful sites often score 30-50 on mobile PageSpeed because of unoptimized hero images, render-blocking fonts, and layout shifts from animations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fixes:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ✅ Preconnect to font origins --&amp;gt;
&amp;lt;link rel="preconnect" href="https://fonts.googleapis.com"&amp;gt;
&amp;lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&amp;gt;

&amp;lt;!-- ✅ Preload the LCP image --&amp;gt;
&amp;lt;link rel="preload" as="image" href="hero.webp" fetchpriority="high"&amp;gt;

/* ✅ Reserve space for images to prevent CLS */
.hero-image {
  aspect-ratio: 16 / 9;
  width: 100%;
}

&amp;lt;!-- ✅ Lazy load below-the-fold images --&amp;gt;
&amp;lt;img src="team.webp" loading="lazy" alt="..."&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Target: &lt;strong&gt;85+ on mobile PageSpeed&lt;/strong&gt;. Below 60 and you're actively losing rankings to competitors.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. No internal linking strategy
&lt;/h2&gt;

&lt;p&gt;Every page is an island. No links between service pages, no links from blog posts to service pages, no breadcrumbs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;p&amp;gt;
  Looking to improve your restaurant's online visibility? 
  &amp;lt;a href="/services/site-web-restaurant"&amp;gt;Our restaurant web design service&amp;lt;/a&amp;gt; 
  includes SEO optimization from day one.
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rule:&lt;/strong&gt; Every page should have at least 2-3 internal links. Service pages should receive links from blog posts and the homepage.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Missing structured data
&lt;/h2&gt;

&lt;p&gt;No schema markup means Google has to guess what type of content your page is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For a local business:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Celestia Studio",
  "url": "https://celestia-studio.fr",
  "telephone": "+33766862479",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Agde",
    "postalCode": "34300",
    "addressCountry": "FR"
  },
  "areaServed": "Lyon"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;For FAQ sections:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "How much does a Webflow website cost?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Our projects start at €1,500 for a professional website with SEO included."
    }
  }]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Validate everything with Google's &lt;a href="https://search.google.com/test/rich-results" rel="noopener noreferrer"&gt;Rich Results Test&lt;/a&gt; before publishing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The audit checklist
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;☐ Title tags: unique, keyword-first, &amp;lt;60 chars
☐ Meta descriptions: unique, &amp;lt;155 chars, written as ad copy
☐ H1: one per page, contains primary keyword
☐ H2-H6: logical hierarchy, includes secondary keywords
☐ Images: descriptive filenames, alt text on every image
☐ Core Web Vitals: LCP &amp;lt;2.5s, CLS &amp;lt;0.1, FID &amp;lt;100ms
☐ Internal links: every page receives and gives at least 2
☐ Structured data: LocalBusiness + FAQPage minimum
☐ Sitemap: submitted to Google Search Console
☐ Robots.txt: no accidental noindex
☐ Canonical tags: self-referencing canonicals on all pages
☐ Mobile: 85+ PageSpeed score on mobile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;The wine estate I mentioned at the start: 11 clicks in 3 months → 340 clicks/month after applying these 8 fixes. No new content. No backlinks. Just foundation work.&lt;/p&gt;

&lt;p&gt;Technical SEO isn't glamorous. But it's the difference between a site that wins awards and a site that wins clients.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We're &lt;a href="https://celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency based in the south of France. We build sites for SMBs who want to be visible on Google and cited by AI (ChatGPT, Perplexity). Free audit at &lt;a href="https://celestia-studio.fr" rel="noopener noreferrer"&gt;celestia-studio.fr&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://celestia-studio.fr/blog/pourquoi-mon-site-n-apparait-pas-sur-google" rel="noopener noreferrer"&gt;celestia-studio.fr&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>web</category>
      <category>design</category>
      <category>ai</category>
    </item>
    <item>
      <title>We Built a Client's Website on a 2-Month-Old Domain. Zero Backlinks. It Ranked #1 on Google in 5 Days.</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Fri, 03 Jul 2026 15:31:43 +0000</pubDate>
      <link>https://dev.to/celestia_studio/we-built-a-clients-website-on-a-2-month-old-domain-zero-backlinks-it-ranked-1-on-google-in-5-5fe</link>
      <guid>https://dev.to/celestia_studio/we-built-a-clients-website-on-a-2-month-old-domain-zero-backlinks-it-ranked-1-on-google-in-5-5fe</guid>
      <description>&lt;p&gt;What happened when we applied GEO Generative Engine Optimization to a real client site before a major event. The numbers were not what we expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  ARTICLE
&lt;/h2&gt;

&lt;p&gt;Every agency tells you the same thing when you ask about SEO results: "Give it six months. You need backlinks. You need domain authority." We've said the same thing ourselves.&lt;/p&gt;

&lt;p&gt;Then we ran an experiment on a real client site and got results that made us rethink everything we thought we knew about ranking timelines.&lt;/p&gt;

&lt;p&gt;This is not a theory piece. These are real numbers, real search queries, real screenshots.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Setup
&lt;/h3&gt;

&lt;p&gt;The client: Cover Page Agency, an event production and brand activation agency specializing in the Cannes Film Festival. Content creation, staffing, photography, drone coverage the kind of work that only matters during a very specific two-week window every year.&lt;/p&gt;

&lt;p&gt;The domain: two months old at the time of launch. No backlinks. No domain authority to speak of. No ad budget allocated.&lt;/p&gt;

&lt;p&gt;The competitors: agencies with 10 to 20 years of local presence in Cannes. Established names. Clients with long relationships. The kind of competition where you'd normally say "this is going to take a while."&lt;/p&gt;

&lt;p&gt;We launched the content strategy 10 days before the Festival of Cannes.&lt;/p&gt;




&lt;h3&gt;
  
  
  What We Did (The 5 Elements)
&lt;/h3&gt;

&lt;p&gt;We didn't use any backlink campaigns, guest posting, or technical SEO tricks. The entire strategy was content-based specifically, content structured for what we call GEO: Generative Engine Optimization.&lt;/p&gt;

&lt;p&gt;GEO is the discipline of structuring web content to be extractable and citable by AI search engines Google AI Overviews, Grok, Perplexity, ChatGPT Search in addition to ranking in classic Google results. The underlying logic: AI engines don't crawl sites the way Google's classic index does. They favor pages that answer questions directly, with precise data, in a format they can extract cleanly.&lt;/p&gt;

&lt;p&gt;Five elements on every page:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Extractable paragraphs.&lt;/strong&gt; Every H2 section opens with a direct answer 2 to 3 sentences, no preamble. Definitions written as "X is..." get extracted more reliably by AI than answers buried three paragraphs in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Precise numerical data.&lt;/strong&gt; Prices in euros, timelines in hours, volumes of deliverables per day. AI engines cite specific numbers. Vague descriptions don't get cited. "We offer competitive rates" doesn't get cited. "Photographer packages starting at €950 per day for Cannes coverage" gets cited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Full Schema JSON-LD.&lt;/strong&gt; FAQPage schema on every article, Organization schema sitewide, BlogPosting markup on long-form content. This tells Google and AI crawlers exactly what the page is, who published it, and what questions it answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Quick Answer block.&lt;/strong&gt; A 2-3 sentence direct answer at the very top of each article, before any intro, before any context. This is what Google pulls for featured snippets and what AI engines extract as a primary source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Dense internal linking.&lt;/strong&gt; Every service page linked from every relevant article, with descriptive anchor text. Not "click here" "book event photographers for Cannes Film Festival." This creates a coherent topic map that both Google and AI engines can navigate.&lt;/p&gt;

&lt;p&gt;What we did not do: buy a single backlink, run any paid ads, submit to directories, or wait.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Happened on Google
&lt;/h3&gt;

&lt;p&gt;Results started appearing 5 days after publishing.&lt;/p&gt;

&lt;p&gt;Not ranking improvements on existing pages. These were new pages on a new domain hitting competitive commercial queries against established local players.&lt;/p&gt;

&lt;p&gt;Verified positions in incognito mode from France:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"book event staff Cannes 2026"&lt;/strong&gt; Position 2, ahead of Agence Bonjour (10 years of local experience)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"hire photographer Cannes Film Festival 2026"&lt;/strong&gt; Position 3, a direct purchase-intent query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Cannes 2026 red carpet dress code"&lt;/strong&gt; Position 2, immediately behind the official Festival de Cannes website&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"private event Cannes 2026"&lt;/strong&gt; Position 6, competing with established local hotels and restaurants&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"content creation Cannes 2026"&lt;/strong&gt; Page 1, with image rich snippet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One article generated 696 impressions and 42 organic clicks in under two weeks. On a domain that existed for two months.&lt;/p&gt;

&lt;p&gt;The queries that ranked fastest were the ones with the clearest search intent and the least content competition long-tail commercial queries where no established competitor had bothered to write a dedicated page. The terrain was open. We just had to show up with the right structure.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Happened in AI Search
&lt;/h3&gt;

&lt;p&gt;This is where the results surprised us most.&lt;/p&gt;

&lt;p&gt;On Grok X's AI search engine we tested 16 prompts related to the client's services. Cover Page Agency was cited by name in &lt;strong&gt;15 out of 16&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Four of those citations were "Top Recommendations" a separate section Grok reserves for what it considers the strongest option for the query, with a full description, key strengths, and direct link:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Cannes content agency"&lt;/strong&gt; → Top Recommendation: &lt;em&gt;"strongest specialist for festival content creation"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"content creation Cannes"&lt;/strong&gt; → Top Recommendation: &lt;em&gt;"one of the strongest options for on-the-ground content production"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Cannes videographer"&lt;/strong&gt; → Top Recommendation, with packages cited (starting at €950/day)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Cannes reels content"&lt;/strong&gt; → Top Recommendation, with full package breakdown (€2,100 / €6,200)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On queries like "entertainment booking Cannes," the client appeared as the #1 option in comparison tables, ahead of local specialists who had been operating in the market for years.&lt;/p&gt;

&lt;p&gt;Perplexity citations were more partial the text of our articles was used as a source, with named mentions on specific long-tail queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The mechanism:&lt;/strong&gt; the competitors had serviceable websites with no long-form content. An AI engine that crawls those sites finds nothing to extract. Our pages had structured answers, precise pricing, specific service descriptions, and FAQPage schema. The AI had everything it needed to cite us with confidence.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why 5 Days and Not 6 Months
&lt;/h3&gt;

&lt;p&gt;Three factors combined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structural advantage.&lt;/strong&gt; The content was built exactly the way Google and AI engines prefer to read: direct answers first, numerical data throughout, clean Schema markup, short extractable paragraphs. When a page matches search intent this precisely, Google doesn't need months to evaluate it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Competition gap.&lt;/strong&gt; The established competitors had local brand authority but almost no long-form content on their sites. A 10-year-old domain with a homepage and a contact form doesn't beat a two-month-old domain with 15 well-structured articles targeting specific commercial queries. Authority matters less than relevance when relevance is absent from the competition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event timing.&lt;/strong&gt; Search volume for Cannes-related queries rises sharply 2-3 weeks before the Festival. We published 10 days before the start date, which means we were indexed and ranking exactly as demand was peaking. Timing amplified everything.&lt;/p&gt;




&lt;h3&gt;
  
  
  Three Things This Changes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Domain authority is overrated on specific long-tail queries.&lt;/strong&gt; A two-month-old domain can beat a ten-year-old domain if the content is structured better and the intent match is tighter. DA is a factor. It's not the deciding factor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AI visibility and Google ranking reinforce each other.&lt;/strong&gt; The same content attributes that get you a featured snippet on Google — direct answers, structured data, precise numbers are the same attributes that get you cited in Grok and Perplexity. You don't need two separate strategies. One well-structured page serves both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Timing creates opportunities that volume can't.&lt;/strong&gt; Publishing before a high-demand event on queries your competitors haven't targeted is worth more than months of incremental optimization on crowded terms. The window closes — but while it's open, it's extremely efficient.&lt;/p&gt;




&lt;h3&gt;
  
  
  Key Facts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5 days&lt;/strong&gt; from publication to Position 0 on Google, on a 2-month-old domain with zero backlinks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15/16 prompts&lt;/strong&gt; returned a named citation on Grok&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 Top Recommendations&lt;/strong&gt; exclusive Grok's highest citation tier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 backlinks, 0€ in ad spend&lt;/strong&gt; every result from content structure alone&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;696 impressions, 42 organic clicks&lt;/strong&gt; on a single article in under two weeks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Position 2&lt;/strong&gt; on "book event staff Cannes 2026" ahead of a 10-year-old competitor&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Does this only work for event-based businesses with seasonal demand?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. The timing advantage is strongest for events, but the underlying method structured content, Schema markup, answer-first writing applies to any business. Timing helps, but it's the structure that does the actual work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the risk of this approach?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The main risk is low-quality content at scale. If you produce pages that exist purely for SEO reasons with no real value for a user, Google will eventually filter them. Every page needs a genuine reason to exist beyond the keyword it targets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why did Grok cite the client and not its competitors?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because the competitors had no extractable content. A website with a homepage, a services list, and a contact form gives an AI nothing to work with. The client's pages had structured definitions, specific pricing, service breakdowns by deliverable — the kind of content an AI can cite with confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can this be replicated on WordPress or does it require Webflow?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The strategy works on any platform. Webflow is what we used here because it gives precise control over Schema markup and clean semantic HTML — but the principles apply equally to WordPress with the right configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long do these rankings last?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Positions built on content structure don't disappear with algorithm updates the way positions built on artificial backlinks do. They improve over time as the domain gains age and the content accumulates signals.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Enzo Marcelle is the founder of &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency based in the south of France specializing in SEO and GEO. &lt;a href="https://www.celestia-studio.fr/contact" rel="noopener noreferrer"&gt;Free GEO audit.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>career</category>
      <category>webflow</category>
    </item>
    <item>
      <title>A Web Agency Served 26 Cities. Google Only Showed It in 1</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Thu, 02 Jul 2026 12:13:56 +0000</pubDate>
      <link>https://dev.to/celestia_studio/a-web-agency-served-26-cities-google-only-showed-it-in-1-2e2i</link>
      <guid>https://dev.to/celestia_studio/a-web-agency-served-26-cities-google-only-showed-it-in-1-2e2i</guid>
      <description>&lt;h2&gt;
  
  
  ARTICLE
&lt;/h2&gt;

&lt;p&gt;The client was already established. Ten years in business, a strong reputation locally, good client retention, and a steady referral stream. The business was not struggling. But something was off with new client acquisition.&lt;/p&gt;

&lt;p&gt;When we pulled up their Google Search Console data, the answer was immediate. Their website was effectively invisible outside their home city. Competitors with weaker portfolios were showing up for the exact services this agency offered, in cities 40 minutes away. The problem wasn't the quality of their work.&lt;/p&gt;

&lt;p&gt;It was geography.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Agency Served 26 Cities. Their Website Mentioned 1.
&lt;/h3&gt;

&lt;p&gt;Their homepage said something like: "we work with businesses across the region." A single line. Accurate, but useless for search.&lt;/p&gt;

&lt;p&gt;Google doesn't rank territories. It ranks pages. If you want to appear when someone in Nîmes searches for "web agency Nîmes," you need a page specifically about web agency services in Nîmes. A homepage that vaguely covers the south of France won't compete with a smaller competitor who has a dedicated page for that exact query.&lt;/p&gt;

&lt;p&gt;This sounds obvious when written out. In practice, most agencies and local businesses have never done it, because it requires producing a significant amount of content that isn't quite a blog post and isn't quite a service page. It's something in between: pages that are genuinely useful to someone searching from a specific location.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Approach: City × Service = Dedicated Page
&lt;/h3&gt;

&lt;p&gt;For each city the client served and each core service they offered, we built a dedicated page. Each one answered the same basic questions a potential client would have: What exactly is this service? How does it work here? Why choose this agency over a local alternative? What does the process look like?&lt;/p&gt;

&lt;p&gt;The content was not a template with a city name swapped in. &lt;a href="https://developers.google.com/search/docs/essentials" rel="noopener noreferrer"&gt;Google has been explicit&lt;/a&gt; about filtering pages that offer no additional value beyond name substitution. Each page needed to earn its place: a mention of local context, a reference to actual work in that area, or a service angle relevant to businesses in that specific city.&lt;/p&gt;

&lt;p&gt;The internal linking was built intentionally. The homepage linked to a hub page for each major city. Each hub linked to the service-specific pages beneath it. This gives Google a coherent map of the site's geographic and topical coverage, rather than a flat list of unrelated pages.&lt;/p&gt;




&lt;h3&gt;
  
  
  What the Data Looked Like After 90 Days
&lt;/h3&gt;

&lt;p&gt;The domain was under 1 year old, which means Google approached it with standard caution. Indexation doesn't happen overnight.&lt;/p&gt;

&lt;p&gt;But it happened steadily.&lt;/p&gt;

&lt;p&gt;Over 90 days, Google indexed &lt;strong&gt;74 pages&lt;/strong&gt; across the city-and-service structure we built. Total crawl requests reached &lt;strong&gt;1,160&lt;/strong&gt;, with a clear upward trend across the period. The most significant signal came as a spike at the end of the third month: over &lt;strong&gt;120 crawl requests in a single day&lt;/strong&gt;, immediately following an update to the site's internal linking structure. That's Googlebot responding to changes, which is exactly what you want to see.&lt;/p&gt;

&lt;p&gt;Pages indexed when we started: 0.&lt;br&gt;
Pages indexed after 90 days: 74, still growing.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why This Takes Longer Than It Should
&lt;/h3&gt;

&lt;p&gt;The honest answer: Google indexes new pages slowly on domains it doesn't yet fully trust. Three months in, this client still has pages in the crawl queue that haven't been evaluated. The trajectory is positive, but patience is required.&lt;/p&gt;

&lt;p&gt;This is the trade-off versus paid ads, where the same geographic coverage can be activated in an afternoon. SEO is slower to build and slower to maintain. But for this type of business, the long-term economics still favor it. Once a page ranks, the lead it generates costs nothing. Once the ads stop, so do the leads.&lt;/p&gt;

&lt;p&gt;We've seen the same pattern in other sectors. A home services company we worked with went from €1,000 to €10,000 a month over 24 months using the same underlying logic: dedicated service pages, local targeting, zero dependency on referrals or ad spend. The geography problem isn't unique to web agencies. Any local business with a service area has it.&lt;/p&gt;




&lt;h3&gt;
  
  
  Three Takeaways
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Google ranks pages, not territories.&lt;/strong&gt; Saying your business covers a region on your homepage doesn't help you rank in that region. You need a page per location, or close to it. The search engine isn't going to infer coverage from a sentence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The content has to add real value per page.&lt;/strong&gt; Swapping a city name into a template is a shortcut, not a strategy. Google is increasingly effective at identifying pages that exist for SEO reasons rather than user reasons. Each page needs a genuine reason to be there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Internal linking is the multiplier.&lt;/strong&gt; City pages that exist in isolation underperform compared to pages connected to a logical hub structure that Google can navigate. The architecture matters as much as the content on each individual page.&lt;/p&gt;




&lt;h3&gt;
  
  
  Key Facts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;74 pages indexed&lt;/strong&gt; in the first 90 days, starting from zero on a sub-1-year-old domain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1,160 crawl requests&lt;/strong&gt; over that period, with an accelerating trend toward the end&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;26 cities&lt;/strong&gt; targeted across the site structure, versus 1 that Google previously recognized&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 paid ads&lt;/strong&gt; used — all organic, all driven by page structure and internal linking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline:&lt;/strong&gt; results are visible in 3 months but typically stabilize over 6 months&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Does this only work for web agencies?&lt;/strong&gt;&lt;br&gt;
No. Any local service business with a geographic coverage area benefits from this approach: law firms, accountants, tradespeople, clinics, consultants. The model is the same. People search from their location, so your pages need to speak to their location.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many pages do you actually need?&lt;/strong&gt;&lt;br&gt;
It depends on how many cities and services you're targeting. If you serve 10 cities with 5 core services, that's potentially 50 pages to build and maintain. Not all of them will be worth the investment. Prioritize cities where you already have clients or strong local demand, and expand from there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Isn't this just SEO?&lt;/strong&gt;&lt;br&gt;
Yes. But "local SEO" is a term that often gets reduced to optimizing a Google Business Profile. The city-and-service page structure sits above that, and most small businesses and agencies have never implemented it properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long before results appear in Google?&lt;/strong&gt;&lt;br&gt;
On a newer domain, expect 3 to 6 months before meaningful rankings. An established domain with existing authority would move faster. The 74-page indexation above came from a domain under 1 year old.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the risk?&lt;/strong&gt;&lt;br&gt;
The main risk is producing low-quality pages at scale. If the content per page isn't genuinely useful, Google will eventually filter it out. The pages need to earn their place in the index, not just occupy it. Quality over volume is the only version of this that works long term.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Enzo Marcelle is the founder of &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency based in the south of France. We build local service businesses a Google presence that covers every city and service they should be ranking for, not just the one on their homepage. &lt;a href="https://www.celestia-studio.fr/contact" rel="noopener noreferrer"&gt;Free local visibility audit.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>marketing</category>
      <category>startup</category>
    </item>
    <item>
      <title>A Cleaning Company Was Stuck at €1,000/Month. 24 Months Later: €10,000/Month.</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Sat, 27 Jun 2026 14:01:05 +0000</pubDate>
      <link>https://dev.to/celestia_studio/a-cleaning-company-was-stuck-at-eu1000month-24-months-later-eu10000month-32e3</link>
      <guid>https://dev.to/celestia_studio/a-cleaning-company-was-stuck-at-eu1000month-24-months-later-eu10000month-32e3</guid>
      <description>&lt;p&gt;A cleaning company in the south of France contacted us with no website, no Google Business Profile, and exactly one source of clients: word of mouth.&lt;/p&gt;

&lt;p&gt;Their monthly revenue: about €1,000.&lt;/p&gt;

&lt;p&gt;Twenty-four months later, that number is €10,000. Same owner, same services, same local market. The only thing that changed is that people who are already searching for what they sell can now find them.&lt;/p&gt;

&lt;p&gt;Here's exactly what we did, in order, with nothing left out.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Starting Point
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Multi Services Nettoyage is a home services company based in Agde, France, offering cleaning for short-term rental properties (Airbnb-style turnover cleaning), pool maintenance, garden upkeep, and office cleaning. When they reached out, they had zero online presence and depended entirely on personal referrals. Monthly revenue: roughly €1,000.&lt;/p&gt;

&lt;p&gt;The demand for these services wasn't the problem. Short-term rental cleaning, in particular, is a growing market as Airbnb-style properties multiply along the coast. The problem was visibility. The business was invisible to anyone who didn't already know the owner personally.&lt;/p&gt;

&lt;p&gt;The goal was simple to state and hard to execute: build a digital presence that generates clients on its own, predictably, in a local market where roughly 80% of these searches happen on Google.&lt;/p&gt;




&lt;h3&gt;
  
  
  What We Actually Built
&lt;/h3&gt;

&lt;p&gt;We didn't start with design. We started with research: what do people in and around Agde actually type into Google when they need this kind of service? "Pool cleaning Agde." "Airbnb cleaning service Agde." Real queries, not assumptions.&lt;/p&gt;

&lt;p&gt;From there, we built the site with one dedicated page per service, each with titles and meta descriptions optimized for those exact queries, plus a fully completed Google Business Profile.&lt;/p&gt;

&lt;p&gt;In parallel, we launched geo-targeted Google Ads campaigns. This combination is deliberate: SEO builds durable, free visibility over time but takes weeks to ramp up. Ads generate leads immediately while SEO catches up. We also used local print flyers, a reminder that digital visibility doesn't exclude traditional channels when they fit the sector and the geography.&lt;/p&gt;




&lt;h3&gt;
  
  
  Three Phases Over 24 Months
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 Building the site.&lt;/strong&gt; Design, development, conversion-focused copywriting. Someone searching "pool cleaning Agde" lands on a page about pool cleaning, not a generic homepage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 SEO rollout.&lt;/strong&gt; On-page optimization for every page, content built around the local queries we'd identified, internal linking between service pages, local citations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 Google Ads management.&lt;/strong&gt; Campaign setup, ad A/B testing, monthly bid and geo-targeting optimization, ongoing.&lt;/p&gt;

&lt;p&gt;Performance was reviewed regularly throughout, and the strategy was adjusted month by month rather than locked in from day one.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Numbers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;€1,000/month&lt;/strong&gt; starting revenue, 100% word-of-mouth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;€10,000/month&lt;/strong&gt; revenue after 24 months&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;+900%&lt;/strong&gt; growth in monthly revenue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24 months&lt;/strong&gt; total duration of the engagement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 channels combined&lt;/strong&gt; optimized website, local SEO by service page, geo-targeted Google Ads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No inflated claims, no cherry-picked week. This is the trajectory over two full years.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Word of Mouth Has a Ceiling
&lt;/h3&gt;

&lt;p&gt;Word of mouth has a structural limit: it can't grow faster than the owner's personal network. Once that network is saturated, revenue plateaus. That's exactly where this business was before we started.&lt;/p&gt;

&lt;p&gt;Google works differently. It captures demand that already exists and is actively looking for a solution. Someone typing "Airbnb cleaning Agde" has an immediate need, not idle curiosity. Showing up on that search turns existing demand into a client, without depending on who happens to know whom. That shift, from a closed network to an open one, is the entire explanation for the jump from €1,000 to €10,000.&lt;/p&gt;




&lt;h3&gt;
  
  
  This Isn't Specific to Cleaning Companies
&lt;/h3&gt;

&lt;p&gt;We've worked with dozens of small French businesses since 2021, and the pattern repeats: the market potential is already there, only the visibility is missing.&lt;/p&gt;

&lt;p&gt;The three levers used here, a conversion-focused website, service-based local SEO, and Google Ads to bridge the SEO ramp-up time, apply to any local business currently dependent on word of mouth: tradespeople, independent professionals, neighborhood shops.&lt;/p&gt;




&lt;h3&gt;
  
  
  Three Takeaways
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Visibility comes before growth, not the other way around.&lt;/strong&gt; This business didn't need to lower prices or expand its offer to multiply revenue by 10. It needed to be found by the clients already looking for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. SEO and paid ads complement each other.&lt;/strong&gt; Ads generated leads while SEO ramped up. Without that combination, the business would have waited months before seeing any result at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. This was built over 24 months, not 24 days.&lt;/strong&gt; This isn't a promise of instant results. It's a gradual, durable build that still produces clients today, with zero dependency on word of mouth.&lt;/p&gt;




&lt;h3&gt;
  
  
  Key Facts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;€1,000 → €10,000&lt;/strong&gt;: monthly revenue change over 24 months&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;+900%&lt;/strong&gt;: total growth in monthly revenue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24 months&lt;/strong&gt;: full duration of the engagement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0% → 100%&lt;/strong&gt;: shift from total word-of-mouth dependency to a Google-driven client pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 combined levers&lt;/strong&gt;: optimized website, service-page local SEO, geo-targeted Google Ads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sector&lt;/strong&gt;: home cleaning services (short-term rental turnover, pools, gardens, offices), local market in Agde, France&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;How did this business 10x its monthly revenue?&lt;/strong&gt;&lt;br&gt;
Three combined levers over 24 months: a website with one optimized page per service, local SEO built around real local search queries, and geo-targeted Google Ads to generate leads while SEO ramped up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long did this take?&lt;/strong&gt;&lt;br&gt;
24 months, across three phases: site build, SEO rollout, then ongoing Google Ads management with monthly adjustments. This was not an overnight result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this only work for cleaning companies?&lt;/strong&gt;&lt;br&gt;
No. The same three levers apply to any local business relying mainly on word of mouth tradespeople, independent professionals, local shops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why combine SEO and paid ads instead of picking one?&lt;/strong&gt;&lt;br&gt;
They solve different timelines. SEO takes weeks to months to build but is durable and free once in place. Ads generate leads immediately but stop the moment you stop paying. Combining both removes the main blind spot of using either alone.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Enzo Marcelle is the founder of &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency based in Agde, France. We build local businesses a digital presence that compounds over time instead of one that disappears the moment you stop paying for it. &lt;a href="https://www.celestia-studio.fr/contact" rel="noopener noreferrer"&gt;Get in touch for a free local visibility assessment.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>marketing</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>My client was invisible on Google and AI search. 6 weeks later: page 1, +40 new clients, $0 in ads. Here's exactly what we did.</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Fri, 12 Jun 2026 20:22:33 +0000</pubDate>
      <link>https://dev.to/celestia_studio/my-client-was-invisible-on-google-and-ai-search-6-weeks-later-page-1-40-new-clients-0-in-ads-1dml</link>
      <guid>https://dev.to/celestia_studio/my-client-was-invisible-on-google-and-ai-search-6-weeks-later-page-1-40-new-clients-0-in-ads-1dml</guid>
      <description>&lt;p&gt;A local business owner came to us 3 months ago. Entertainment agency, been around for 10 years, solid reputation locally.&lt;/p&gt;

&lt;p&gt;Problem: zero online visibility. Anyone searching for their services in their city — on Google or on ChatGPT found their competitors instead.&lt;/p&gt;

&lt;p&gt;Their site existed. It just wasn't structured for how people search in 2026.&lt;/p&gt;

&lt;p&gt;Here's the full strategy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. We rebuilt the site on a faster platform&lt;/strong&gt;&lt;br&gt;
Their old CMS was slow, bloated with plugins, and Google was penalizing them for it. We moved to something leaner. Core Web Vitals went from red to green across the board. Speed alone moved the needle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Schema markup&lt;/strong&gt;&lt;br&gt;
Added the right structured data for their business type. This is how Google AND AI tools like ChatGPT, Perplexity and Google AI Overviews understand what you do, where you are, and who you serve. Most businesses have zero schema. It's free to implement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. FAQPage structure&lt;/strong&gt;&lt;br&gt;
We identified the 5 questions their potential clients were actually typing online. Turned them into a proper FAQ with schema. ChatGPT now pulls directly from this when someone asks for recommendations in their niche.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. A "Quick Answer block"&lt;/strong&gt;&lt;br&gt;
A short 50-word paragraph at the top of each page that directly answers the main search query. No fluff. Just the answer. AI tools extract this verbatim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Content depth&lt;/strong&gt;&lt;br&gt;
We created dedicated pages for each service and location they operate in. Not thin pages real, structured content answering what their clients actually search for. Each page targets a specific intent. This alone multiplied their indexed surface area.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. A blog strategy built around their clients' real questions&lt;/strong&gt;&lt;br&gt;
Not generic "tips" content. Articles targeting exact queries with commercial intent. Each article internally linked back to the core service pages. Google rewards this structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Local SEO foundation&lt;/strong&gt;&lt;br&gt;
Proper title tags, meta descriptions with city names, Google Business Profile fully optimized and linked to the new site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. AI visibility layer&lt;/strong&gt;&lt;br&gt;
On top of traditional SEO, we added a layer specifically designed for AI search engines. The site now tells ChatGPT, Perplexity and Google AI Overviews exactly who they are, what they do, and who they serve in a format these tools can extract and cite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results after 6 weeks:&lt;/strong&gt;&lt;br&gt;
→ Page 1 Google for their main keyword&lt;br&gt;
→ Appearing in ChatGPT recommendations for their city&lt;br&gt;
→ +40 new client inquiries&lt;br&gt;
→ $0 spent on ads&lt;/p&gt;

&lt;p&gt;The window is still open. Most local businesses haven't touched any of this.&lt;/p&gt;

&lt;p&gt;Happy to answer questions what's your current biggest visibility challenge?&lt;/p&gt;

&lt;p&gt;Enzo Marcelle — Founder of &lt;a href="https://www.celestia-studio.fr/" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, Webflow agency specialized in GEO and AI citation optimization.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>seo</category>
      <category>webflow</category>
    </item>
    <item>
      <title>How to Build SEO + GEO-Optimized Niche Service Pages with Webflow CMS in 2026</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Thu, 11 Jun 2026 21:51:59 +0000</pubDate>
      <link>https://dev.to/celestia_studio/how-to-build-seo-geo-optimized-niche-service-pages-with-webflow-cms-in-2026-1ab5</link>
      <guid>https://dev.to/celestia_studio/how-to-build-seo-geo-optimized-niche-service-pages-with-webflow-cms-in-2026-1ab5</guid>
      <description>&lt;h2&gt;
  
  
  ARTICLE
&lt;/h2&gt;

&lt;p&gt;If you build websites for professional services — lawyers, physios, restaurants, accountants — here's a system that's quietly working very well in 2026.&lt;/p&gt;

&lt;p&gt;The idea: one CMS collection, one template, unlimited hyper-targeted service pages. Each page ranks for its own niche keyword and gets cited by AI engines.&lt;/p&gt;

&lt;p&gt;Here's the full technical setup.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Problem With Generic Service Pages
&lt;/h3&gt;

&lt;p&gt;Most agency websites have one &lt;code&gt;/services/seo&lt;/code&gt; or &lt;code&gt;/services/web-design&lt;/code&gt; page.&lt;/p&gt;

&lt;p&gt;That page tries to rank for every industry at once. It ends up ranking for none.&lt;/p&gt;

&lt;p&gt;The solution: &lt;strong&gt;one page per vertical&lt;/strong&gt;. &lt;code&gt;site-web-avocat&lt;/code&gt; for lawyers. &lt;code&gt;site-web-kinesitherapeute&lt;/code&gt; for physios. &lt;code&gt;agence-web-paris&lt;/code&gt; for location-based queries.&lt;/p&gt;

&lt;p&gt;Each page is a dedicated landing page with industry-specific content, stats, pricing, and FAQs. Each ranks independently.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Webflow CMS Setup
&lt;/h3&gt;

&lt;p&gt;Create a new CMS collection with these fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name           → Plain Text   → H1 title
slug           → Plain Text   → URL (/services/site-web-avocat)
seo-title      → Plain Text   → Meta title (max 60 chars)
seo-meta-desc  → Plain Text   → Meta description (max 160 chars)
tagline        → Plain Text   → Subtitle under H1
body           → Rich Text    → Full page content (HTML)
faq-q1–faq-q5  → Plain Text   → FAQ questions
faq-a1–faq-a5  → Plain Text   → FAQ answers (plain text — no HTML)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Keep FAQ answers as Plain Text, not Rich Text. This makes them directly usable in JSON-LD structured data without stripping HTML.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Body Structure (Order Matters for SEO + GEO)
&lt;/h3&gt;

&lt;p&gt;Every niche page follows this exact structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1.  Quick Answer &amp;lt;p&amp;gt;        — keyword in first 10 words, 40–60 words, no links
2.  Social Banner            — internal CTA component
3.  Intro                    — industry stat + pain point (max 2 sentences/paragraph)
4.  H2 "What is X?" (definition) — starts with "X is..." pattern for AI citation
5.  H2 "Top 5 agencies for X" — comparison table (you're #1, dark background)
6.  H2 "Why [Agency] for X?" — bulleted differentiators
7.  H2 "How to build X?"    — numbered steps
8.  H2 "How much does X cost?" — pricing table with overflow wrapper
9.  H3 E-E-A-T block        — real client case, named, with measured results
10. H2 "How to appear in ChatGPT as X?" — GEO section
11. H2 "Key Facts 2026"     — 5–7 standalone bullets (AI-citable)
12. CTA close               — WhatsApp + contact link
13. Author block             — photo + bio
14. Social Banner bottom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three rules that affect AI citation performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quick Answer must have no links&lt;/strong&gt; — AI engines extract clean text blocks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"X is..."&lt;/strong&gt; on the first H2 — every major AI citation study shows definitions get pulled first&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Facts bullets&lt;/strong&gt; — each must be a complete standalone sentence, not a fragment&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Fix the One Webflow Rich Text Issue That Will Break Your Pages
&lt;/h3&gt;

&lt;p&gt;When you render CMS content in a Webflow Rich Text block, headings inherit the site's global styles — which are almost always too large for body content.&lt;/p&gt;

&lt;p&gt;Your H2s end up enormous. Your H3s look like H1s. It breaks the visual hierarchy and tanks your readability score.&lt;/p&gt;

&lt;p&gt;The fix: add this to your CMS template's &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; Custom Code. &lt;strong&gt;Use &lt;code&gt;.w-richtext&lt;/code&gt; as the selector&lt;/strong&gt; — not a custom class — because Webflow always applies this class to Rich Text elements regardless of what else is on the element.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.3&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.75&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;ol&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-collapse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;collapse&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;td&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.w-richtext&lt;/span&gt; &lt;span class="nt"&gt;th&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#e0e0e0&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;left&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common mistake: using &lt;code&gt;.rich-text-block.w-richtext h2&lt;/code&gt; — this only works if your element has both classes. The safe selector is always &lt;code&gt;.w-richtext&lt;/code&gt; alone.&lt;/p&gt;

&lt;p&gt;Also: any &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; you inject via the API will overflow on mobile. Wrap it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"overflow-x:auto;-webkit-overflow-scrolling:touch;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"min-width:600px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- your table content --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This one wrapper saves you from every mobile layout complaint.&lt;/p&gt;




&lt;h3&gt;
  
  
  The JSON-LD Schema (3 Types in One Block)
&lt;/h3&gt;

&lt;p&gt;This is the part most agencies skip. It's also the part that drives AI citation.&lt;/p&gt;

&lt;p&gt;Place this in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; Custom Code of the CMS template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@graph"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WebPage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;seo-title&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;seo-meta-description&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;URL&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"datePublished"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;created-on&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Date&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dateModified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;updated-on&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Date&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;seo-meta-description&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"serviceType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Web Design &amp;amp; Development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Agency"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FAQPage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"mainEntity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Question"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;faq-q1&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"acceptedAnswer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Answer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;faq-a1&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;repeat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;faq-q&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;faq-q&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BreadcrumbList"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"itemListElement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ListItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Home"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://youragency.com"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ListItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Services"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://youragency.com/services"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ListItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;seo-title&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;PlainText&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{wf {&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;URL&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;} }}"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;{{wf ...}}&lt;/code&gt; syntax is Webflow's variable binding — it dynamically injects the CMS field values at render time.&lt;/p&gt;

&lt;p&gt;Why this combination matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;WebPage&lt;/code&gt; → tells Google what this page is about&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Service&lt;/code&gt; → tells AI engines what service is being offered and by whom&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FAQPage&lt;/code&gt; → the single highest-impact schema for AI citation (ChatGPT pulls FAQ answers verbatim)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;BreadcrumbList&lt;/code&gt; → improves click-through rate in Google search results&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The Publishing Flow (Via API)
&lt;/h3&gt;

&lt;p&gt;Once a page is written, it gets pushed via the Webflow API v2:&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="c1"&gt;// 1. Create the item&lt;/span&gt;
&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;collections&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;collectionId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/item&lt;/span&gt;&lt;span class="err"&gt;s
&lt;/span&gt;
&lt;span class="c1"&gt;// 2. Set isDraft: false (separate call for custom collections)&lt;/span&gt;
&lt;span class="nx"&gt;PATCH&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;collections&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;collectionId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/items/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;itemId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;isDraft&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 3. Publish the item&lt;/span&gt;
&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;collections&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;collectionId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/items/&lt;/span&gt;&lt;span class="nx"&gt;publish&lt;/span&gt;
&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;itemIds&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;itemId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 4. Publish the site&lt;/span&gt;
&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sites&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;siteId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/publis&lt;/span&gt;&lt;span class="err"&gt;h
&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;publishToWebflowSubdomain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: For custom CMS collections (not the built-in Blog collection), &lt;code&gt;_draft: false&lt;/code&gt; inside &lt;code&gt;fieldData&lt;/code&gt; doesn't work. You need a separate PATCH with &lt;code&gt;{"isDraft": false}&lt;/code&gt; at the root level.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  SEO Rules Before Publishing
&lt;/h3&gt;

&lt;p&gt;Two hard limits, no exceptions:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Site web pour avocats | Celestia Studio&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 42 chars ✅&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;desc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Create your law firm website: Webflow, CNB-compliant, ...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// max 160 chars&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TOO LONG&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;160&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TOO LONG&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And for the body content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sentences: max 20 words (split longer ones)&lt;/li&gt;
&lt;li&gt;Paragraphs: max 2 sentences per &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag&lt;/li&gt;
&lt;li&gt;Stats: min 5 bolded numbers with % or € in the body&lt;/li&gt;
&lt;li&gt;H2s: min 4 phrased as questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't style preferences. They directly affect the SEO tool scores that measure readability and keyword distribution.&lt;/p&gt;




&lt;h3&gt;
  
  
  Result After First Page Live
&lt;/h3&gt;

&lt;p&gt;First page (&lt;code&gt;site-web-avocat&lt;/code&gt;) published with this system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;7 H2 total, 6 phrased as questions ✅&lt;/li&gt;
&lt;li&gt;7 bolded stats with % or € ✅
&lt;/li&gt;
&lt;li&gt;Keyword in first 10 words of Quick Answer ✅&lt;/li&gt;
&lt;li&gt;Full &lt;code&gt;WebPage + Service + FAQPage + BreadcrumbList&lt;/code&gt; schema ✅&lt;/li&gt;
&lt;li&gt;Author block + social banners ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next up: kinésithérapeutes, restaurants, coachs, artisans, and major French cities.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Compounding Effect
&lt;/h3&gt;

&lt;p&gt;This is why the system works at scale:&lt;/p&gt;

&lt;p&gt;Each page targets a keyword that a generic service page can't rank for. Each page has its own schema, its own FAQ, its own AI citation surface. Each new page adds to the internal link network.&lt;/p&gt;

&lt;p&gt;At 50 pages, every major French professional service vertical is covered. At 100 pages, geographic coverage begins. At 200+ pages, the compounding effect starts to show in GSC — consistent impressions across hundreds of long-tail queries, each with low competition.&lt;/p&gt;

&lt;p&gt;The investment per page: ~2–3 hours of content writing + 30 minutes of technical setup. The return: a permanent, crawlable, AI-citable entry point for that vertical.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Webflow CMS, Node.js for API calls, and Schema.org for structured data. All pages pushed programmatically — zero manual CMS editing after initial template setup.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Enzo Marcelle — &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt; — Webflow + SEO + GEO for professional services, France.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webflow</category>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to make your Webflow agency appear in ChatGPT results (GEO strategy, 2026)</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Thu, 11 Jun 2026 21:43:07 +0000</pubDate>
      <link>https://dev.to/celestia_studio/how-to-make-your-webflow-agency-appear-in-chatgpt-results-geo-strategy-2026-3nb8</link>
      <guid>https://dev.to/celestia_studio/how-to-make-your-webflow-agency-appear-in-chatgpt-results-geo-strategy-2026-3nb8</guid>
      <description>&lt;p&gt;In 2026, prospects searching for a Webflow agency don't always start on Google.&lt;/p&gt;

&lt;p&gt;They open ChatGPT and ask: &lt;em&gt;"what's the best Webflow agency in France?"&lt;/em&gt;. They get a list — with names, specialties, price ranges. If your agency isn't on that list, you don't exist for that prospect.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;GEO (Generative Engine Optimisation)&lt;/strong&gt; — the practice of making content citable by AI models. And it's already changing how agencies win clients.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI models cite some agencies and not others
&lt;/h2&gt;

&lt;p&gt;LLMs don't rank pages. They cite sources. The content they cite tends to share specific characteristics:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Factual structure&lt;/strong&gt;: numbers, prices, timelines, concrete case studies. A page saying "we are Webflow experts" will never be cited. A page saying "our Webflow CMS projects deliver in 6–10 weeks at €4,000–€12,000" has a real chance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External coherence&lt;/strong&gt;: the same information appearing across multiple platforms (blog + Quora + Medium + dev.to) signals credibility to LLMs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No ambiguity&lt;/strong&gt;: conflicting information across platforms = the model avoids citing you entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built and what happened
&lt;/h2&gt;

&lt;p&gt;I applied this framework to a comparison article: &lt;em&gt;Top 7 Webflow agencies in France — 2026&lt;/em&gt;. Each entry includes real data — specialty, price range, project type, ideal client.&lt;/p&gt;

&lt;p&gt;The article appeared in Perplexity results for "agence Webflow France" &lt;strong&gt;within 72 hours of publication&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Traditional SEO would take 3–6 months to rank for that query. GEO produced AI citations in 3 days.&lt;/p&gt;




&lt;h2&gt;
  
  
  The content structure that works
&lt;/h2&gt;

&lt;p&gt;The article uses a structure optimised for AI ingestion:&lt;/p&gt;

&lt;p&gt;H1 — Primary keyword + year&lt;br&gt;
Quick Answer block — 2-3 sentences, direct answer, numbers included&lt;br&gt;
H2 sections — one clear question per section&lt;br&gt;
Data tables — structured comparison data (agency, budget, specialty)&lt;br&gt;
FAQ block — 8-10 questions with direct answers&lt;br&gt;
Sources — 3 external citations for credibility signals&lt;br&gt;
Schema FAQPage JSON-LD — in page head&lt;/p&gt;

&lt;p&gt;This structure answers the exact format LLMs expect when generating a cited response.&lt;/p&gt;




&lt;h2&gt;
  
  
  The distribution layer
&lt;/h2&gt;

&lt;p&gt;The article alone isn't enough. GEO requires external signal reinforcement:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Quora&lt;/strong&gt; — answer the exact question your article answers, link back to it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium&lt;/strong&gt; — publish a related article citing your data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dev.to&lt;/strong&gt; — technical angle for developer audiences (this post)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn&lt;/strong&gt; — distribute to professional network, link in first comment&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each platform that references your data adds a credibility node. LLMs pick up on citation networks, not just individual pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  For Webflow developers and agency owners
&lt;/h2&gt;

&lt;p&gt;If you're building or running a Webflow agency, the window to establish GEO authority is still open — but narrowing. The agencies that publish structured, data-rich content now will be the ones cited by default as AI search matures.&lt;/p&gt;

&lt;p&gt;Full comparison article — 7 best Webflow agencies in France: &lt;strong&gt;celestia-studio.fr/blog/meilleures-agences-webflow-france-2026&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Full GEO guide — what it is and how to implement it: &lt;strong&gt;celestia-studio.fr/blog/geo-referencement-ia-2026&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webflow</category>
      <category>seo</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to make your website appear in ChatGPT answers (GEO guide 2026)</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Tue, 09 Jun 2026 21:59:17 +0000</pubDate>
      <link>https://dev.to/celestia_studio/how-to-make-your-website-appear-in-chatgpt-answers-geo-guide-2026-2jdp</link>
      <guid>https://dev.to/celestia_studio/how-to-make-your-website-appear-in-chatgpt-answers-geo-guide-2026-2jdp</guid>
      <description>&lt;p&gt;Most websites are invisible to AI engines like ChatGPT, Perplexity, and Google AI Overviews.&lt;/p&gt;

&lt;p&gt;Not because of bad SEO because of bad *&lt;em&gt;GEO *&lt;/em&gt;(Generative Engine Optimization).&lt;/p&gt;

&lt;p&gt;Here's the technical checklist I use to fix that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AI engines actually look for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unlike Google (backlinks + keywords), LLMs select sources based on:&lt;/p&gt;

&lt;p&gt;Extractable content blocks (definitions, lists, tables)&lt;br&gt;
Verifiable author signals (E-E-A-T)&lt;br&gt;
Thematic domain consistency&lt;br&gt;
Structured data (Schema.org)&lt;/p&gt;

&lt;p&gt;**The technical checklist&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add llms.txt to your root**
# llms.txt
&amp;gt; [Your site name] — [one-line description]&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Priority content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[/blog/your-best-article]: Article title&lt;/li&gt;
&lt;li&gt;[/services/your-service]: Service description&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Author
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enzo Marcelle: Webflow &amp;amp; GEO specialist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Structured data — FAQ schema&lt;/strong&gt;&lt;br&gt;
{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "@type": "FAQPage",&lt;br&gt;
  "mainEntity": [{&lt;br&gt;
    "@type": "Question",&lt;br&gt;
    "name": "What is GEO?",&lt;br&gt;
    "acceptedAnswer": {&lt;br&gt;
      "@type": "Answer",&lt;br&gt;
      "text": "GEO (Generative Engine Optimization) is..."&lt;br&gt;
    }&lt;br&gt;
  }]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Content structure that LLMs extract&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What is X?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;X is&lt;/strong&gt; [direct definition in one sentence].&lt;br&gt;
[2-3 sentences of context]&lt;/p&gt;

&lt;p&gt;Key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Term 1&lt;/strong&gt;: explanation (self-contained)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Term 2&lt;/strong&gt;: explanation (self-contained)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Author markup&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Applied this for a client → position 1 Google in 5 days, 3 featured snippets, 0 backlinks.&lt;/p&gt;

&lt;p&gt;Full guide (FR) → &lt;a href="https://www.celestia-studio.fr/blog/geo-referencement-ia-2026" rel="noopener noreferrer"&gt;celestia-studio.fr/blog/geo-referencement-ia-2026&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webflow</category>
      <category>ai</category>
      <category>seo</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I've Fixed 30+ Invisible Websites. The Same 3 Problems Keep Showing Up.</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Sun, 07 Jun 2026 22:15:35 +0000</pubDate>
      <link>https://dev.to/celestia_studio/ive-fixed-30-invisible-websites-the-same-3-problems-keep-showing-up-1fob</link>
      <guid>https://dev.to/celestia_studio/ive-fixed-30-invisible-websites-the-same-3-problems-keep-showing-up-1fob</guid>
      <description>&lt;p&gt;90% of web pages receive zero organic traffic from Google. Not "very little." Zero.&lt;/p&gt;

&lt;p&gt;If your website is live but nobody is finding it, you are statistically in the majority. And the fix is almost always simpler than you think.&lt;/p&gt;

&lt;p&gt;I run &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency based in the south of France. Since 2021, I've audited and rebuilt websites for small businesses across France. The same problems show up every time. Here are the three that account for roughly 80% of cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 1: Your site is telling Google to stay out
&lt;/h2&gt;

&lt;p&gt;This one sounds impossible but happens constantly.&lt;/p&gt;

&lt;p&gt;During website construction, most platforms activate a "noindex" setting to prevent Google from crawling an unfinished site. The site goes live. The setting never gets turned off. Google respects the instruction and ignores the site entirely.&lt;/p&gt;

&lt;p&gt;The fix takes 10 minutes. But some sites run this way for months without the owner knowing.&lt;/p&gt;

&lt;p&gt;Check it now: type &lt;code&gt;site:yourdomain.com&lt;/code&gt; in Google. If the result shows zero pages, your site is not in Google's index at all. Then open Google Search Console, go to URL Inspection, and check whether your main pages are indexed.&lt;/p&gt;

&lt;p&gt;In over 60% of the invisible sites I've audited, this was the cause.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 2: The content is too thin
&lt;/h2&gt;

&lt;p&gt;Google decides whether a page deserves to rank based on how well it answers a real question. A service page with 150 words and a contact button answers nothing.&lt;/p&gt;

&lt;p&gt;Thin content is not penalised in a dramatic way. It is simply ignored. Google crawls the page, finds nothing useful, and moves on. The page stays invisible.&lt;/p&gt;

&lt;p&gt;The threshold for a page that Google takes seriously is around &lt;strong&gt;600 words&lt;/strong&gt; with a clear structure: one question answered per section, concrete data, and a logical internal link to related pages. Without this, the page exists but competes with nothing and ranks for nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 3: The domain is too new
&lt;/h2&gt;

&lt;p&gt;New domains go through what is known as the Google sandbox period. For roughly &lt;strong&gt;3 to 6 months&lt;/strong&gt; after launch, Google is cautious about ranking a new domain on competitive terms, regardless of content quality.&lt;/p&gt;

&lt;p&gt;This is not a punishment. It is how the algorithm manages trust. A domain with no history and no external links is an unknown quantity.&lt;/p&gt;

&lt;p&gt;What actually helps during this period: submitting your sitemap to Google Search Console on day one, publishing at minimum one article per week, and getting a single external link from a trusted source.&lt;/p&gt;

&lt;h2&gt;
  
  
  The layer most people miss in 2026
&lt;/h2&gt;

&lt;p&gt;Even if your site is indexed and ranking on page one, there is a second visibility problem that did not exist two years ago.&lt;/p&gt;

&lt;p&gt;Google AI Overviews now appear on &lt;strong&gt;48% of searches&lt;/strong&gt;. These AI-generated summaries sit above the traditional blue links. A site that ranks position one but is not cited in the AI Overview loses up to &lt;strong&gt;61% of its usual click-through rate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The rules for appearing in AI answers are different from classic SEO. Structured data, Schema.org markup, content written in extractable blocks, and an llms.txt file at the root of your domain all signal to AI systems that your content is citable.&lt;/p&gt;

&lt;p&gt;Most sites optimise for Google's ranking algorithm. Almost none optimise for AI citation simultaneously. That gap is where organic visibility is being lost right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fastest diagnostic you can do
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Type &lt;code&gt;site:yourdomain.com&lt;/code&gt; in Google. Count the results.&lt;/li&gt;
&lt;li&gt;Open Google Search Console. Check the Coverage section for indexed vs submitted pages.&lt;/li&gt;
&lt;li&gt;Ask ChatGPT to recommend a service like yours in your city. See if your business appears.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These three steps take under five minutes and tell you exactly where the problem is.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Enzo Marcelle is the founder of &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency specialising in SEO and GEO for French businesses. Based in Agde, France.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>beginners</category>
      <category>google</category>
    </item>
    <item>
      <title>Vibe Coding Won't Replace Web Agencies. But It Will Replace Lazy Ones.</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Sat, 06 Jun 2026 20:46:40 +0000</pubDate>
      <link>https://dev.to/celestia_studio/vibe-coding-wont-replace-web-agencies-but-it-will-replace-lazy-ones-1lfd</link>
      <guid>https://dev.to/celestia_studio/vibe-coding-wont-replace-web-agencies-but-it-will-replace-lazy-ones-1lfd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally published on Medium — celestia-studio.fr&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've rebuilt 4 AI-generated websites from scratch. Here's exactly what broke.&lt;/p&gt;

&lt;p&gt;In February 2025, Andrej Karpathy, OpenAI co-founder, posted on X: "There's no coding, only vibes."&lt;/p&gt;

&lt;p&gt;Vibe coding was born. Since then, thousands of entrepreneurs have tested tools like Bolt.new, Framer AI, or Durable to build their website in under 30 minutes, no developer needed.&lt;/p&gt;

&lt;p&gt;The visual results? Often impressive. The business results? Usually terrible.&lt;/p&gt;

&lt;p&gt;I run &lt;a href="https://www.celestia-studio.fr/" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency based in the south of France. In the last 6 months, 4 clients came to us after trying AI website builders. Every single one had the same problems. Here's what I found.&lt;/p&gt;

&lt;h2&gt;
  
  
  What vibe coding actually does well
&lt;/h2&gt;

&lt;p&gt;Let's be honest. These tools are genuinely useful in specific situations.&lt;/p&gt;

&lt;p&gt;Validating an idea fast is the obvious one. Durable.co generated over &lt;strong&gt;1 million websites&lt;/strong&gt; since its 2023 launch. That's real demand for speed. Temporary landing pages work too: product launches, webinar sign-ups, event pages where SEO doesn't matter and the page disappears in two weeks. Same for personal portfolios with no conversion goals, or internal prototypes you're showing to investors before committing to a full build.&lt;/p&gt;

&lt;p&gt;For these use cases, vibe coding is a legitimate tool and a real time-saver.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it consistently fails at
&lt;/h2&gt;

&lt;p&gt;Here's where every AI-built site I've reviewed breaks down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEO structure&lt;/strong&gt;. AI builders generate pages that look professional but are structurally broken for search engines. On 10 AI-built sites reviewed by SEO experts in 2025, &lt;strong&gt;9 had critical structural errors&lt;/strong&gt; preventing proper indexing. The pattern is always the same: multiple H1 tags on a single page, generic or duplicated meta descriptions, no alt text on images, zero internal linking, non-optimised URLs. Google sees none of what actually matters.&lt;/p&gt;

&lt;p&gt;Core Web Vitals. Google has included performance in its ranking algorithm since 2021. AI-built sites consistently score &lt;strong&gt;45 to 65 out of 100&lt;/strong&gt; on Lighthouse. A properly optimised Webflow site scores &lt;strong&gt;85 to 95&lt;/strong&gt;. A site that loads in more than 3 seconds loses &lt;strong&gt;32% of visitors&lt;/strong&gt; before they read a single line of content (Google, 2024).&lt;/p&gt;

&lt;p&gt;Conversion. The average conversion rate of a professionally optimised website sits between 2 and 5%. The average for an unoptimised AI site is &lt;strong&gt;under 1%&lt;/strong&gt;. On 1,000 monthly visitors, that's the difference between 10 and 50 leads. Forty potential clients lost every month. AI tools place buttons. A conversion expert places arguments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GEO, the layer nobody talks about&lt;/strong&gt;. This is the one costing businesses the most in 2026. &lt;a href="https://www.celestia-studio.fr/blog/geo-referencement-ia-2026" rel="noopener noreferrer"&gt;GEO (Generative Engine Optimization)&lt;/a&gt; is the practice of structuring your content so AI systems like ChatGPT, Perplexity, and Google AI Overviews can extract and cite your business in their answers. It requires Schema.org markup, structured data, and content formatted for extraction. AI website builders don't implement any of this. Sites without proper Schema.org have &lt;strong&gt;40% less chance&lt;/strong&gt; of appearing in generative AI answers (Princeton / Georgia Tech, 2023). For any local business trying to get recommended by AI in 2026, that's a structural disadvantage baked in from day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened with my 4 clients
&lt;/h2&gt;

&lt;p&gt;Each one came to us after 3 to 6 months online with an AI-built site. Zero Google indexation. No Schema.org. Lighthouse under 60. No leads.&lt;/p&gt;

&lt;p&gt;We rebuilt each site on &lt;a href="https://www.celestia-studio.fr/blog/creation-site-web-webflow-guide-complet" rel="noopener noreferrer"&gt;Webflow&lt;/a&gt;, kept the visual direction they liked, and added the strategic layer that was missing: SEO architecture, Schema.org, GEO optimisation, conversion structure.&lt;/p&gt;

&lt;p&gt;One of them went from &lt;strong&gt;0 to 3 Google Featured Snippets in 2 weeks&lt;/strong&gt; on a 3-month-old domain, with zero backlinks. The content was just structured correctly from the start&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest answer: AI or agency?
&lt;/h2&gt;

&lt;p&gt;Ask yourself one question: does my website need to generate revenue?&lt;/p&gt;

&lt;p&gt;If yes, you need a strategy, not just a visual. An AI tool builds the shape. An agency builds the engine.&lt;/p&gt;

&lt;p&gt;If your site is a test, a placeholder, or a personal portfolio with no commercial stakes, vibe coding is fine. Genuinely.&lt;/p&gt;

&lt;p&gt;But if 40 lost leads per month is a number that matters to your business, the maths on a professionally built site are straightforward.&lt;/p&gt;

&lt;p&gt;Enzo Marcelle is the founder of &lt;a href="https://www.celestia-studio.fr/" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, a Webflow agency specialising in SEO and GEO optimisation. Based in Agde, France&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>ai</category>
      <category>webflow</category>
    </item>
    <item>
      <title>How I Got 3 Google Featured Snippets in 2 Weeks With Zero Backlinks (On a 3-Month-Old Domain)</title>
      <dc:creator>Celestia Studio</dc:creator>
      <pubDate>Fri, 05 Jun 2026 20:29:56 +0000</pubDate>
      <link>https://dev.to/celestia_studio/how-i-got-3-google-featured-snippets-in-2-weeks-with-zero-backlinks-on-a-3-month-old-domain-3hep</link>
      <guid>https://dev.to/celestia_studio/how-i-got-3-google-featured-snippets-in-2-weeks-with-zero-backlinks-on-a-3-month-old-domain-3hep</guid>
      <description>&lt;p&gt;In May 2026, I published 7 articles for a client. The domain was 3 months old. No backlinks. No media partnerships. No existing authority.&lt;/p&gt;

&lt;p&gt;Two weeks later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3 Google Featured Snippets at position 0&lt;/li&gt;
&lt;li&gt;Grok ranked the site #1 out of 69 crawled sources&lt;/li&gt;
&lt;li&gt;Third-party publishers cited the articles alongside Wikipedia with zero outreach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a theory post. Every result in this article is verifiable on Google right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Context
&lt;/h2&gt;

&lt;p&gt;My client is Cover Page Agency an event content creation agency operating in Dubai, Milan, and Lyon. In May 2026, the Monaco Grand Prix was 5 days away. We had a narrow window.&lt;/p&gt;

&lt;p&gt;We built a 7-article semantic cluster targeting the event: content creation agency, drone photography, brand activation, event staffing, hostess agency, yacht parties, after parties.&lt;/p&gt;

&lt;p&gt;The domain had launched in 2025. Zero link building. Zero authority on F1 or Monaco topics. By traditional SEO logic, we had no business ranking for any of these queries.&lt;/p&gt;

&lt;p&gt;We ranked for all of them. Three at position 0.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed: SEO vs GEO
&lt;/h2&gt;

&lt;p&gt;Traditional SEO is a race for authority. Domain Rating, backlinks, age. A 3-month-old domain can't win that race.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GEO is different.&lt;/strong&gt; Generative Engine Optimization is the practice of structuring content so that AI search engines Grok, ChatGPT Search, Perplexity, Google AI Overviews can extract and cite it directly.&lt;/p&gt;

&lt;p&gt;The key insight: &lt;strong&gt;what Google extracts for Featured Snippets in 2026 is almost identical to what AI engines look for when generating answers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both want the same thing: clean, structured, standalone content that answers a question directly without requiring context.&lt;/p&gt;

&lt;p&gt;A well-structured article on a 3-month-old domain can beat a 10-year-old competitor — if the competitor's content isn't built for extraction. Most content isn't. That's the opportunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 Techniques
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Key Facts Standalone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every article included a dedicated section of 5 to 7 facts. Each fact was written to be readable without any surrounding context. A number, a city, a price, a timeframe. Something an AI can pull and use in a response without needing the rest of the article.&lt;/p&gt;

&lt;p&gt;Grok doesn't read your article it extracts facts. If your facts aren't standalone, they don't get extracted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Definition Pattern on the First H2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every article's first H2 started with a direct definition of the core concept. "A content creation agency is...", "Brand activation at the Monaco Grand Prix is..."&lt;/p&gt;

&lt;p&gt;This pattern is the signal large language models look for when generating definitional answers. If your H2 gives it one, you win the citation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. FAQPage Schema : 10 Entries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every article included a structured FAQ schema with exactly 10 question-answer pairs, pulled from real Google PAA results and tested on Grok, ChatGPT, and Perplexity.&lt;/p&gt;

&lt;p&gt;The rules: zero bold formatting, zero links, plain text only, 2–4 sentences maximum. Plain text extracts cleanly. Any formatting makes the extraction messy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Plain Text Quick Answer at the Top&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every article opened with a 2–3 sentence direct answer to the primary keyword. No bold, no links, no formatting. Pure text. This is the section Google extracts for paragraph-style Featured Snippets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Intra-Cluster Linking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All 7 articles linked to each other not just to service pages. This creates a strong topical authority signal: Google understands these 7 pages form a structured topic, not 7 isolated pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results Verified on Google FR, June 2026
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;"content creation agency monaco grand prix 2026" → &lt;strong&gt;Featured Snippet #0 + #1 + #5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;"drone photography monaco grand prix 2026" → &lt;strong&gt;Featured Snippet #0 + #1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;"brand activation monaco grand prix 2026" → &lt;strong&gt;Featured Snippet #0 + #1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;"drone photography monaco" (UAE) → &lt;strong&gt;#1 organic&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;"monaco grand prix 2026 event staffing" (UAE) → &lt;strong&gt;#2 organic&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Part Nobody Expects
&lt;/h2&gt;

&lt;p&gt;Three weeks after publishing, a travel website called Pixidia published an article about Cannes 2026. In their sources section: Festival de Cannes, Wikipedia, SNCF Connect, Cannes Tourisme, and &lt;strong&gt;Cover Page Agency&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No outreach. No link request. They found the article through Google or Grok and cited it alongside the official institutions.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;GEO flywheel&lt;/strong&gt;: structured content → Featured Snippet + AI citation → publishers discover the content → organic backlinks without outreach → stronger authority → easier Featured Snippets on the next cluster.&lt;/p&gt;

&lt;p&gt;The flywheel starts itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Replicate This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; — Pick a tight cluster: 5 to 8 angles on the same subject.&lt;br&gt;
&lt;strong&gt;Step 2&lt;/strong&gt; — Extract real questions from Google PAA and test them on Grok and Perplexity.&lt;br&gt;
&lt;strong&gt;Step 3&lt;/strong&gt; — Write the Quick Answer in plain text at the top of every article.&lt;br&gt;
&lt;strong&gt;Step 4&lt;/strong&gt; — Start every first H2 with "X is..." every article, no exception.&lt;br&gt;
&lt;strong&gt;Step 5&lt;/strong&gt; — Add a Key Facts section: 5–7 standalone facts per article.&lt;br&gt;
&lt;strong&gt;Step 6&lt;/strong&gt; — FAQPage schema: 10 entries, plain text answers.&lt;br&gt;
&lt;strong&gt;Step 7&lt;/strong&gt; — Link every article to every other article in the cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Structure now beats authority&lt;/strong&gt; on long-tail queries, event content, local topics, and niche expertise. A 3-month-old domain with clean GEO structure can take position 0 from a site that's been around for 10 years.&lt;/p&gt;

&lt;p&gt;We proved it in May 2026 on one of the most photographed sporting events in the world.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Enzo Marcelle — Founder of &lt;a href="https://www.celestia-studio.fr" rel="noopener noreferrer"&gt;Celestia Studio&lt;/a&gt;, Webflow agency specialized in GEO and AI citation optimization. Full case study: &lt;a href="https://www.celestia-studio.fr/blog/geo-3-featured-snippets-0-backlink-etude-de-cas-2026" rel="noopener noreferrer"&gt;celestia-studio.fr/blog/geo-3-featured-snippets-0-backlink-etude-de-cas-2026&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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