シングルで重複コンテンツを比較・判定
この重複コンテンツチェッカーは、連続する単語のまとまりを使って2つの文章を比較し、分かりやすい類似度を返します。大文字・小文字や句読点を正規化したうえで各文章のフレーズ集合を作り、Jaccard係数で重なりを測定します。シングルの語数と、重複の可能性ありと判定する割合はご指定いただけます。結果は決定的で検証しやすく、公開前のランディングページ、商品説明、配信記事などの確認に適しています。
無料で実行
ワードシングルの類似度から分かること
シングルとは、文章内で連続する短い単語列です。語数を3にすると、文から1〜3語目、2〜4語目という順でまとまりを作ります。本ツールは両方の文章から集合を作成し、共通するまとまりの数を、いずれかに存在する一意なまとまりの総数で割ります。このJaccard計算が類似度になります。単語自体が変わらない大文字・小文字や句読点の違いは無視しつつ、一致する一節を評価します。そのため、単語の出現回数だけを比べる方法よりも有用です。一般的な語彙を使っていても、同じ局所的な順序で並ばなければ一致にはなりません。ただし、この数値が示すのは文章表現の重なりであり、検索エンジンによるペナルティの予測ではありません。高い値は多くの表現が再利用されており、編集者の確認が望ましいことを示します。低い値は逐語的な表現が異なることを示しますが、独自性、正確性、有用性、公開の適否を保証するものではありません。
語数と判定しきい値の選び方
初期値の3語は、一般的なウェブ文章に適した出発点です。語数を小さくすると短い共通部分まで検出できますが、無関係なページにも自然に現れる定型表現を数える可能性が高まります。語数を大きくすると長い逐語的一致が必要になるため偶然の一致は減りますが、少し言い換えた箇所を見逃すことがあります。異なる語数で算出した値は直接比較できないため、割合を解釈する前に語数を決めてください。重複しきい値は返される判定だけを制御し、類似度の計算自体は変えません。70に設定した場合、70パーセント以上が重複の可能性ありとなります。1つの値を普遍的なSEO規則とせず、ご自身のコンテンツ例で調整してください。複数の組を比較するときは同じ設定を維持します。また、各文章には指定した語数以上の正規化済み単語が必要です。短い場合は、人為的で誤解を招く割合を返さず、入力エラーとして処理します。
結果を編集上の判断に生かす方法
類似度は、レビュー工程で候補を絞るための指標としてお使いください。近い検索意図を狙うページ、同じカタログから作ったテンプレート、原資料と執筆原稿などを比較します。重複の可能性が示されたら、両方の文書を読み、共通シングルが生じた理由をご確認ください。ナビゲーション、法的表示、仕様、定型の行動喚起は正当な繰り返しの場合があります。一方、導入、説明、利点、結論まで一致している場合は、見直す理由が強くなります。正確さが必要な事実は維持しながら、各ページが固有の読者意図に応えるよう構成と表現を改めます。再現可能な監査記録が必要な場合は、語数としきい値も結果と一緒に保存してください。本ツールが1回に処理するのは正確に2つの文章です。URLの巡回、公開ウェブの検索、原著者の特定、検索順位の決定は行いません。サイト全体では、意味のある候補ペアを先に選び、同じ設定で比較し、高い値から人が確認してください。自動的な削除やリダイレクトの判断には使用しないでください。
活用例
類似するランディングページの確認
近いキーワードを対象とするページを比較し、不要な繰り返しになっている箇所を見つけます。
仕入先の商品説明の確認
修正後の商品説明が、メーカー提供の原文をどの程度残しているか測定します。
編集原稿の事前審査
新しい原稿と既存記事を比較し、重なりの大きい組を編集者の確認へ回します。
よくある質問
類似度はどのように計算しますか?
一意な連続単語シングルにJaccard係数を適用します。共通シングル数を両文章にある全一意シングル数で割り、100を掛けます。
文章が指定語数より短い場合はどうなりますか?
短い文章を示す入力エラーを返します。有効な比較には、どちらも最低1つのシングルを作れる語数が必要です。
重複判定は検索エンジンのペナルティを意味しますか?
いいえ。選択したしきい値での表現の重なりを示すだけで、インデックス、正規URL、順位、検索エンジンの措置は予測しません。
句読点や大文字・小文字は結果に影響しますか?
いいえ。シングル作成前にUnicode、文字種、句読点を正規化します。ただし、単語そのものと並び順は結果に影響します。
APIリクエストの料金はいくらですか?
APIリクエスト1回は$0.002です。同じ決定的な確認を、このページのブラウザー上で無料でも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/seo/duplicate-content-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"Search engines value useful original pages that answer a reader'\''s question clearly and completely.","text_b":"Search engines value useful original pages that answer a reader'\''s question clearly and completely."}'const res = await fetch("https://api.kit.forhosting.com/seo/duplicate-content-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "Search engines value useful original pages that answer a reader's question clearly and completely.",
"text_b": "Search engines value useful original pages that answer a reader's question clearly and completely."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/duplicate-content-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "Search engines value useful original pages that answer a reader's question clearly and completely.",
"text_b": "Search engines value useful original pages that answer a reader's question clearly and completely."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/duplicate-content-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"Search engines value useful original pages that answer a reader\'s question clearly and completely.","text_b":"Search engines value useful original pages that answer a reader\'s question clearly and completely."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"Search engines value useful original pages that answer a reader's question clearly and completely.","text_b":"Search engines value useful original pages that answer a reader's question clearly and completely."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/duplicate-content-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text_a": "Search engines value useful original pages that answer a reader's question clearly and completely.",
"text_b": "Search engines value useful original pages that answer a reader's question clearly and completely."
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.duplicate_content_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |