Yahoo!ニュースの記事には、それぞれ掲載期間があります。情報提供元によって具体的な期間は異なるものの、公開から数週間程度経つとその記事は削除され、閲覧できなくなってしまうことがほとんどです。
掲載期間を過ぎると、記事は削除されて読めなくなります。
Yahoo!ニュースヘルプ
その際には、タイトルや情報提供元といったメタデータもろとも消え失せ、「指定されたURLは存在しませんでした」という404エラーページしか表示されません。ですので、Web上に存在するYahoo!ニュースの記事へのリンクは、ほとんどがリンク切れ状態にあると言えるでしょう。
情報の永続性が保たれないことは読者の共有・参照の意図に反する設計であり、報道に関わるサービスとしてこういった運用を行っているのはどうかしていると私には感じられますが、きっと大人の事情があるのでしょう。
一応、SNSやはてなブックマーク等のWebサービスでそのURLを検索することで、情報提供元で公開され続けているその記事を見付け出すための手掛かりを得ることは不可能ではありません。また、WayBack Machineのようなアーカイブサービスやキャッシュサービスを頼るというのも手でしょう。
しかし最もよいのは、誰もがこの醜い仕様を理解し、そもそもYahoo!ニュースの記事URLを共有せず、元サイトで公開されている同じ記事のURLを共有するようにする、ということでしょう。元サイトで公開されている記事の方が、大抵の場合は長生きしますから。
しかしこれには手間がかかります。Yahoo!ニュースの各記事に元記事へのリンクが張られているようなことは、残念ながらありません。その記事のタイトルでGoogle検索を行うなどして探す手間がかかります。(やはり醜いですね。)
というわけで今回私は、Google検索の省力化として、Yahoo!ニュースの記事タイトルに検索結果へのリンクを付与するユーザースクリプトを開発しました。
// ==UserScript==
// @name yahoo-original-news
// @version 0.1.0
// @description https://okayurisotto.net/posts/20251106_yahoo-original-news/
// @author okayurisotto
// @match https://news.yahoo.co.jp/articles/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=news.yahoo.co.jp
// @grant none
// ==/UserScript==
"use strict";
(() => {
const titleHeader = document.querySelector("h1.lljVgU:not(:empty)");
if (!(titleHeader instanceof HTMLElement)) {
throw new Error("記事タイトルが見つかりませんでした。");
}
const title = titleHeader.textContent;
const siteLink = document.querySelector("a.hwTpfV[href]");
if (!(siteLink instanceof HTMLAnchorElement)) {
throw new Error("元サイトへのリンクが見つかりませんでした。");
}
const siteOrigin = new URL(siteLink.href).origin;
const query = `${title} site:${siteOrigin}`;
const searchUrl = new URL("https://www.google.com/search");
searchUrl.searchParams.set("q", query);
// 記事タイトルの書かれた見出しの中身をリンクに置き換える
titleHeader.innerHTML = `<a href="${searchUrl}" target="_blank" rel="noopener noreferrer">${title}</a>`;
})();
このユーザースクリプトを使えば、毎回記事タイトルをコピペする必要がなくなるだけでなく、site:検索演算子による絞り込みで元記事を見つけやすくもなります。
本当は、検索結果最上位の記事のURLをリンクに使うなど、利便性を追求したいところではありましたが、ユーザースクリプトの範囲で実現したいことや、検索結果ページの自動操作(スクレイピング)について規約上の懸念があることなどから見送りました。技術者倫理を投げ捨てるのであれば、もっとやりようはあると思います。(Yahoo!ニュースの各記事のURLとメタデータを控えておく、という方法だってあるわけですしね。)