Writing platforms

DEV vs Hashnode vs Medium

You shipped something and wrote about it. Now you want developers to read it without giving away the search credit of the original. Here is how DEV, Hashnode and Medium handle republished posts, who owns what, which rules apply to launch posts, and a kit that prepares your cross-posts in your browser.

Short answer

  • Publish the original on your own site first. All three let you point back to it with a canonical link; Hashnode and Medium say in their terms that your words stay yours.
  • DEV is the developer community of the three, with a canonical_url field, an RSS import and a public API that accepts the canonical URL.
  • Medium reaches beyond developers. Its import tool adds the canonical link and the original date for you.
  • Hashnode is strongest as the home of your blog. This year, custom domains, GitHub backup and the API moved to its paid Pro plan.

Keep the original yours

A canonical link tells search engines which copy is the original. Google calls it a strong signal, not an order: it may still choose a different copy.

For syndicated copies, Google says the most effective solution is that partners block indexing of the copy. None of the three help pages we read offers that switch for a single post, so the canonical link plus a visible link back is what you can control.

That is why the order matters: the original lives on your domain and is published first, and every copy names it.

The order that works

  1. Publish the post on your own site and make sure it is reachable without login.

  2. Prepare each copy with the canonical URL of that original, using the kit below.

  3. Add one visible line at the end of each copy that links to the original.

  4. Publish the copies yourself, one platform at a time, and check the canonical tag in each page’s source.

Notes on launching SaaS products on directories →

Which one for you

Three questions. The answer stays in your browser.

Side by side

What each platform does with a republished launch post, from their own docs and terms.

TopicDEVHashnodeMedium
Canonical linkcanonical_url in the post’s front matterMapped from front matter on Pro’s bulk import; check the setting in the editor for single postsAdded by the import tool, or set by hand as originally published elsewhere
ImportRSS or Atom feed, with an option to mark the source as canonicalBulk Markdown import on ProImport a story from a URL
APIPublic API; canonical_url is a field, posts start as draftsGraphQL API on Pro only since MayNot covered in the help pages we read
Your own domainNo, posts live on DEVYes, with Pro since June; earlier setups are grandfatheredNot covered in the pages we read
OwnershipYou certify you have the rights; DEV may remove any postYour content stays yours; license only to run the serviceYou keep your rights and give Medium a broad license on its services
PromotionNot primarily promotion or backlinks; substantial contentNo posting mainly for self-promotionNot primarily to drive traffic to an external product
Short link postsNot allowed: a post must contain the full contentOriginal or clearly attributed workCross-posting allowed if you own the rights
How posts get seenDEV’s community feedRanked home feed; posts on custom domains get a small boostFollowers first; curators pick stories for wider distribution
Cost to publishFreeFree blog; Pro for domain, API and backupFree to publish
Best for a launch postReaching developersBeing the home of your blogReaching readers beyond developers

Cross-post kit

Fill in the original URL and title. The kit writes DEV front matter with your canonical URL, the Medium and Hashnode steps and a link-back line. It runs in your browser, sends nothing and publishes nothing.

The kit prepares text only. You publish each copy yourself, in your own accounts.

UTM builder for your launch links →

A launch post they welcome

All three platforms turn away posts that exist mainly to promote something. A launch post works when readers learn something even if they never click your link.

  1. Start with the problem. What was hard, for whom, and why the usual fixes did not work.
  2. Show how you built it. Decisions, trade-offs, code or architecture that another developer can reuse.
  3. Share what you learned. What surprised you, what you would do differently, with numbers you own.
  4. Link your product once. One clear link where it helps the reader, and a disclosure for any affiliate link.
  5. Answer in the comments. Stay around on launch day; the conversation is where community posts come alive.

How to launch on Show HN →
Launch announcement email templates →
Distribution for open source maintainers →

Rules in their own words

The canonical, ownership and promotion rules quoted from Google, DEV, Hashnode and Medium, with what each means for your launch post.

RuleOfficial wordingWhat it means for you
Canonical is a strong signalrel="canonical" link annotations: A strong signal that the specified URL should become canonical.A canonical link usually works, but it is a signal, not a command.
Google may choose otherwiseEven if you explicitly designate a canonical page, Google might choose a different canonical for various reasons, such as the quality of the content or technical signals.Check later which copy Google shows; the original should be your best version.
Google on syndicationThe canonical link element is not recommended for those who want to avoid duplication by syndication partners, because the pages are often very different.For copies on other sites, Google prefers another method.
What works best for copiesThe most effective solution is for partners to block indexing of your content.Not indexing the copy is strongest; on these platforms you rarely control that.
DEV canonical fieldcanonical_url: link for the canonical version of the contentSet canonical_url to your original in every cross-post.
DEV tagstags: max of four tags, needs to be comma-separatedChoose your four best tags.
DEV RSS import<link>: canonical_url, only used if the "Mark the RSS source as canonical URL by default" option is enabled in the RSS Settings.Turn this option on, or the imported post has no canonical link.
DEV APIcanonical_url: If this post was originally published elsewhere, specify the canonical URL to maintain SEO integrity.Scripts can set the canonical URL too.
DEV content policyUsers must make a good-faith effort to share content that is on-topic, of high-quality, and is not designed primarily for the purposes of promotion or creating backlinks.Write for the reader first; a post that is mainly an ad can be removed.
Full post, not a linkPosts must contain substantial content — they may not merely reference an external link that contains the full post.Paste the whole text, not a teaser that points to your site.
Your rights on DEVUsers agree and certify that they have rights to share all content that they post on DEV CommunityOnly cross-post what you wrote or may share.
DEV may remove postsDEV Community may remove any content users post for any reason.Keep the original on your site; the copy is a bonus.
Ownership on HashnodeEverything you publish is yours. We only host and display it to operate the platform.Your posts stay yours.
Hashnode license endsThis license continues until you remove your User Content or delete your accountDelete the post or account and the license ends.
Self-promotion on Hashnodeusing the platform primarily for self-promotion without contributing to the communityContribute something beyond the launch itself.
Custom domain on HashnodeCustom domains. Map your own domain to your blog, with the www variant if you want it.Your own domain is a Pro feature now.
Hashnode bulk importWe map your titles, tags, canonical URLs, and original publish dates straight from the frontmatter.Canonical URLs come along when you import Markdown on Pro.
Earlier setups stayPublications with any of these set up before Pro launched are grandfathered, so nothing changes for you.If you mapped a domain before Pro, it keeps working.
Hashnode APIEvery API request, queries and mutations, now requires a Pro plan on your publication.Automated publishing to Hashnode needs Pro.
Hashnode feedPosts on custom domains get a small boost.Posts on custom domains are favored slightly in the feed.
Medium importUsing the import tool will automatically backdate the post to the original date, as well as add a canonical link to make sure your SEO won't be penalized.The import tool sets the canonical link and the original date for you.
Import only your own workYou may only import content from other sites for which you have the right to do so.Import posts you have the right to republish.
Medium canonical by handselect This story was originally published elsewhere. Enter your link and click Save canonical link.For pasted stories, set the canonical link in More settings.
Ownership on MediumYou retain your rights to any content you submit, post or display on or through the Services.You keep the rights to your story.
Medium licenseyou grant Medium a nonexclusive, royalty-free, worldwide, fully paid, and sublicensable licenseMedium may show and distribute it across its services.
Cross-posting on Medium(You are allowed to cross-post content from your blog to Medium, provided you own the rights for the content.)Republishing your own blog post is explicitly allowed.
Medium spam rulePosting content primarily to drive traffic to, or increase the search rankings of, an external site, product, or serviceA story that only funnels readers to your product counts as misuse.
Medium baseline reachThis is the baseline category for any story on Medium which does not violate Medium rules.Every story that follows the rules reaches your followers.
Medium curatorsOur human curation team reviews stories seven days a week to identify stories to Boost across the Medium homepage, emails, apps, and more.Wider reach is a human decision; write the story you would want to read.

Where LaunchRepo fits

LaunchRepo turns your repository into a launch kit that your own coding agent uses in your own Chrome: listing texts, a launch plan with dates and a record of where you stand on each platform.

It does not publish blog posts for you. Use the kit above for your cross-posts and keep the original on your own site.

G2 vs Capterra →

Sources

Every rule and number on this page comes from the platforms’ own public pages, read on October 1, 2026 without signing in.

SourcePage updatedChecked
DEV Community: Editor Guideno date shown
DEV Community: Publishing from RSS or Atomno date shown
DEV Community: Terms of Useno date shown
Forem API V1 (DEV)no date shown
Hashnode Terms of Use
Hashnode Code of Conduct
Hashnode changelog: Introducing Hashnode Pro
Hashnode changelog: GraphQL API is moving to a paid offering
Hashnode changelog: Feed and discovery
Medium Help: Importing a post to Mediumno date shown
Medium Help: Set a canonical linkno date shown
Medium Terms of Service
Medium Rulesno date shown
Medium’s Distribution Guidelines
Google Search Central: How to specify a canonical URL
Google Search Central: Fix canonicalization issues

FAQ

Should I publish a launch post on DEV, Hashnode or Medium?
Publish it on your own site first, then cross-post. DEV reaches developers, Medium reaches a wider audience, and Hashnode works best as the home of your blog.
Does cross-posting hurt my SEO?
Not usually. Publish on your own site first and link back from each copy; Google’s own guidance prefers noindex on syndicated copies over a canonical link, and it may still pick another version, so make the original your best version.
How do I set a canonical URL on DEV?
Add canonical_url to the post’s front matter, for example with the kit on this page. For RSS imports, enable marking the RSS source as the canonical URL in DEV’s settings; through the API, send canonical_url with the article.
Does Medium add a canonical link automatically?
Yes, when you use Import a story. For a story you paste yourself, choose This story was originally published elsewhere in More settings and save the link.
Is a custom domain still free on Hashnode?
For new setups, no: since June, custom domains are part of Hashnode Pro. Blogs that mapped a domain before Pro launched keep it.
Who owns my post on these platforms?
You do. Hashnode and Medium say so in their terms and take a license to run their services; DEV asks you to certify that you have the rights to what you post.

Plan the rest of your launch

LaunchRepo gives your coding agent a launch plan and the listing texts for each platform. You decide what it may send on its own.

See pricing