<?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: 肖赟</title>
    <description>The latest articles on DEV Community by 肖赟 (@_6f182f0a05abcb950c3048).</description>
    <link>https://dev.to/_6f182f0a05abcb950c3048</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%2F3959201%2F3f4962a0-66ab-4b9b-9b53-bc7d0068dba7.png</url>
      <title>DEV Community: 肖赟</title>
      <link>https://dev.to/_6f182f0a05abcb950c3048</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_6f182f0a05abcb950c3048"/>
    <language>en</language>
    <item>
      <title>Building a Free Etsy SEO Toolkit: What I Learned Going Client-Side-Only</title>
      <dc:creator>肖赟</dc:creator>
      <pubDate>Fri, 29 May 2026 22:57:11 +0000</pubDate>
      <link>https://dev.to/_6f182f0a05abcb950c3048/building-a-free-etsy-seo-toolkit-what-i-learned-going-client-side-only-1f1h</link>
      <guid>https://dev.to/_6f182f0a05abcb950c3048/building-a-free-etsy-seo-toolkit-what-i-learned-going-client-side-only-1f1h</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Honest framing first: the "AI" in my Etsy toolkit isn't a GPT-4 wrapper. It's templated phrase generation that runs entirely in the browser. The reason matters — and so does the part where Google still won't index the site after three months. This is a writeup of both decisions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I run a tiny side project at &lt;a href="https://tools.650821.xyz/" rel="noopener noreferrer"&gt;tools.650821.xyz&lt;/a&gt; — a small set of free tools and guides for Etsy sellers, built around what I'd actually want if I were optimizing listings myself. Two of the pages are interactive generators: one for &lt;a href="https://tools.650821.xyz/etsy-listing-description-generator-ai.html" rel="noopener noreferrer"&gt;Etsy listing descriptions&lt;/a&gt; and one for &lt;a href="https://tools.650821.xyz/etsy-tag-generator-ai.html" rel="noopener noreferrer"&gt;13 SEO tags&lt;/a&gt;. The rest are evergreen guides.&lt;/p&gt;

&lt;p&gt;There's a non-obvious engineering choice baked in, and I want to write about it because I've seen a lot of "AI tool" launches recently that I think solve the wrong problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision: no backend, no API keys, no signup
&lt;/h2&gt;

&lt;p&gt;When I started, the default architecture in my head was the same as everyone else's: Netlify Functions or Cloudflare Workers in front of an LLM API, prompt-engineered for Etsy-specific output, freemium gating after N generations.&lt;/p&gt;

&lt;p&gt;I killed that plan after sketching out the unit economics on the back of an envelope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An Etsy seller browsing a free tool clicks "Generate" maybe three to five times across a few tabs before bouncing.&lt;/li&gt;
&lt;li&gt;Even with an aggressive cache and a cheap model, that's a real cost per uncertified visitor.&lt;/li&gt;
&lt;li&gt;The conversion to paid is unproven for this audience (Etsy sellers, especially smaller ones, are &lt;em&gt;extremely&lt;/em&gt; price-sensitive).&lt;/li&gt;
&lt;li&gt;Every API call needs a rate limiter and an abuse-prevention story, which adds infrastructure I don't want to babysit on a side project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I went the other direction entirely: &lt;strong&gt;the generators are templated client-side JavaScript&lt;/strong&gt;. No API call. No backend. No analytics on what users typed. The product-name and keyword inputs never leave the browser.&lt;/p&gt;

&lt;p&gt;This is, frankly, less impressive on a demo. But it has two qualities the API-wrapped version doesn't:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Marginal cost of a user is zero.&lt;/strong&gt; I can put it behind a CDN and forget about it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The privacy story is honest.&lt;/strong&gt; I can say "your inputs stay in the browser" and it's a code-level fact, not a privacy-policy promise.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What "AI-style templates" actually means
&lt;/h2&gt;

&lt;p&gt;The tag generator takes a product name and a handful of seed keywords, then runs them through a set of phrase-combination templates targeting Etsy's tag rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;13 tags maximum per listing (this is the Etsy product cap).&lt;/li&gt;
&lt;li&gt;Each tag treated as a short phrase, kept under the practical 20-character limit.&lt;/li&gt;
&lt;li&gt;Combinations across product-type, material, audience, occasion, and style axes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The description generator does the same trick on a longer canvas: it has preset narrative structures (benefit-led, materials-led, gift-led) with randomized phrasing, then drops the seller's keywords into the right slots.&lt;/p&gt;

&lt;p&gt;The honest sales pitch is: "this gives you a complete first-draft tag set or description in about two seconds; you'll still want to read it and fix anything that doesn't match your actual product." That's the same thing you'd say about an LLM output, except this one runs offline and is repeatable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I think most Etsy seller "AI tools" miss the point
&lt;/h2&gt;

&lt;p&gt;If you go look at the Etsy seller tools market right now, the headline feature for almost all of them is "powered by AI." The implicit promise is that AI will write something &lt;em&gt;better&lt;/em&gt; than the seller would write themselves.&lt;/p&gt;

&lt;p&gt;For Etsy specifically, I think that frame is wrong. The reason Etsy listings underperform isn't usually that the seller's prose is bad — it's that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They miss the 13-tag rule entirely and use 6 tags.&lt;/li&gt;
&lt;li&gt;They put the wrong keyword in the title (descriptive instead of search-intent).&lt;/li&gt;
&lt;li&gt;They use tags over 20 characters that Etsy quietly truncates.&lt;/li&gt;
&lt;li&gt;They don't include a clear first sentence in the description (which is what gets indexed and previewed).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A template generator that &lt;em&gt;forces&lt;/em&gt; you to fill 13 tag slots within the 20-character limit catches most of these mistakes without ever needing to be smart. Solving the structural problem matters more than the linguistic one.&lt;/p&gt;

&lt;p&gt;I wrote a longer breakdown of these specific Etsy SEO rules in &lt;a href="https://tools.650821.xyz/how-to-write-etsy-tags-with-ai.html" rel="noopener noreferrer"&gt;this guide&lt;/a&gt; if you want the full version.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that's not working: Google won't index the site
&lt;/h2&gt;

&lt;p&gt;Here's the part of the story that's painful to write.&lt;/p&gt;

&lt;p&gt;I've had this site live for three months. It has 27 indexable pages, a clean sitemap, valid FAQPage and HowTo JSON-LD on the main pages, and a robots.txt that does exactly what it should. Google Search Console reports the homepage as "crawlable" and "indexable" in the live URL inspection test.&lt;/p&gt;

&lt;p&gt;And yet: &lt;strong&gt;0 clicks, 0 impressions in GSC over 90 days.&lt;/strong&gt; The sitemap status in GSC has been stuck at "Could not fetch" since the day I submitted it. I added a Domain property in addition to the URL prefix property. I added the apex TXT verification. I requested indexing on the homepage. The "Page indexing" report has shown "processing data" for 17 days now.&lt;/p&gt;

&lt;p&gt;What's especially interesting is the contrast with Bing Webmaster Tools. I added Bing two weeks after Google, did the same sitemap submission, and Bing crawled it successfully within 10 days — 27 URLs discovered, sitemap status "Success." Bing hasn't indexed them into search yet either, but the &lt;em&gt;crawl&lt;/em&gt; completed. Google can't seem to get past the sitemap fetch.&lt;/p&gt;

&lt;p&gt;The site is hosted on Netlify, which serves the sitemap with a 200, valid XML, correct &lt;code&gt;Content-Type&lt;/code&gt;, no robots.txt issues, no DNS weirdness (I verified the TXT record propagated globally). The most likely explanation, based on the Bing-vs-Google asymmetry, is that Googlebot is being unusually conservative about a new domain with no inbound links — and that conservative posture is wedging the sitemap fetch step itself.&lt;/p&gt;

&lt;p&gt;The solution is, depressingly, the most old-fashioned SEO advice that exists: &lt;strong&gt;the site needs real backlinks from places Google already trusts.&lt;/strong&gt; Which is one of the reasons I'm writing this post.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;If I were starting over, I'd:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the tool first, content second.&lt;/strong&gt; I have ~25 content/guide pages and 2 interactive tools. The two tools are the only pages anyone would actually share organically. I should have shipped 4–5 tools and 5 guides, not 2 tools and 25 guides.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plant external signal from day one.&lt;/strong&gt; A DEV.to post on launch day, two AI tool directory submissions, one Reddit comment in a relevant thread answering a real question. Not for traffic — for &lt;em&gt;discovery signal&lt;/em&gt; so Google has a reason to take the sitemap seriously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the no-backend bet.&lt;/strong&gt; This part I'd repeat. Zero marginal cost on a side project is the only reason I haven't shelved it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're an Etsy seller curious about the &lt;a href="https://tools.650821.xyz/etsy-tag-generator-ai.html" rel="noopener noreferrer"&gt;tag generator&lt;/a&gt; or &lt;a href="https://tools.650821.xyz/etsy-listing-description-generator-ai.html" rel="noopener noreferrer"&gt;description generator&lt;/a&gt;, they're free and ungated. If you're a fellow indie hacker debugging GSC indexing issues, I'd love to hear what worked for you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Three months in, ~25 pages live, 8 monthly active users. The journey continues.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>seo</category>
      <category>indiehackers</category>
    </item>
  </channel>
</rss>
