<?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: James Don</title>
    <description>The latest articles on DEV Community by James Don (@jamesdon68).</description>
    <link>https://dev.to/jamesdon68</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%2F3807227%2F4f3851d0-9eb1-437e-a358-4da37765515a.png</url>
      <title>DEV Community: James Don</title>
      <link>https://dev.to/jamesdon68</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jamesdon68"/>
    <language>en</language>
    <item>
      <title>I Optimized SEO for 12 Languages — Here's What Doesn't Translate</title>
      <dc:creator>James Don</dc:creator>
      <pubDate>Fri, 27 Mar 2026 06:35:36 +0000</pubDate>
      <link>https://dev.to/jamesdon68/i-optimized-seo-for-12-languages-heres-what-doesnt-translate-3jnp</link>
      <guid>https://dev.to/jamesdon68/i-optimized-seo-for-12-languages-heres-what-doesnt-translate-3jnp</guid>
      <description>&lt;p&gt;&lt;em&gt;Follow-up to &lt;a href="https://dev.to/jamesdon68/i-built-a-social-media-downloader-and-got-169-keywords-indexed-in-7-days-4j7k"&gt;I Built a Social Media Downloader and Got 169 Keywords Indexed in 7 Days&lt;/a&gt;. That one covered the initial indexing sprint. This one's about what happened when I tried to scale it to 12 languages.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When I started expanding &lt;a href="https://savekit.io" rel="noopener noreferrer"&gt;SaveKit&lt;/a&gt; beyond English, I did what most devs would do: handed my keyword list to a translator and called it a day.&lt;/p&gt;

&lt;p&gt;That was dumb. Cost me about two weeks of rework.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick context
&lt;/h2&gt;

&lt;p&gt;SaveKit's a social media downloader — Pinterest, Instagram, Facebook, TikTok, Twitter/X, Reddit. 26+ pages total. I wanted to rank in 12 locales: EN, ID, PT, ES, TR, VI, JA, KO, DE, FR, HI, AR.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aftzx099bbe281znioy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aftzx099bbe281znioy.png" alt="Savekit Languages" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's 19 keyword targets per locale. 228 keywords that all needed independent validation. The stack is SvelteKit 2 + Svelte 5 on Cloudflare Pages, with each locale getting its own i18n JSON file for meta titles and descriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The autocomplete test that broke everything
&lt;/h2&gt;

&lt;p&gt;Before I touched any keywords, I did something simple: opened Google in incognito, set it to each target country, and started typing my keyword phrases.&lt;/p&gt;

&lt;p&gt;Almost nothing autocompleted.&lt;/p&gt;

&lt;p&gt;I'd been writing stuff like "safe instagram downloader" and "secure video downloader" because... that's what you'd want, right? Turns out nobody actually types that. People assume a tool is safe. They don't search for it.&lt;/p&gt;

&lt;p&gt;"Safe" and "secure" had near-zero autocomplete presence in &lt;em&gt;every single locale&lt;/em&gt;. Same for "best" and "free." These are vanity keywords — they make you feel good about your meta tags but do absolutely nothing.&lt;/p&gt;

&lt;p&gt;This became my pre-ship checklist for every keyword:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does it autocomplete in the target locale?&lt;/li&gt;
&lt;li&gt;Do top 3 competitors actually use it in their meta tags?&lt;/li&gt;
&lt;li&gt;Is the intent transactional? (someone wanting to download &lt;em&gt;right now&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;No vanity words — "safe", "secure", "best"?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That fourth rule alone killed ~15% of my keyword list across all locales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keywords don't translate
&lt;/h2&gt;

&lt;p&gt;This is the thing I wish someone had told me earlier. You can't translate keywords. You have to &lt;em&gt;research&lt;/em&gt; each locale from scratch, like it's a separate product launch.&lt;/p&gt;

&lt;p&gt;Translation tells you what words mean. Research tells you what people actually type. Those are very different things.&lt;/p&gt;

&lt;h3&gt;
  
  
  Portuguese
&lt;/h3&gt;

&lt;p&gt;In Brazil, "baixar" completely dominates over "download." It's not even close. The word literally means "to pull down" and it maps perfectly to the user's mental model.&lt;/p&gt;

&lt;p&gt;Title: &lt;code&gt;Baixar Vídeo Instagram - HD, Sem Marca D'água | SaveKit&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Spanish
&lt;/h3&gt;

&lt;p&gt;I initially used "guardar" (to save) because it sounded nicer. Bad call — "guardar" is ambiguous. It could mean saving to a Pinterest board or bookmarking something. "Descargar" (to download/unload) is what people actually search. Swapped 8 keywords, confidence went from ~70% to 89%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Turkish
&lt;/h3&gt;

&lt;p&gt;"İndir" for download. Strongly preferred over English. 95% confidence — actually my cleanest locale because the verb is unambiguous and every competitor uses it the same way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vietnamese
&lt;/h3&gt;

&lt;p&gt;This one was interesting. Both "tải" and "lưu" are used roughly 50/50 for download-type actions. That's unusual — most locales settle on one dominant verb. I went with "tải" as the primary (more transactional) and sprinkled "lưu" in body copy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Japanese &amp;amp; Korean
&lt;/h3&gt;

&lt;p&gt;CJK users abbreviate everything. インスタ (4 chars) gets searched 3-5x more than インスタグラム (7 chars). Same pattern in Korean: 인스타 &amp;gt;&amp;gt; 인스타그램.&lt;/p&gt;

&lt;p&gt;I also had to remove two keywords from JA/KO that I'd basically made up — "pinterest pin gallery" phrasing doesn't exist in either language. Pinterest doesn't have a "gallery" feature users identify by name. The autocomplete test caught both in under a minute. Embarrassing that I shipped them at all.&lt;/p&gt;

&lt;p&gt;Side note on Korean: Naver holds 59% of search share there. Google SEO only gets you so far. I've deprioritized KO for now — Naver needs its own keyword tools and that's a separate project.&lt;/p&gt;

&lt;h3&gt;
  
  
  German &amp;amp; French — being honest
&lt;/h3&gt;

&lt;p&gt;These are my weakest locales. DE at 59% confidence, FR at 63%.&lt;/p&gt;

&lt;p&gt;German surprised me: "downloaden" (English loan word) shows up 2-3x more than "herunterladen" in competitor meta tags. I didn't expect that. But the overall keyword picture is murkier — fewer dominant tools in these markets, more variance between competitors.&lt;/p&gt;

&lt;p&gt;French is similar. Pinterest keywords do well there (83% viable), but the rest is thin.&lt;/p&gt;

&lt;p&gt;I shipped both locales anyway, but flagged them for Q2 validation once GSC data comes in. No point pretending you have high confidence when you don't.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arabic — nobody's competing here
&lt;/h3&gt;

&lt;p&gt;This was the wildest finding. For Arabic Pinterest downloads? There's basically no one. Near-zero purpose-built competitors. The market's wide open.&lt;/p&gt;

&lt;p&gt;Some non-obvious implementation notes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MSA only.&lt;/strong&gt; Modern Standard Arabic. Every competitor uses it. I checked Egyptian dialect autocomplete — zero results. Don't get creative with dialects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transliterate platform names.&lt;/strong&gt; Arabic users search انستقرام, فيسبوك, تيك توك — not the English names. Confirmed via autocomplete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RTL is trickier than you think.&lt;/strong&gt; I set &lt;code&gt;dir=rtl&lt;/code&gt; on &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;, but had to explicitly override with &lt;code&gt;dir=ltr&lt;/code&gt; on the header, search form, footer, and logo:&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;html&lt;/span&gt; &lt;span class="na"&gt;dir=&lt;/span&gt;&lt;span class="s"&gt;"rtl"&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;dir=&lt;/span&gt;&lt;span class="s"&gt;"ltr"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;main&amp;gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- Arabic content flows RTL --&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;footer&lt;/span&gt; &lt;span class="na"&gt;dir=&lt;/span&gt;&lt;span class="s"&gt;"ltr"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get this wrong and you break the layout for both RTL &lt;em&gt;and&lt;/em&gt; LTR users at the same time. Ask me how I know.&lt;/p&gt;




&lt;h2&gt;
  
  
  "Without watermark" is universal
&lt;/h2&gt;

&lt;p&gt;This was the most consistent pattern across all 12 languages. The #1 keyword modifier for video downloaders, everywhere:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Locale&lt;/th&gt;
&lt;th&gt;"without watermark"&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;EN&lt;/td&gt;
&lt;td&gt;no watermark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID&lt;/td&gt;
&lt;td&gt;tanpa watermark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PT&lt;/td&gt;
&lt;td&gt;sem marca d'água&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ES&lt;/td&gt;
&lt;td&gt;sin marca de agua&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TR&lt;/td&gt;
&lt;td&gt;filigransız&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VI&lt;/td&gt;
&lt;td&gt;không watermark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JA&lt;/td&gt;
&lt;td&gt;透かしなし&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KO&lt;/td&gt;
&lt;td&gt;워터마크 없이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR&lt;/td&gt;
&lt;td&gt;بدون علامة مائية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DE&lt;/td&gt;
&lt;td&gt;ohne wasserzeichen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FR&lt;/td&gt;
&lt;td&gt;sans filigrane&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"Without app" is #2, but only in mobile-first markets (ID, VI, PT, TR, ES, AR). Doesn't show up much in DE, FR, JA, KO, or EN.&lt;/p&gt;

&lt;h2&gt;
  
  
  The title formula
&lt;/h2&gt;

&lt;p&gt;After scraping meta tags from 60+ competitor sites across all locales, one pattern held everywhere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Primary Keyword] - [Benefits] | Brand
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hyphen separates keyword from benefits. Pipe before brand. 50-65 chars. That's it.&lt;/p&gt;

&lt;p&gt;I'd been using brackets &lt;code&gt;[]&lt;/code&gt; based on some older CTR studies. Checked 60+ ranking tools — not a single one uses brackets. Dropped them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;EN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Instagram Video Downloader - HD, No Watermark | SaveKit&lt;/span&gt;
&lt;span class="na"&gt;PT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Baixar Vídeo Instagram - HD, Sem Marca D'água | SaveKit&lt;/span&gt;
&lt;span class="na"&gt;TR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Instagram Video İndir - HD, Filigransız | SaveKit&lt;/span&gt;
&lt;span class="na"&gt;AR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;تحميل فيديو انستقرام - بدون علامة مائية، HD مجاناً | SaveKit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same structure. Different words. That's the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got wrong
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trusted my gut on CJK.&lt;/strong&gt; Shipped two fabricated keywords in Japanese and Korean because they "sounded right." The autocomplete test takes 30 seconds. I skipped it. Don't skip it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treated German/French as "close enough to English."&lt;/strong&gt; Roman alphabet made me lazy. They're not close enough. Both need proper Ahrefs-level validation that I haven't done yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confused translation with research.&lt;/strong&gt; Seriously, these are completely different tasks and I mixed them up for the first two weeks.&lt;/p&gt;

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

&lt;p&gt;Waiting on GSC data (Q2 2026). That'll tell me whether the validated keywords actually rank and if the confidence scores map to real traffic.&lt;/p&gt;

&lt;p&gt;Arabic Pinterest is the most interesting bet. Either the near-zero competition means there's a real opportunity, or it means the demand isn't there. Should know by April.&lt;/p&gt;

&lt;p&gt;And Korean — if Naver traffic turns out to be meaningful, the whole KO strategy needs a redo with Naver's keyword tools. That's a bigger project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Takeaways if you're doing this yourself
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run the autocomplete test on every keyword.&lt;/strong&gt; 30 seconds each. It'll kill bad keywords before they waste your crawl budget.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Research the native verb first.&lt;/strong&gt; baixar, descargar, indir, tải, تحميل — the verb is the keyword. Don't assume English works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Document why you removed keywords.&lt;/strong&gt; If you don't, someone (probably future you) will add them back in 6 months.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Be honest about confidence.&lt;/strong&gt; Shipping a locale at 59% validated is fine. Pretending it's 95% is how you end up rewriting everything later.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I store all of this in &lt;code&gt;packages/config/src/seo-keywords.ts&lt;/code&gt; alongside a strategy doc with the research data. Treating keywords as code — with commit history, reasons, and confidence levels — is the only way I've found to keep this manageable across 12 locales.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://savekit.io" rel="noopener noreferrer"&gt;SaveKit&lt;/a&gt; is the project. &lt;a href="https://dev.to/jamesdon68/i-built-a-social-media-downloader-and-got-169-keywords-indexed-in-7-days-4j7k"&gt;Previous article here&lt;/a&gt;. If you've done multilingual SEO and found different patterns, I'd genuinely like to hear about it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>i18n</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I Built a Social Media Downloader and Got 169 Keywords Indexed in 7 Days</title>
      <dc:creator>James Don</dc:creator>
      <pubDate>Thu, 05 Mar 2026 06:46:53 +0000</pubDate>
      <link>https://dev.to/jamesdon68/i-built-a-social-media-downloader-and-got-169-keywords-indexed-in-7-days-4j7k</link>
      <guid>https://dev.to/jamesdon68/i-built-a-social-media-downloader-and-got-169-keywords-indexed-in-7-days-4j7k</guid>
      <description>&lt;p&gt;Last week I launched &lt;a href="https://savekit.io" rel="noopener noreferrer"&gt;SaveKit&lt;/a&gt; — a free tool to download videos and images from Pinterest, Instagram, Facebook, and TikTok (first MVP).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fog7js6rcnhmhd5k37wid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fog7js6rcnhmhd5k37wid.png" alt="savekit home page" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No login. No watermark. Just paste a link and save.&lt;br&gt;
I wasn't sure if anyone would care. Turns out, they did.&lt;/p&gt;

&lt;h3&gt;
  
  
  The numbers after 7 days
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;157 → 668 daily visitors (4x growth)&lt;/li&gt;
&lt;li&gt;169 organic keywords indexed on Google&lt;/li&gt;
&lt;li&gt;Position 1 for "download video from facebook"&lt;/li&gt;
&lt;li&gt;Ranking in 5 languages already (English, Spanish, Portuguese, Turkish, Vietnamese)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't run a single ad. Here's what I did instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxawb36xgpk502xibc8zr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxawb36xgpk502xibc8zr.png" alt="cloudflare analytics" width="800" height="776"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I built this
&lt;/h3&gt;

&lt;p&gt;I kept running into the same problem — wanting to save a Pinterest image or a TikTok video, and every tool out there was either full of ads, required an account, or tried to install something sketchy.&lt;/p&gt;

&lt;p&gt;So I built my own. The goal was simple: paste a URL, get your content. Nothing else.&lt;/p&gt;

&lt;h3&gt;
  
  
  The tech stack
&lt;/h3&gt;

&lt;p&gt;I went with what I know and what ships fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SvelteKit 2&lt;/strong&gt; with Svelte 5 (runes) for the frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Workers / Pages&lt;/strong&gt; for hosting (edge-rendered, fast globally)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS v4&lt;/strong&gt; + shadcn-svelte for UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; in strict mode everywhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm monorepo&lt;/strong&gt; — shared packages for config, UI components, utils, i18n&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole thing is a monorepo with the downloader app, a blog (Astro), and shared packages. Each package owns its own types, tests, and build — no global build step needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  The SEO approach that actually worked
&lt;/h3&gt;

&lt;p&gt;This is where it gets interesting. Instead of launching in English only and "going international later," I launched with 10 locales from day one:&lt;/p&gt;

&lt;p&gt;English, Spanish, Portuguese, Indonesian, Turkish, Vietnamese, Japanese, Korean, German, and French.&lt;/p&gt;

&lt;p&gt;Why these? I looked at what competitors like &lt;a href="http://ssstik.io" rel="noopener noreferrer"&gt;ssstik.io&lt;/a&gt; and &lt;a href="http://snaptik.app" rel="noopener noreferrer"&gt;snaptik.app&lt;/a&gt; were doing. They all have multi-language support, and they all rank for native-language keywords.&lt;/p&gt;

&lt;p&gt;Some things I learned:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Native verbs beat English everywhere.&lt;/strong&gt; In Portuguese, "baixar" (download) gets way more searches than "download." Same for Spanish ("descargar"), Turkish ("indir"), and Vietnamese ("tải"). Sounds obvious, but most tools just translate the UI and keep English SEO keywords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Without watermark" is the #1 keyword modifier globally.&lt;/strong&gt; Every locale, every platform. People searching for downloaders almost always add "without watermark" or "no watermark" to their query.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short forms beat full names in CJK languages.&lt;/strong&gt; Japanese users search "インスタ" not "インスタグラム". Korean users search "인스타" not "인스타그램". Matching how people actually type matters more than being formally correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vanity words are worthless.&lt;/strong&gt; Nobody searches "safe video downloader" or "best free downloader." I checked autocomplete for every locale — "safe," "secure," and "best" never appear. Don't waste title characters on them.&lt;/p&gt;

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

&lt;p&gt;Honestly, not much. Launching with multi-locale SEO from day one was the right call. The keywords are already diversified across languages, which means I'm not competing for the same 10 English keywords as everyone else.&lt;/p&gt;

&lt;p&gt;If anything, I'd start building backlinks earlier. Right now I only have one (from Product Hunt). Content marketing and community posts like this one are the next step.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;More platforms (X support is the most requested)&lt;/li&gt;
&lt;li&gt;More sub-pages per platform (Instagram Reels, Stories, etc.)&lt;/li&gt;
&lt;li&gt;Better caching and CDN optimization&lt;/li&gt;
&lt;li&gt;Writing more about the technical side (structured data, JSON-LD schemas, Core Web Vitals optimization)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to try it: &lt;a href="http://savekit.io" rel="noopener noreferrer"&gt;savekit.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're building something similar and want to chat about multi-locale SEO or SvelteKit on Cloudflare, drop a comment — happy to share what I've learned.&lt;/p&gt;

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