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
Publish the post on your own site and make sure it is reachable without login.
Prepare each copy with the canonical URL of that original, using the kit below.
Add one visible line at the end of each copy that links to the original.
Publish the copies yourself, one platform at a time, and check the canonical tag in each page’s source.
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.
| Topic | DEV | Hashnode | Medium |
|---|---|---|---|
| Canonical link | canonical_url in the post’s front matter | Mapped from front matter on Pro’s bulk import; check the setting in the editor for single posts | Added by the import tool, or set by hand as originally published elsewhere |
| Import | RSS or Atom feed, with an option to mark the source as canonical | Bulk Markdown import on Pro | Import a story from a URL |
| API | Public API; canonical_url is a field, posts start as drafts | GraphQL API on Pro only since May | Not covered in the help pages we read |
| Your own domain | No, posts live on DEV | Yes, with Pro since June; earlier setups are grandfathered | Not covered in the pages we read |
| Ownership | You certify you have the rights; DEV may remove any post | Your content stays yours; license only to run the service | You keep your rights and give Medium a broad license on its services |
| Promotion | Not primarily promotion or backlinks; substantial content | No posting mainly for self-promotion | Not primarily to drive traffic to an external product |
| Short link posts | Not allowed: a post must contain the full content | Original or clearly attributed work | Cross-posting allowed if you own the rights |
| How posts get seen | DEV’s community feed | Ranked home feed; posts on custom domains get a small boost | Followers first; curators pick stories for wider distribution |
| Cost to publish | Free | Free blog; Pro for domain, API and backup | Free to publish |
| Best for a launch post | Reaching developers | Being the home of your blog | Reaching 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.
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.
- Start with the problem. What was hard, for whom, and why the usual fixes did not work.
- Show how you built it. Decisions, trade-offs, code or architecture that another developer can reuse.
- Share what you learned. What surprised you, what you would do differently, with numbers you own.
- Link your product once. One clear link where it helps the reader, and a disclosure for any affiliate link.
- 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.
| Rule | Official wording | What it means for you |
|---|---|---|
| Canonical is a strong signal | rel="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 otherwise | Even 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 syndication | The 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 copies | The 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 field | canonical_url: link for the canonical version of the content | Set canonical_url to your original in every cross-post. |
| DEV tags | tags: max of four tags, needs to be comma-separated | Choose 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 API | canonical_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 policy | Users 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 link | Posts 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 DEV | Users agree and certify that they have rights to share all content that they post on DEV Community | Only cross-post what you wrote or may share. |
| DEV may remove posts | DEV Community may remove any content users post for any reason. | Keep the original on your site; the copy is a bonus. |
| Ownership on Hashnode | Everything you publish is yours. We only host and display it to operate the platform. | Your posts stay yours. |
| Hashnode license ends | This license continues until you remove your User Content or delete your account | Delete the post or account and the license ends. |
| Self-promotion on Hashnode | using the platform primarily for self-promotion without contributing to the community | Contribute something beyond the launch itself. |
| Custom domain on Hashnode | Custom 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 import | We 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 stay | Publications 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 API | Every API request, queries and mutations, now requires a Pro plan on your publication. | Automated publishing to Hashnode needs Pro. |
| Hashnode feed | Posts on custom domains get a small boost. | Posts on custom domains are favored slightly in the feed. |
| Medium import | Using 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 work | You 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 hand | select 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 Medium | You retain your rights to any content you submit, post or display on or through the Services. | You keep the rights to your story. |
| Medium license | you grant Medium a nonexclusive, royalty-free, worldwide, fully paid, and sublicensable license | Medium 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 rule | Posting content primarily to drive traffic to, or increase the search rankings of, an external site, product, or service | A story that only funnels readers to your product counts as misuse. |
| Medium baseline reach | This 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 curators | Our 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.
Sources
Every rule and number on this page comes from the platforms’ own public pages, read on October 1, 2026 without signing in.
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