SEO for Indie Developers: Getting Your Next.js SaaS Found

2 months ago
Published
Blog Featured Image

You built a beautiful product. You launched it. You shared it on X. Maybe even hit the front page of Product Hunt.

And then... crickets.

No signups. No traffic. No love. Not because your product sucks - but because no one can find it.

That’s where SEO becomes your silent sales rep.

Before we go further, let’s see how SEO stacks up against paid ads.

Unlike ads or social media posts that fade in days (if not hours), SEO works 24/7, which means your ideal customers will discover you right when they’re searching for a solution.

  • Someone Googles: “Simple invoice app for freelancers”
  • Your page shows up
  • They click, they read, they convert (ideally)

You didn’t pay for the click. You didn’t chase it down - aside from creating the content. Google brought it to you.

Paid AdsSEO (Organic)
CostYou pay for every clickFree (except your time)
SpeedFastSlower
TrustLower (ads are ads)Higher (organic = credible)
ROIEnds when budget endsGrows over time

Paid ads are great if you have cash to burn. But SEO builds compounding returns.

A blog post you write today could bring you traffic for years.  

Paid = ads. Organic = earned.

The big trade-off is that SEO takes time - real time, effort, and persistence to rank. But once you do, the traffic is free.

What Makes SEO Different for Solo Builders

Big companies have the budget to throw money at SEO. But as a solo-builder, you're usually constrained by your budget.

But you can move faster when you:

  • Write niche content your competitors won’t touch
  • Use your dev skills to build SEO-optimized pages
  • Turn feature launches into traffic magnets

As an indie maker, you’re lean, focused, and flexible - and that gives you an edge.

You don’t need to rank #1 for “CRM.” You just need to rank #1 for “CRM for podcast editors.”

The more targeted you are, the better. The riches are in the niches.

What We Shall Cover In This Guide

This guide is your blueprint to getting found - even if you:

  • Hate writing
  • Know nothing about SEO
  • Built your SaaS in Next.js and just want users

Here’s what we’ll cover:

  • SEO fundamentals (in dev-friendly terms)
  • Technical SEO with Next.js
  • Content strategies that don’t feel gross
  • Distribution & link building for indie hackers

Let's start from the basics.

What is SEO - really? 

Search Engines = Answer Machines

Think of Google as the world’s most used Q&A tool. People type in problems in form of search queries. Google tries to return the best possible answers to solve a user's problem.

SEO (Search Engine Optimization) is just making sure:

  • Your product can be found by search engines
  • Your content answers real questions and solves problems.
  • Your site is built in a way that helps Google trust you

That’s it. No magic. Just helping people (and Google) understand what your site is about.

  SEO is a race, not a sprint - Neil Patel

Key Ranking Factors in 2025

Google’s algorithm is complex and is always changing, but these are the core things that matter today:

  1. Content quality: Are you actually solving the searcher’s problem?
  2. Page experience: Is your site fast, mobile-friendly, and easy to read?
  3. Backlinks: Are other credible sites linking to you?
  4. Search intent match: Are you writing exactly what someone is searching for? (more on this latter)
  5. Technical SEO basics: Does your site have clean HTML, meta tags, alt text, canonical URLs, etc.?
  6. Freshness: Is your content up-to-date and regularly improved?
Google’s goal: deliver the best, most helpful page for each search. Your job: be that page.

The 3 Pillars of SEO

Most SEO problems fall into one of three buckets. If you get these three right, you’re already ahead of 90% of indie SaaS sites.

Let’s break them down.

1. Technical SEO (How Your Site Is Built)

This is the infrastructure layer. If your site is broken under the hood, no amount of search engine optimized content will save it.

If Google can't:

  • Crawl your site?
  • Understand your pages?
  • Or it can crawl and understand your pages but not in an efficient way

...then your site is likely to suffer in the search results. 

These issues can easily be addressed in Next.js by: 

  • Using the right rendering strategy
  • Having proper <head> tags (title, meta description, canonical URL)
  • Avoiding broken links, 404s, and redirect loops
  • Creating a sitemap and robots.txt
  • Optimizing for Core Web Vitals (speed, layout shifts, etc.)
Think of technical SEO as the foundation upon which all your other SEO efforts are built. 

2. On-Page SEO (What’s On Each Page)

This is the content layer. It's everything a user (and Google) sees on the page.

There are a couple of key aspects to pay attention to here:

  • Headings ( <h1> to <h6>) are structured logically
  • Using the right keywords naturally (without stuffing)
  • Images with descriptive alt text
  • Internal links to related pages which improves on your overall SEO/link juice.
  • Clear page purpose: what’s this page trying to rank for?

For on-page SEO, it's absolutely critical to keep in mind that you’re not writing for the Google bots.

You’re writing for humans with problems - but you’re formatting it in a way that Google can read and understand.

Each page should be designed to answer one clear search intent.

This is the reputation layer. It’s how Google decides whether to trust you.

And for the most part, you can’t directly influence Google’s decision here - that’s what the first two types of SEO were for.

With this type of SEO Google looks at:

  • Who’s linking to your site
  • How trustworthy those sites are
  • What they’re saying about you

Backlinks can come from anywhere - blogs, GitHub repos, forums, or social media - but they should be relevant to your site’s content.

Irrelevant links are often ignored by Google, and if they’re part of manipulative link schemes, they can even hurt your SEO.

Google sees links like upvotes. More high-quality upvotes = more trust
NEW ON POSIBOO

Build UIs like a wizard ⚡

Supercharge your development with Posiboo’s ready-to-paste Tailwind + ShadCN UI components. Free and paid. Beautifully designed. Built for speed.

Start Building →

Technical SEO for Next.js SaaS Apps

Next.js provides a suite of tools that make it easy to score highly on all aspects of technical SEO, ranging from SEO-friendly routing and metadata management to image optimization, sitemap generation, and Core Web Vitals performance tuning.

In this section, we’ll cover each of these - starting with routing.

SEO-Friendly Routing in Next.js

How to structure your URLs and pages so search engines (and users) love them.

1. Dynamic Routes vs Static Routes

Next.js makes routing easy with its file-based approach - but when it comes to SEO, how you use dynamic routes really matters.

Static Routes: These are your foundational pages: /, /pricing, /about, etc. They’re clean, fast, and predictable. SEO loves them.

Dynamic Routes: These cover things like:

  • /blog/[slug].jsx for blog articles
  • /features/[id] for individual features or use cases

Pro Tip:

Use meaningful slugs, not IDs. For example: /blog/nextjs-seo-routing is way better than /blog/1234

2. File-Based Routing + Clean URLs

Good SEO starts with human-readable URLs.

Do this:

  • /pricing
  • /features/invoice-tracking
  • /blog/why-you-need-seo

Avoid:

  • /page?id=42
  • /blog/post.php?id=1337
  • /features?slug=x239r

Why? Because clean URLs:

  • Are easier for humans to remember and share
  • Help Google understand what the page is about
  • Get more clicks in search results
URLs are a ranking factor. Keep them short, simple, and descriptive.

3.  Data Fetching for SEO in the App Router

With the App Router, everything is static by default - which is already great for SEO. You can prebuild dynamic routes with generateStaticParams, then layer in ISR using revalidate or fetch(..., { next: { revalidate } }).

That way, you get lightning-fast loads and Google sees stable HTML, while updates happen quietly in the background without killing performance.

Full SSR is still around, but it’s now something you use sparingly. You can force it with dynamic: 'force-dynamic' or cache: 'no-store' when you need true per-request or user-specific data.

Just know that SSR means a slower TTFB, and unless that fresh data actually changes what Google sees, you’re paying an SEO tax for no real gain.

General Rule of Thumb:

Avoid SSR unless the content must be dynamic at request time.

Metadata, Titles, and Open Graph

How to make your pages stand out in search results and on social media - without any external libraries.

Why Metadata Matters

Before someone clicks your link - whether it’s on Google or Twitter - they see your metadata.

  • The title that shows up in search
  • The description under it
  • The preview card that shows when you drop a link in WhatsApp, X, or Slack

You only get one shot at a first impression - and this is it.

Good metadata can mean the difference between someone clicking… or scrolling past you forever.

Setting Metadata with <Head> in Next.js

Next.js App Router gives you full control over metadata through its built-in Metadata API. You don’t need any third-party SEO packages to get this right.  

Static metadata:

import { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Simple Pricing for Indie Makers | MySaaS',
description: 'Transparent pricing made for solo founders and indie makers.',
openGraph: {
title: 'Simple Pricing for Indie Makers | MySaaS',
description: 'Transparent pricing made for solo founders and indie makers.',
url: 'https://mysaas.com/pricing',
siteName: 'MySaaS',
images: [
{
url: 'https://mysaas.com/og/pricing.png',
width: 1200,
height: 630,
alt: 'MySaaS Pricing'
}
],
type: 'website'
},
twitter: {
card: 'summary_large_image',
title: 'Simple Pricing for Indie Makers | MySaaS',
description: 'Transparent pricing made for solo founders and indie makers.',
images: ['https://mysaas.com/og/pricing.png']
}
};
export default function PricingPage() {
return <h1>Pricing</h1>;
}

Dynamic metadata:

import { Metadata } from 'next';
type Props = {
params: { slug: string };
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const post = await getPost(params.slug);
return {
title: `${post.title} | My Blog`,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
url: `https://myblog.com/blog/${params.slug}`,
images: [post.image]
}
};
}
export default function BlogPostPage({ params }: Props) {
// render post content...
}

And that’s all you need to set metadata for both static and dynamic pages in Next.js.

If you’d like a deeper dive, check out this tutorial for a step-by-step walkthrough on setting up metadata - along with other key SEO optimizations - in Next.js:

SEO for Blog & Product Pages

Every major page (especially blog posts and product features) should have:

  • A unique <title>: clear, relevant, and short enough to show fully (under ~60 chars)
  • A compelling meta description: ~150 characters tops
  • Clean, descriptive URLs (like /blog/seo-for-nextjs, not /post?id=42)
  • A relevant Open Graph image: usually 1200x630px for best cross-platform preview

Social Share Previews (Open Graph & Twitter Cards)

When you paste a link into X/Twitter, LinkedIn, Slack, or Discord - those platforms don’t crawl your whole site. They just look at your Open Graph + Twitter card metadata.

To make your content look legit, always include:

  • og:title, og:description, og:image, og:url
  • twitter:card, twitter:title, twitter:description, twitter:image

You can always test your previews here:

Sitemap & Robots.txt

A sitemap is like a table of contents for your website. It lists all the important URLs you want search engines to find.

When Google crawls your site, it doesn’t automatically know every page exists. A sitemap gives it a clear list of URLs that are present on your site.

For a typical SaaS or blog, that means:

  • Your homepage
  • Pricing page
  • Blog posts
  • Docs
  • Feature pages
Always include a sitemap for your site if it has more than a few pages.

How to Create a Sitemap in Next.js

Next.js allows us to create a sitemap by simply adding a sitemap.ts file in the /app directory (or any subdirectory) and export a function that returns an array of URLs, each with optional metadata like lastModified or changeFrequency.  

import { MetadataRoute } from 'next';
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: 'https://mysaas.com',
lastModified: new Date(),
changeFrequency: 'yearly',
priority: 1.0
},
{
url: 'https://mysaas.com/pricing',
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.8
},
{
url: 'https://mysaas.com/blog',
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.7
}
];
}

Setting Up robots.txt 

The robots.txt file tells search engines what they’re allowed to crawl (and what to skip).

Create a file at /public/robots.txt with:

User-agent: *
Allow: /
Sitemap: https://yourdomain.com/sitemap.xml

This tells all crawlers:

  • They can access everything
  • Here's where the sitemap lives

Don’t block pages unless you know they shouldn't appear in search (e.g., internal dashboards).

Or you could also generate a robots.txt file using free tools online.

Submitting to Google Search Console

Once your sitemap and robots.txt are ready, the next step is to let Google know they exist.

Here’s a step-by-step video guide on how to submit your sitemap to Google Search Console and get your site indexed faster:

Creating SEO Optimized Content

If your primary planned customer acquisition channel is going to be through search, then your content not only has to solve a user's problem, but it also has to be optimized for search engines. 

There are various ways of optimizing content:

  • Focusing on a keyword you want to rank for.
  • Internal linking to relevant content (aka link juice)
  • Proper content formatting

...and many more. 

We shall be focusing on keyword researching for this one.

Keyword researching

This is the process of finding keywords and phrasing you want your site to rank for.

It involves analyzing the competition around those keywords using both free and paid tools.

Before a keyword is chosen various metrics are looked at:

  • How competitive is a keyword?
  • How much traffic does a keyword get per month?
  • Which competitors are ranking for a keyword already?
  • What's the search intent behind a keyword?

The best keywords are those with high traffic volume and low competition but finding those is like looking for a needle in a haystack so you usually have to make a trade-off.

That means you might choose low traffic volume and low competition keywords to establish your content base and improve on your domain authority before you go for the high volume keywords.

If you would love to do a deep dive into keyword research, this is a good video to check out:

Keyword search intent

Search intent is the why behind a query - what the person actually wants to do. If your page doesn’t match that why, it won’t rank (or it’ll rank and still get ignored). So before you write, decide: is this person trying to learn, compare, or buy? Then build the right kind of page and content for that job.

There are four main types of intents:

  • Informational“teach me something.” Examples: what is open graph, nextjs sitemap, how to track time in saas Best page: tutorial/guide with steps, code, and pitfalls; soft CTA.
  • Navigational“take me to a specific brand/site.” Examples: posiboo, next.js docs, stripe pricing Best page: your homepage or a clear landing page that owns your brand SERP.
  • Commercial investigation“help me choose.” (high buyer intent) Examples: best invoice app for freelancers, posiboo alternatives, x vs y Best page: comparison/alternatives list, side-by-side tables, honest pros/cons, social proof, strong CTA.
  • Transactional“I’m ready to act.” Examples: buy time tracking software, posiboo pricing, start free trial Best page: pricing or focused landing page with proof, FAQs, and friction-free CTAs.

For every keyword you choose, you should always ensure that your content serves the search intent behind that keyword.

Tools to use for keyword research

1. Google Ads (free)

Use Keyword Planner to sanity-check demand and grab related ideas straight from the source. It shows volume ranges unless you’re running ads, but that’s plenty to decide what to write.  

Google Keyword Planner

Google Keyword Planner

2. Ubersuggest (has a free tier)

Great when you’re bootstrapping - quick ideas plus rough volume/difficulty. Free tier has limits, but it’s enough for brainstorming.

Ubersuggest

Ubersuggest

3. Ahrefs (paid)

Ahrefs provides lots of data from how tough a keyword is to competitor analysis and much more. 

Ahrefs

Ahrefs

Conclusion

SEO isn’t magic - it’s momentum and consistency. As long as you keep doing the basics right, everything else will fall in place. 

Ensure:

  • Your site has no technical issues
  • Your robots.txt and sitemap.xml are present
  • Also your sitemap should be submitted to Google via Search Console
  • Your on-page SEO is actually good
  • Your focus keywords are easy to rank for - you need quick wins...

Do that a handful of times and you’ll start seeing the compounding effect: rankings → clicks → signups.

Ship that SaaS!!!

Author

J
Joshua

Software Developer