0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiitaの記事から自社サイトへのリンク、押せるのは記事の上だけだった — 12本を数えて、置き場の印が無いと出せない見張りを書いた

0
Posted at

Qiitaの記事から自社サイトへのリンク、押せるのは記事の上だけだった — 12本を数えて、置き場の印が無いと出せない見張りを書いた

当社は 2026-09-22 から、自社で測った数字を Qiita に毎日1本ずつ書いています。どの記事にも、数字の出どころとして、自社サイトの元データのページへのリンクを置いてきました。

ところが、記事から自社サイトに来た人は、ほとんどいませんでした。そこで、リンクが記事のどこに、押せる形で置いてあったのかを数えました。

結論から書きます。2026-09-22〜2026-10-03 に出した12本のうち9本は、元データへ押せるリンクが記事の上の1か所だけでした。記事の末に押せるリンクは0本です。末に書いた元データの URL は、12本とも引用の形のコードの枠の中にあり、押せませんでした。 さらに、要求ログに残る送り主は qiita.com/ だけで、どの記事のどのリンクから来たかは分かりませんでした。

この記事の数字の出どころは、当社サイトに置いた元データです(12本ごとの置き場・本文の位置・要求ログの送り主・この数字で言えないことつき)。
→ 元データ:Qiitaの記事12本のリンクの置き場

1. 押せるリンクを数える

Qiita の本文は Markdown です。コードの枠(```)の中に書いた URL は、リンクになりません。行内のコード()の中も同じです。そこで、枠の外にある自社サイトの URL だけを拾い、最初と最後の ## ` 見出しで「上・中・末」に分けました。

import re

SITE = re.compile(r"https?://(?:www\.)?braincommunity\.jp[^\s)\]>\"'*<]*")

def clickable_links(body):
    lines = body.split("\n")
    total = max(len(body), 1)
    offset, in_code = 0, False
    links, headings = [], []
    for i, line in enumerate(lines):
        if line.startswith("```"):
            in_code = not in_code
        elif not in_code:
            if line.startswith("## "):
                headings.append(i)
            text = re.sub(r"`[^`\n]*`", " ", line)
            for m in SITE.finditer(text):
                links.append((i, (offset + m.start()) / total, m.group(0)))
        offset += len(line) + 1
    return links, headings

def place(i, headings):
    if not headings or i < headings[0]:
        return "top"
    if i > headings[-1]:
        return "end"
    return "mid"

12本を数えた結果です。

元データへ押せるリンクの置き場 本数
上の1か所だけ 9
上と中に1つずつ 2
上に2つ 1
末に在る 0
計 12

上のリンクの位置は、本文の3%〜14%でした。記事を読み終えたところには、押せるリンクがありません。

2. どの記事から来たかは、送り主では分からない

要求ログで、送り主が qiita.com の来訪を、2026-09-10〜2026-10-04 の分すべて見ました。5回あり、当社の回線からの分を除くと、外からは2回です。送り主に残っていたのは、5回とも qiita.com/ だけでした。記事のアドレスは残っていません。

外からの2回は、どちらも AIクローラの名乗りを照合した元データのページに来ていました。そのページへ押せるリンクを持つ記事は1本だけで、置き場は上(本文の10%)です。今回は、着地したページと記事のリンクを突き合わせて推せました。記事が増えると、この推し方はできなくなります。

ここまでの数字(12本ごとの置き場と本文の位置、要求ログの送り主)は、元データに載せています → 元データを見る

3. 置き場の印が無ければ出さない

2026-10-04 から出す記事は、元データへのリンクを上・中・末に1つずつ置き、どこから来たかを数える印(UTM)を付けます。投稿の前の見張りが、この形になっていない記事を止めます。

from urllib.parse import urlsplit, parse_qs

POSITIONS = ("top", "mid", "end")

def check(body, date, data_path):
    links, headings = clickable_links(body)
    campaign = "qiita_" + date.replace("-", "")
    found, errors = {}, []
    for i, ratio, url in links:
        q = {k: v[0] for k, v in parse_qs(urlsplit(url).query).items()}
        if q.get("utm_source") != "qiita" or q.get("utm_campaign") != campaign:
            errors.append("no utm: " + url)
            continue
        pos = q.get("utm_content")
        if pos in POSITIONS and urlsplit(url).path == data_path:
            found.setdefault(pos, []).append((i, ratio))
    for pos in POSITIONS:
        if len(found.get(pos, [])) != 1:
            errors.append("need exactly one link: " + pos)
    if len(headings) >= 2:
        first, last = headings[0], headings[-1]
        for i, ratio in found.get("top", []):
            if i >= first:
                errors.append("top is after the first heading")
        for i, ratio in found.get("mid", []):
            if not (first < i < last and 0.2 <= ratio <= 0.8):
                errors.append("mid is not in the middle")
        for i, ratio in found.get("end", []):
            if i <= last:
                errors.append("end is before the last heading")
    return errors

中のリンクは、最初と最後の見出しの間で、本文の20%〜80%の位置に置きます。引用の形のコードの枠の URL には、印を付けません。引用する人の出典に、当社の計測の印を混ぜないためです。

この記事も、この形で出しています。

当社はこう読んだ

  • 押せるリンクの場所を、数えたことがなかった。 末に URL を書いたつもりでも、引用の枠の中で押せませんでした。
  • 送り主だけでは、どの記事が効いたか分からない。 Qiita からの送り主には qiita.com/ しか残りません。
  • 外から来た人が少ないことを、置き場のせいとは言わない。 置き場を変えた記録が、まだ無いからです。2026-10-04〜2026-10-17 の14日を、2026-10-18 に同じ測り方で測り直します。

この数字で言えないこと

  • 数えたのは、2026-10-04 に公開されていた本文です。
  • 押せるかどうかは Markdown の決まりで分けました。Qiita の画面で、1つずつ押して確かめてはいません。
  • 外から来たのは2回で、置き場と押されやすさの関係は、この数からは言えません。
  • 当社のアカウント1つ・12本の記録です。

元データと引用のしかた

12本ごとの置き場・本文の位置・要求ログの送り主・この数字で言えないことは、当社サイトに置いています → 元データを見る

数字を引用するときは、記事ではなく元データを出典にしてください。そのまま貼れる形はこうです。

出典:ブレインコミュニティ合同会社「Qiitaの記事12本:当社サイトの元データへ押せるリンクは、9本が記事の上の1か所だけだった(当社サイト・2026-09-22〜2026-10-03)」
https://braincommunity.jp/jissoku/qiita-link.html (2026-10-04 測定)

当社が自分で測ったほかの数字も、同じ置き場にまとめています。
→ 当社が自分で測った数字


業務システムの内製化と、AI活用の受託開発をしています。
ブレインコミュニティ合同会社 — braincommunity.jp

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?