SEO With No Backlinks Achieved

7/2024 Aman Azad

SEO with no backlinks achieved

Video Walkthrough

Table of Contents

Can you get traffic from Google without ANY SEO gimmicks? Write content → Google traffic?

Yes.

I’ll walk you through setting up a topical cluster, how I write my content, and how I set up my site to get these results.

I started this SEO experiment a few months ago. My hypothesis was if strictly building a topical cluster, a comprehensive information map of one particular subject - no backlinks, no programmatic SEO, just a few well crafted content pieces - I would start to get page visits.

~1mill impressions

~1k visitors/mo

~26 landing pages

results channels

Google is a blackbox for obvious reasons - they can’t give up their secrets or the entire SEO industry becomes non-existent.

My best guess as for an explanation of these results…

  • Well researched keywords (answerthepublic.com is 🐐)
  • Good, compelling writing (no AI filler, well written content)
  • Clear sitemap and internal linking structure in the website
  • Very, very fast site (all static content, NextJS + Vercel ❤️)

Let’s go through each in detail.

What is a topical cluster?

I think the simplest way to describe a topical cluster is as follows - a topical cluster is a comprehensive, definitive guide on a particular subject.

The way I think about a topical cluster is like a tree of content - we have one “parent” branch, with several “child” branches.

topical cluster

Our goal here is to show Google we have the definitive answer on a particular subject — the subject is what we’re interested in ranking for.

Let’s walk through an example.

For example, let’s try to rank our fintech SaaS product. We’ll go with looking to provide a topical cluster on our particular niche like “cash advances”.

Our 3 steps —

  1. Do some preliminary research
    1. What are the 4 to 5 major questions someone might have around cash advances? Ie what are the questions I have to answer?
    2. What are the searches that maximize traffic, and minimize keyword difficulty? Ie if/what are the unanswered questions?
  2. Map out the topical cluster
    1. Define a rough outline for the parent landing page
    2. Define rough outlines for each child page
  3. Write the content

A bit more of the research phase.

ChatGPT and common sense will get us the general list of topics we’ll need to cover.

Here’s a prompt that should get a good v1 of our cluster done:

I'm writing an SEO topical cluster for the keywords "cash advance" what
are some questions I would need to address to make sure I have a fleshed
out content strategy here?

To find the more niche questions to dive into, answerthepublic.com is excellent. Inputting our topic “cash advance” gives us this wheel below. We’ll get a report with a list of questions, the phrases being searched, and the corresponding traffic data.

answerthepublic

We’ll want to find a maximum of the search volume, and a minimum of the CPC listed for each query. A high CPC is a great proxy for understanding how competitive a keyword or phrase is. We can repeat this for the prepositions section as well to round out our research.

Tips on writing for SEO

Write the answers you’d want Google to give you.

google

The Vercel blog is a great example to dive into. Note the style of writing used here - clear, concise, encyclopedic almost, and confident. Vercel answered this question so well their AI is using it as it’s first reference point.

This is what Google wants because, and most importantly, this is what the people want.

Into the code - Building an automated sitemap.xml

Using NextJS and Vercel, we can easily create a custom endpoint to serve our sitemap.xml. The code below is an endpoint to automatically generate our sitemap. My particular site used a custom built CMS leveraging Prisma and a SQL database, but this can easily be replaced with your CMS of choice - Sanity, Contentful, WP, etc.

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse,
) {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/xml')

  // Instructing the Vercel edge to cache the file
  res.setHeader('Cache-control', 'stale-while-revalidate, s-maxage=3600')

  const programmaticPages = await prisma.textContent.findMany({
    select: {
      slug: true,
      category: true,
      createdAt: true,
      updatedAt: true,
    },
  })
  const pagesXml = programmaticPages.map((page) => {
    const dateYYYYMMDD = new Date(page.updatedAt || page.createdAt)
      .toISOString()
      .slice(0, 10)
    return `<url>
      <loc>${SITE_URL}/${page.category}/${page.slug}</loc>
      <lastmod>${dateYYYYMMDD}</lastmod>
    </url>`
  })

  // generate sitemap here
  const xml = `<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
      <url><loc>${SITE_URL}/explore</loc><lastmod>2023-05-11</lastmod></url>
      <url><loc>${SITE_URL}/explore-all</loc><lastmod>2023-05-13</lastmod></url>
      ${pagesXml.join('')}
    </urlset>
  `

  res.end(xml)
}

I’m not 100% sure the efficacy of sitemaps, but we’re able to get this easily set up and it is a programmatic way for Google to quickly understand the totality of our site.

Into the code - Why site performance matters, and how to optimize it

Core web vitals, the performance metrics Google uses as a factor when ranking your site, is publicly available if you already have a good amount of traffic.

https://developer.chrome.com/docs/crux/dashboard

Here’s the dashboard for an example site:

dashboard

CWV is a key aspect of differentiation in SEO. Most content will be generally commoditized unless our writing is exceptional. Performance is an easy, technical win we can score in the SEO algorithms.

Again the combo of NextJS and Vercel gives us the most levers and knobs to optimize performance when we’re using our CMS.

Notice this line in the code snippet above:

// Instructing the Vercel edge to cache the file
res.setHeader('Cache-control', 'stale-while-revalidate, s-maxage=3600')

We’ll want to leverage caching whenever possible to improve the speed of our site. NextJS 14 now ships with more granular cache controls out of the box. In addition, we can build our site 100% statically, and deploy it on Vercel’s CDN. This’ll be the fastest way to get our site to users, and the Google bot’s, hands.