<?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: AI Marcus</title>
    <description>The latest articles on DEV Community by AI Marcus (@aimarcus).</description>
    <link>https://dev.to/aimarcus</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3886645%2F485e15bc-b1ff-4082-ace2-08c4260255ef.png</url>
      <title>DEV Community: AI Marcus</title>
      <link>https://dev.to/aimarcus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aimarcus"/>
    <language>en</language>
    <item>
      <title>Building an AI website builder, 6 weeks in: what I learned about multi-tenant SEO</title>
      <dc:creator>AI Marcus</dc:creator>
      <pubDate>Fri, 01 May 2026 17:00:50 +0000</pubDate>
      <link>https://dev.to/aimarcus/building-an-ai-website-builder-6-weeks-in-what-i-learned-about-multi-tenant-seo-39ng</link>
      <guid>https://dev.to/aimarcus/building-an-ai-website-builder-6-weeks-in-what-i-learned-about-multi-tenant-seo-39ng</guid>
      <description>&lt;p&gt;Six weeks ago I posted a Show DEV about AI Marcus, an AI website builder I'm building. The post got zero comments. That's fair — I led with marketing, not engineering. Here's the technical post I should have written.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem nobody warned me about: multi-tenant SEO
&lt;/h2&gt;

&lt;p&gt;When you let users publish hosted sites under your domain, Google's default behavior will &lt;em&gt;destroy&lt;/em&gt; your SEO if you don't architect for it.&lt;/p&gt;

&lt;p&gt;Every hosted site at &lt;code&gt;yoursite.aimarcus.eu&lt;/code&gt; or on a custom domain &lt;code&gt;example.com&lt;/code&gt; needs to look to Googlebot like its own canonical entity, not like a path under aimarcus.eu. Get this wrong, and Google folds everything into duplicate-content limbo. Worse — your editorial pages get deindexed because Google thinks they're orphan tenant pages.&lt;/p&gt;

&lt;p&gt;What I had to ship to fix this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Per-tenant &lt;code&gt;sitemap.xml&lt;/code&gt;&lt;/strong&gt; generated dynamically from project metadata, pinned to the tenant's canonical host. Not the platform's sitemap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Per-tenant &lt;code&gt;robots.txt&lt;/code&gt;&lt;/strong&gt; that points to the tenant's sitemap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Absolute canonical and og:url&lt;/strong&gt; on every tenant page, on the tenant's own host. Never &lt;code&gt;/s/{slug}/...&lt;/code&gt;. If the AI generator emits a relative canonical, the routing layer rewrites it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The platform's &lt;code&gt;aimarcus.eu/robots.txt&lt;/code&gt;&lt;/strong&gt; disallows &lt;code&gt;/s/&lt;/code&gt; and &lt;code&gt;/blog/&lt;/code&gt; for AhrefsBot specifically — otherwise Site Audit reports drown in "orphan page" alerts that aren't actually orphans, just multi-tenant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IndexNow per-tenant keys&lt;/strong&gt;. Each project gets a 32-hex key on first save, reachable at &lt;code&gt;tenant-host/{key}.txt&lt;/code&gt; for ownership proof. Bing, Yandex, Naver, Seznam all read this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sitemap index&lt;/strong&gt; at &lt;code&gt;/sitemap.xml&lt;/code&gt; references the platform sitemap + a hand-maintained niche sitemap (108 URLs across 12 languages). Was getting wiped on every server restart by the auto-regenerator — fixed by making the niche sitemap part of the regenerator's output, not a side file.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The numbers (4 weeks of actual SEO traffic)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;0 ranked keywords across EE / RU / UA / UK locales (DataForSEO check)&lt;/li&gt;
&lt;li&gt;1 keyword ranking position 71-80 in US (negligible)&lt;/li&gt;
&lt;li&gt;~20 organic clicks per month from Google&lt;/li&gt;
&lt;li&gt;~3 clicks/month from ChatGPT (yes, Bing-routed referrers exist now)&lt;/li&gt;
&lt;li&gt;1 paying customer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So this post is not a victory lap — it's a diary entry from the part of the journey where the architecture is finally right but the audience isn't yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd skip if I started again
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The blog with 343K programmatic city × niche pages. Google indexed none of them. Burned 1 GB of disk and 6 weeks of crawl budget for zero impressions. Killed it last week.&lt;/li&gt;
&lt;li&gt;Service-account-only Google Search Console verification. The &lt;code&gt;siteFullUser&lt;/code&gt; permission is enough for sitemap submit, but &lt;code&gt;https://...&lt;/code&gt; URL-prefix property fails 403; only &lt;code&gt;sc-domain:&lt;/code&gt; works. Save yourself the debugging.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Shipped today: built-in affiliate tracking
&lt;/h2&gt;

&lt;p&gt;This morning a paying customer asked me one question: "does it support affiliate program tracking?" By evening I'd shipped a network-agnostic helper that captures a click_id from inbound URL into localStorage, fills any href / form action containing &lt;code&gt;{click_id}&lt;/code&gt; with the live value, attaches a hidden click_id input to every form submit, and exposes &lt;code&gt;window.aimMarcusConversion(amount, currency)&lt;/code&gt; which fires a postback pixel to the user's tracker on goal completion.&lt;/p&gt;

&lt;p&gt;The placeholder map covers the 6 networks I see most often in this segment: Voluum, Affise, Tune (HasOffers), ClickMagick, Keitaro, Binom — plus generic. Users paste their postback URL with the network's native tokens (&lt;code&gt;{sub1}&lt;/code&gt;/&lt;code&gt;{payout}&lt;/code&gt;/&lt;code&gt;{payout_currency}&lt;/code&gt; for Keitaro, &lt;code&gt;{cid}&lt;/code&gt; for Voluum, &lt;code&gt;{clickid}&lt;/code&gt;/&lt;code&gt;{sum}&lt;/code&gt; for Affise, etc.) and the helper translates them at runtime.&lt;/p&gt;

&lt;p&gt;The interesting design decision was rejecting the obvious "let users write JavaScript in a custom-code box" path. That's how spam pixels and tracker leaks get into otherwise clean tenant pages. Instead the helper is generated from a structured config (&lt;code&gt;affiliate.network&lt;/code&gt;, &lt;code&gt;affiliate.postbackUrl&lt;/code&gt;, &lt;code&gt;affiliate.clickIdParam&lt;/code&gt;) and validated server-side: no postback URL = no script, postback URL must be HTTPS, click-id param sanitized to &lt;code&gt;[A-Za-z0-9_-]{1,40}&lt;/code&gt;. The blast radius is bounded.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Toolify auto-discovered the listing on Apr 13. Bing's giving us 12% conv on 17 visits. The funnel finally shipped clean. Now I need to move "page visit → input click" from 11% to 25% and figure out an honest acquisition motion for the Stripe markets.&lt;/p&gt;

&lt;p&gt;Site: &lt;a href="https://aimarcus.eu" rel="noopener noreferrer"&gt;https://aimarcus.eu&lt;/a&gt; — first generation is free, no signup.&lt;br&gt;
Repo: not open-sourced. Happy to share architecture details in comments.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Show DEV: AI website builder that generates a complete site in 60 seconds</title>
      <dc:creator>AI Marcus</dc:creator>
      <pubDate>Sat, 18 Apr 2026 22:42:53 +0000</pubDate>
      <link>https://dev.to/aimarcus/show-dev-ai-website-builder-that-generates-a-complete-site-in-60-seconds-46p</link>
      <guid>https://dev.to/aimarcus/show-dev-ai-website-builder-that-generates-a-complete-site-in-60-seconds-46p</guid>
      <description>&lt;p&gt;Built an AI website builder where you describe your business in natural language and get a complete website in about 60 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo (no signup required):&lt;/strong&gt; &lt;a href="https://aimarcus.eu" rel="noopener noreferrer"&gt;aimarcus.eu&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it generates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Unique design (not templates — each site is generated from scratch)&lt;/li&gt;
&lt;li&gt;Copywriting tailored to the business niche&lt;/li&gt;
&lt;li&gt;AI-generated hero and section images&lt;/li&gt;
&lt;li&gt;SEO basics: meta tags, JSON-LD schema, canonical, hreflang&lt;/li&gt;
&lt;li&gt;Mobile responsive, semantic HTML&lt;/li&gt;
&lt;li&gt;Free hosting included, or download full source code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generation:&lt;/strong&gt; Claude (content + code), Imagen 4 / DALL-E 3 (images)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js + Express, PostgreSQL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent workflow:&lt;/strong&gt; designer → copywriter → SEO pass&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Languages:&lt;/strong&gt; 35 localizations out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Niche pages:&lt;/strong&gt; &lt;code&gt;/for/restaurants&lt;/code&gt;, &lt;code&gt;/for/dentists&lt;/code&gt;, &lt;code&gt;/for/barbershops&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The "zero-to-wow" approach
&lt;/h2&gt;

&lt;p&gt;Instead of asking for signup first, the landing page has a prompt input. Type your business in one sentence → see the generated site before deciding to pay. Converts dramatically better than the traditional "sign up, enter credit card, then try" funnel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free first generation (to see the output quality)&lt;/li&gt;
&lt;li&gt;€20/page when you publish&lt;/li&gt;
&lt;li&gt;14-day money-back guarantee&lt;/li&gt;
&lt;li&gt;Full source code delivered (HTML/CSS/JS)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Questions for DEV
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What do you think about the quality of the generated code? (Check the "View source" on any generated site.)&lt;/li&gt;
&lt;li&gt;We're debating whether to open-source the "layout planner" agent — would that be useful?&lt;/li&gt;
&lt;li&gt;Any niches we're missing? Current set: restaurants, barbershops, dentists, lawyers, gyms, yoga, photographers, real estate, auto repair, construction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Freelancers: there's a 30% lifetime commission partner program at &lt;a href="https://aimarcus.eu/partners" rel="noopener noreferrer"&gt;aimarcus.eu/partners&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy to answer anything in the comments.&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
  </channel>
</rss>
