Effective SEO for Bootstrap and Indie Projects: Key Insights
So, you’ve got a bootstrap project, an awesome product, but few customers. My time has come to dive into SEO.
Running a bootstrap or indie project really sharpens a lot of skills and teaches you to focus more on business (money). Plus, you realize that marketers aren’t just sitting around—they’ve got a tough job too!
What follows is a pretty basic rundown of things I’ve learned and done over the last few days (or weeks).
First Things First: The Domain
They say .com
is slightly better, but overall, it doesn’t really matter. If your domain isn’t brand new, that’s even better—domain reputation and backlinks matter! This is also why buying underperforming but promising projects (including domains) can pay off if you know what you’re doing.
We snagged aso.dev for a magical $98 (or close to that).
Next, you build the site.
Since SEO is a priority, server-side rendering (SSR) is a must. There’s a lot of talk about Google being able to parse JavaScript, but that’s mostly nonsense. Sometimes it can, but it generally hates doing so, so don’t risk it. You could use a heavy SSR setup for React or Angular, but we went with astro.build—super fast, simple, and elegant. They have plenty of free and complex themes, but we settled on their Starlight theme after tweaking the home page a bit (you need to copy the Hero.astro component and override Head.astro).
I’m loving it so far. We’re even reworking the site for our player, meows.app, because dynamic rendering based on API responses works perfectly. We hired a junior dev to rewrite it from scratch on the same tech stack for cheap—great practice for him and a faster, simpler site for us. Angular 14 just isn’t cutting it anymore, even with Universal rendering (feels like ages ago)—check out our WIP example with Astro.
It’s looking pretty good. Previously, we used tinypng for compressing images (manually or through API + GPT script), but now we’re sticking to the built-in image optimization tools in astro.build.
Google Search Console
Next up: Google Search Console. Add your site to track indexing, spot errors, and unlock achievements (which you can flex on Twitter).
There are plenty of tools out there, but for now, I’m sticking with a couple of free ones.
Ahrefs
Ahrefs is great because you get 10k site queries and a detailed analysis of your pages’ issues. You can’t fix everything, but reducing errors helps a lot.
This tool provided most of the insights I’ve used to improve my site.
Fixes and Improvements
Optimizing Page Titles and Descriptions
Titles should be 50-60 characters, and descriptions 110-160. In the meta structure of my .md files, I added them like this:
Then I asked GPT to write a Bash script to check these files. After about 30 tries, it finally worked (still faster than if I did it by hand):
Run the script, navigate to the file, copy the text into GPT, and ask for the optimal title and description. Here’s an example prompt:
Next, update all pages—super basic, I know, but better than having no metadata or duplicate content.
Favicon Fixes
We messed up the favicon a bit—used realfavicongenerator to generate and test.
OG Tags
I also added OG tags—meta tags that make your links look better in social media previews. At the very least, include og:title, og:description, and og:image (use an absolute path). All our images are served via bunny.net, but I’m still fine-tuning that setup.
application/ld+json
Added some structured data with application/ld+json—no idea if it works, but it seems cool. Check out structured data markup.
Custom 404 Page
We built a custom 404 page. Defaulting to the index page is considered an error and could hurt SEO.
Setting the noindex
meta tag on the 404 page:
Setting up a custom 404 page in Nginx config:
Redirects
We had a bunch of 301 redirects. We made sure all URLs ended with a trailing slash (e.g., https://aso.dev/aso/
instead of https://aso.dev/aso
) to avoid duplication. After a thorough review, we eliminated outdated links in the code and added old URL redirects via NGINX.
hreflang
We added x-default to the hreflang attribute. Didn’t know that was a thing until recently.
SEMrush
I’ve been using SEMrush longer—it’s easier to downgrade to a free plan, but 100 checks and their pricing aren’t great.
Backlinks
Getting backlinks is tricky. You need links from reputable sites—spammy backlinks will hurt you. One good link from the New York Times beats hundreds from random blogs. We’re building up our backlink profile by listing our site on startup and indie project platforms. We found an Excel sheet with hundreds of link opportunities and are slowly working through it.
Launching on Product Hunt can help—subscribe for updates. We’ve delayed the launch a few times, but it’s coming soon.
Also, we try to write genuinely useful articles, not just filler.
I might’ve missed something or got things wrong.