I spent two days trying to get real backlinks for a side project. Not buying them, not spamming forums — the legitimate stuff: publish an article, submit to a directory, list the product somewhere.
Before committing to each one, I checked what HTML the platform actually emits for an outbound link. That check took about thirty seconds per site and saved me most of a week, because the majority of "great dofollow backlink sources" recommended in 2026 blog posts emit rel="nofollow".
Here is the whole table, and the method, so you can run it yourself instead of trusting anyone's list — including mine.
For most sites, curl is enough:
curl -sS -L "https://platform.com/some-page" | grep -o '<a [^>]*yourdomain[^>]*>'
If the tag comes back with only noopener and/or noreferrer, the link is dofollow — those two are browser security hints and mean nothing to search engines. If you see nofollow, the link passes no weight. If you see ugc, it is a hint that this is user-generated content and Google discounts it.
Two things that will bite you:
Use grep -o ... | wc -l, not grep -c. Minified HTML ships on one line, so grep -c counts lines containing a match and returns 1 whether the page has zero links or a hundred.
Many platforms block curl. PyPI, Crunchbase, AlternativeTo and Medium all returned 403s or bot challenges for me. For those, open the page in a browser and run this in the console:
Array.from(document.querySelectorAll('a[href]')) .filter(a => /yourdomain/.test(a.href)) .map(a => a.rel || '(empty)')
Checked 17–18 September 2026. Platforms change these policies without telling anyone, so treat this as a method demonstration, not a permanent reference.
|
Platform |
|
|---|---|
|
Dev.to (in-article link) |
|
|
PyPI (project Homepage) |
|
|
Substack (in-post link) |
empty |
|
Blogspot (in-post link) |
empty |
|
CSS Design Awards |
mostly empty — but submission is $50 |
|
Small niche blogs in my vertical |
empty or |
|
Platform |
|
|---|---|
|
Hashnode |
|
|
SaaSHub |
|
|
AlternativeTo |
|
|
Indie Hackers |
|
|
Awwwards |
|
|
SiteInspire |
|
|
Uneed |
|
|
Habr |
|
ugc)|
Platform |
|
|---|---|
|
Product Hunt ("Visit website") |
|
|
HackerNoon (in-article link) |
|
|
Dev.to (profile website field) |
|
1. Hashnode is recommended everywhere as a dofollow platform. It is not.
Every "where to get backlinks" list I read said to cross-post to Hashnode with a canonical pointing at your original. I wrote a whole article for it before checking. The published page emits nofollow ugc. The article is fine — people read it — but as a link it does nothing.
Worse, the canonical advice is self-defeating even where the link is good: a canonical tag tells Google the original lives elsewhere, so the copy tends to drop out of the index, taking its outbound links with it.
2. I checked the wrong links on one platform and gave myself a false positive.
On a large publishing platform I counted rel across every external link on a random article and saw clean noopener noreferrer. Great, I thought. Then I published there and checked my own article:
<a href="https://api.platform.com/v2.8/redirect?to=https%3A%2F%2Fmysite.com&postId=..." rel="nofollow noopener">
Author-placed links are wrapped in a redirect and marked nofollow. The clean links I had counted were the platform's own. Check the link a user placed in the body, not every link on the page.
3. "Best dofollow directories" lists are written by directories.
Several launch directories are recommended as free dofollow backlinks. What the lists leave out is the condition. On the free tier:
Paid tiers remove the requirement, at $19–40/month or $29–50 one-time.
So the free option is a reciprocal link exchange, and the paid option is buying a link. Google's guidelines name both as link schemes. And the free version costs you an outbound link from your homepage — the strongest page you have — in exchange for a link that reciprocity discounts anyway.
4. One site on my list had been dead for a while.
A gallery I planned to submit to now serves a domain-parking page. My first check had counted the links on that parking page and marked it dofollow. Check that the site still exists before you check its rel.
Two links, in two days, out of about twenty candidates:
A technical article on Dev.to, with a clean in-body link. Free, no reciprocity, no badge, no fee.
A PyPI package. I extracted the reusable half of a tool I had already written — composing 1000×1500 Pinterest images and ordering a publishing queue from a Search Console export — cleaned it up and published it as pinforge. The Homepage field in the package metadata renders as a link on the project page, on a domain that is about as established as they come. That one took an afternoon, and unlike a directory listing it leaves behind something people can actually install.
Everything else was nofollow, ugc, dead, paid, or wanted a badge on my homepage.
The site I was doing all this for is a tarot reference in four languages — tarot-magic.com, 312 card pages, React and Supabase. Its referring-domains count in Ahrefs says 367.
Almost every one of those 367 is a spam network — buybacklinks.agency, seolinkpro.shop, that family. They found the domain on their own, they all point at it, and the Domain Rating is 0. Three hundred and sixty-seven links, zero effect.
That number is the reason I stopped optimizing for link count. A day of checking rel produced two links that are worth something, and the knowledge that eight of the platforms everyone recommends are worth nothing. Both results are useful. The second one is probably more useful.
Run the one-liner before you write the article, not after.