{
  "id": 2332440,
  "title": "Cross-posting to dev.to without giving away your SEO",
  "url": "https://urgent.news/2026/08/21/cross-posting-to-dev-to-without-giving-away-your-seo",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-21T07:43:05.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/mk023/cross-posting-to-devto-without-giving-away-your-seo-5gd"
  },
  "original_language": "en",
  "account": "I write my articles first on my site, then publish a copy on dev.to a day or two later. This strategy gets my work more readers than if I just left it on my own site. However, dev.to's analytics don't accurately reflect how many readers see the article here. So, I publish my best work on dev.to, a site with more traffic, using a domain I don't own.\n\nThe key to this strategy is a field in the dev.to API called canonicalDi. It's not something you set, but an order you must maintain. Search engines have to choose one URL to rank and treat as the original when two URLs serve the same article. By setting the canonical URL, dev.to knows which one is the original. Setting the canonical URL is a hint, not a directive. Google considers it just one signal among many, with the date being the other important factor.\n\nMy workflow ensures the canonical URL must exist before the mirror goes live. I enforce this by refusing to publish until the canonical URL is set correctly. The cron job runs daily at 07:00 UTC and flips the articles' publication dates when their day arrives. The human decision is the merge, and once that happens, there's nothing left to do.\n\nHowever, I once published an article manually on dev.to weeks before its scheduled publication date. This created a problem because my own site's JSON-LD used the frontmatter date, making it appear as though the article was published earlier than it actually was. The issue was resolved by a one-line change to the date in the frontmatter.\n\nThe slug, which is used to build the URL, is validated before anything else. This check ensures no unwanted characters are included, and it costs only one line of code. The script never republishes the same article, as it checks for existing articles with the same canonical URL. The slug is validated before any other step, ensuring a clean and efficient publishing process.",
  "summary": "Every article I write lives on my own site first. A copy goes up on dev.to a day or two later, and that copy reliably gets more readers than the original does. One piece has 106 views over there. My own analytics can't honestly tell me how many humans read it here, which is a separate mess I wrote about last week. So I am deliberately publishing my best work somewhere with more traffic than my…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}