Dev.to WebDev πŸ›  Dev πŸ‘ 0 πŸ“– 6 min read

Cheapest Way to Get an Editorial Backlink in 2026? I Checked 15 Links to My Own Site First: 14 Were Nofollow

Every few days someone asks me some version of "what's the cheapest way to get an editorial backlink?" Before answering again, I wanted to know what the links that already point at one of my own sites actually look like.

Every few days someone asks me some version of "what's the cheapest way to get an editorial backlink?" Before answering again, I wanted to know what the links that already point at one of my own sites actually look like.

I run a few small launch boards. One of them, IndieHunt, gets written up on other people's sites now and then. So this morning I took four third-party pages that write about it and ran a small script over them. It counts brand mentions, lists every link to the domain, and prints the rel on each one.

Here's what came back (run on Nov 15, 2026):

Page type Brand mentions Links to my domain Followed links
"How to submit to X" guide 32 7 0
Directory listing 23 6 0
List of 80 launch platforms 2 1 0
AI company profile page 10 1 1, but the page has noindex

That's 15 links, 14 of them nofollow. The one followed link sits on a page that asks not to be indexed. None of these are bad pages. They just show that "someone wrote about my product" and "I have an editorial backlink" are not the same thing.

So here's every low-cost route I know of, with the prices from each service's own page as of today, and what you actually get from each one.

The script first, because you'll want it for every route below

Save as mention-check.mjs and run it on Node 18+:

// usage: node mention-check.mjs <your-domain> <brand> <url> [url...]
const [domain, brand, ...pages] = process.argv.slice(2);
const strip = (h) => h
  .replace(/<script[\s\S]*?<\/script>/gi, " ")
  .replace(/<style[\s\S]*?<\/style>/gi, " ")
  .replace(/<[^>]+>/g, " ");

for (const url of pages) {
  const res = await fetch(url, { headers: { "user-agent": "Mozilla/5.0 (mention-check)" } });
  const html = await res.text();
  const mentions = strip(html).toLowerCase().split(brand.toLowerCase()).length - 1;
  const ours = [...html.matchAll(/<a\b[^>]*>/gi)].map((m) => m[0]).filter((a) => {
    const href = (a.match(/href\s*=\s*["']([^"']+)["']/i) || [])[1] || "";
    try { const h = new URL(href, url).hostname; return h === domain || h.endsWith("." + domain); }
    catch { return false; }
  });
  const robots = (html.match(/<meta[^>]+name=["']robots["'][^>]*>/i) || [""])[0];
  const noindex = /noindex/i.test(robots) || /noindex/i.test(res.headers.get("x-robots-tag") || "");

  console.log(`${url}\n  status ${res.status}${noindex ? "  NOINDEX" : ""}  mentions ${mentions}  links ${ours.length}`);
  for (const a of ours) {
    const rel = (a.match(/rel\s*=\s*["']([^"']*)["']/i) || [])[1];
    const followed = !/nofollow|sponsored|ugc/i.test(rel || "");
    console.log(`    rel="${rel || ""}"  ${followed ? "FOLLOWED" : "not followed"}`);
  }
  if (mentions > 0 && ours.length === 0) console.log("  -> UNLINKED MENTION");
}

Run it like this:

node mention-check.mjs yourdomain.com "YourBrand" https://some-page.com/review https://other-page.com/list

It's regex, not a real HTML parser, and it only sees the HTML the server sends. If a page builds its links with JavaScript, the script will report zero links. In that case, open DevTools and check the rendered anchor yourself. I wrote about the same kind of curl check across 48 backlink pages last week, if you want the canonical and noindex side too.

1. Journalist-request lists: free, slow, and the journalist decides about the link

HARO is gone. Cision shut down Connectively, the renamed HARO, on December 9, 2024. These are what people use now:

  • Source of Sources (SOS): free. Up to three emails a day with journalist queries, and you reply to the reporter directly. It's run by Peter Shankman, who started HARO. The rule is strict: pitch off-topic once and you're removed.
  • Qwoted: the Basic plan is free, with 2 pitches a month and a 2-hour delay before your pitch is delivered. Pro is $149.99/mo, or $1,188/yr, for 35 pitches a month (their pricing page).
  • Featured: has a free plan. Lite is $39/mo and Pro is $99/mo.

Cost per link here is mostly your time. You write a real answer and most of them go nowhere. When one does land, the writer decides whether to link at all and the publication decides the rel. A quote in a big outlet is great for credibility. Just don't budget it as a backlink until you've run the check above on the live article.

2. Unlinked mentions: free, and the best odds per hour

If a page already names you without linking, the writer already likes you. The ask is tiny: "you mention us here, would you mind linking the name?"

Feed the script pages that mention your brand and it flags UNLINKED MENTION. My four pages had none. Every one of them linked, it just wasn't followed. Changing a nofollow is a much harder ask, because that's usually a sitewide template decision and not up to the person who wrote the page. I'd only ask about it when the page is clearly editorial and the site's other outbound links are followed.

There's a longer walkthrough of how to find unlinked mentions and turn them into links on the IndieHunt blog (my site).

3. Guest posts: free in cash, expensive in time

You write a full article for someone else's blog. The host owns the page, picks the anchor, and sets the rel. Some sites follow author-bio links, some nofollow everything in a guest post, and some quietly change the rule a year later. Ask before you write. Then check the live page with the script after it's up, because what you were told and what the template outputs don't always match.

This route works when you have a real story for that site's readers. It doesn't work as a link tactic dressed up as a post.

4. A published placement: you pay, and you see what goes live

The last route is paying a site to publish an article about your product. Be clear about what that is: a published placement. You're paying for a page. It's not an earned link, and nobody should call it one.

Disclosure: I run one of these. On Lede Press, a small press site I run, the pricing page lists three options:

  • Free with a site credit: one page per project if your site links back to it (a plain text link is enough). The site says the product link is dofollow.
  • Free nofollow: one page per project with no site credit, and the product link uses rel="nofollow".
  • $29 a page: no link-back needed, and you get an editing pass and structured data on the page.

Both free options share five slots a day that open at 08:00 UTC. What I'd tell anyone using any paid option, including mine, is to run the script on the live page. Confirm the rel, confirm there's no noindex, and judge it as a page about your product, not as a promise about rankings. Nobody can honestly promise you rankings.

How I'd spend a $0 month

  1. Week 1: run the script over every page that mentions you and send polite asks for any unlinked mentions.
  2. Every day: skim SOS, and answer only the queries you can actually help with.
  3. One guest post, only if you have a story that site's readers would want anyway.
  4. Then decide whether a $29 page or a free one with a site credit is worth it for you, after checking a live page on that site with the script.

Most of the links pointing at me turned out to be nofollow. That doesn't make them useless, since people still click them. It does mean the cheapest editorial backlink is usually one you've already earned and just haven't asked about yet.

What does the script say about pages that mention you? I'm curious whether anyone gets a better ratio than 1 in 15.

πŸ“° Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.