QRコードのリンク先を確認する方法|画像から中身を読み出して、貼り替え後のURLと突き合わせる手順
QRコードのリンク先を確認する方法|画像から中身を読み出して、貼り替え後のURLと突き合わせる手順
チラシ、店内POP、サイトのフッター。QRコードを置く場所は増えましたが、その模様が「今も正しいリンクを指しているか」を確かめている店舗は多くありません。
先に結論を書きます。
QRコードのリンク先を確認する確実な方法は、スマホで読み取って開いてみることではなく、QR画像そのものから中身のURLを文字列として取り出し、正しいURLと文字で突き合わせることです。
理由は単純で、QRコードは壊れないまま間違うからです。リンク切れなら誰かが気づきます。しかしQRの中身が「古いけれど今も生きているURL」を指していると、読み取った人の画面には正常なページが表示されます。エラーも警告も出ないまま、そこから来たお客さまだけが計測から漏れ続けます。
この記事では、パソコンでQRの中身を読み出す手順と、貼り替え時に確認すべき3つの層を書きます。LINEの友だち追加リンクを例にしていますが、考え方は予約サイトやクーポンなど、どのQRでも同じです。
結論:QRは「開いて確かめる」ではなく「中身を取り出して照合する」
作業の順番はこうなります。
| 手順 | やること | 判定 |
|---|---|---|
| ①正本を決める | 貼るべき正しいURLを1か所に控える | ここが曖昧だと以降が全部無意味 |
| ②中身を取り出す | QR画像からURLを文字列として抽出する | 目視・スクショでは不可 |
| ③文字で突き合わせる | ①と②を比較する(できれば機械的に) | 1文字でも違えば別の入口 |
| ④周辺も確認 | リンク先・計測タグ・QR画像の3層を揃える | 1層でも取り残すと不整合 |
ポイントは②です。QRは人間が読めない形式なので、読み取り機に読ませて文字に戻さないと比較できません。ここを飛ばして「スマホで読んだら開いたのでOK」とするのが、最も多い確認漏れです。
スマホで開くだけでは確認にならない3つの理由
理由1:古いリンクも生きている
サービスによっては、リンクを発行し直しても古いリンクが無効になりません。LINE公式アカウントの友だち追加URLがその例で、管理画面から発行するたびに違う文字列が出てきますが、以前に発行したURLもそのまま有効です。
25店舗の美容サロンFCのサイトを点検したときも、管理シートのURLと各店ページのURLが食い違っていました。原因は「同じアカウントで発行し直したから」で、古いリンクも問題なく動作します(この場合は貼り替え不要という判断になります)。
つまり、開いて正常に動くことは、正しいリンクである証明にはなりません。動くのが当たり前だからです。
理由2:開いた先の画面が同じに見える
同じアカウントの入口であれば、旧URLでも新URLでも、表示されるのは同じ友だち追加画面です。タイトルもボタンも変わらず、どちらの入口から入ったかを見分ける材料は画面上に一切ありません。
差が出るのは集計側です。流入経路ごとに別のIDで記録されるため、旧入口から来た人は新しい経路の数字に乗りません。見た目は正常なのに、レポートの数字だけが実態とズレるという、後から原因を追いにくい状態になります。
理由3:画像は見た目で判別できない
QRの模様は、URLが1文字違うだけで全体のパターンが変わります。逆に言えば、似ているかどうかを目で比べても何の情報も得られません。ファイル名が qr-line.png のままで中身だけ旧URL、ということは普通に起こります。
パソコンでQRの中身を読み出す方法
方法1:macOS標準の機能で読む(追加インストール不要)
macOSには画像からQRを検出する機能(CoreImageのCIDetector)が標準で入っています。専用ソフトを入れなくても、次のファイルを qr.swift として保存すれば読めます。
import Foundation
import CoreImage
let path = CommandLine.arguments[1]
guard let img = CIImage(contentsOf: URL(fileURLWithPath: path)) else { exit(1) }
let det = CIDetector(ofType: CIDetectorTypeQRCode, context: CIContext(),
options: [CIDetectorAccuracy: CIDetectorAccuracyHigh])!
for f in det.features(in: img) {
if let q = f as? CIQRCodeFeature, let m = q.messageString { print(m) }
}
ターミナルで swift qr.swift 画像ファイル.png と実行すると、中身のURLがそのまま文字で出力されます。サイト上のQR画像も、ダウンロードしてから同じ手順で読めます。Windowsの場合はPythonのライブラリを使うか、次の方法2で代用できます。重要なのは「URLを文字として画面に出す」ことだけで、手段は問いません。
方法2:スマホで読み取って、開かずにURLをコピーする
追加のツールを使わない場合は、スマホのカメラでQRを読み取り、表示された通知やリンクを長押ししてURLをコピーします。メモアプリに貼れば文字として比較できます。
注意:業務用のQR画像を外部の読み取りサイトに上げない
画像をアップロードすると中身を表示してくれるサービスは多数ありますが、未公開キャンペーンや社内管理用のQRを外部サーバーへ送ることになるため、業務では避けるのが安全です。手元で完結する方法1・2で足ります。
リンクを貼り替えたときにズレる3つの層
LINEの入口を新しくした、予約システムを変えた、キャンペーンURLを差し替えた。こうした作業では、1つのボタンに対して確認すべき場所が3つあります。
| 層 | 実体 | 取り残すと何が起きるか |
|---|---|---|
| ①リンク先 | ボタンやテキストの href |
押しても古い入口に飛ぶ |
| ②計測の判定文字列 | クリック計測タグが「どのリンクを数えるか」を判定している文字列 | 表示は正常なのに計測だけ止まる |
| ③QR画像の中身 | 画像に埋め込まれたURL | QRから来た人だけ別経路になる |
②は特に見落とされます。クリック数を取るために、リンク先のドメイン名を含むかどうかで判定する書き方がよく使われますが、貼り替えでドメインが変わると判定に一致しなくなり、計測が丸ごと止まります。画面上の動作は変わらないため、レポートを見るまで気づけません。リンクを差し替える作業では、計測タグの中身もセットで確認します。
③は、学習塾向けのパンフレット型ページを制作したときの検品が分かりやすい例です。ページ内のリンク15本はすべて新しい入口に差し替わっていたのに、フッターのQR画像1枚だけが旧入口を指したまま残っていました。同じボタンなのに、押した人とQRを読んだ人で経路が2つに割れる状態です。デコードして中身を文字にしたから見つかったもので、画面を見ている限り分かりません。
確認は「ドメイン名そのもの」で検索する
作業漏れを潰すときは、href= で検索するだけでは足りません。旧URLのドメイン名そのものでサイト全体のファイルを検索し、ヒット件数が0になるまで追います。
grep -rc "旧ドメイン名" ./
この方法なら、計測タグの中の文字列もJavaScript内の古いドメイン名も一緒に拾えます。1ページだけ直して満足すると、料金ページや採用ページに旧URLが残ります。
「同じ入口か」を見分けるパラメータの読み方
取り出したURLを比較すると、形式が違うだけで同じ入口を指しているケースがあります。
たとえばLINEの友だち追加リンクには複数の書き方がありますが、末尾に付く識別用のパラメータ(?uLand= に続く文字列)が一致していれば同じ入口です。逆に、ドメイン部分が同じでもこの識別子が違えば、別々の経路として集計されます。
- 識別子が一致 → 同じ入口(書式が違っても貼り替え不要)
- 識別子が不一致 → 別の入口(どちらを正とするか決めて統一する)
支給されたQR画像も、この方法で照合してから設置します。「先方から届いたものだから正しいはず」は根拠になりません。
QR画像の置き場所を先に決めておく
設置時にもう一つ決めておくべきなのが、画像ファイルをどこから読み込むかです。
外部サイトにある画像を直接参照する形にすると、参照先の都合で画像が差し替わったり消えたりしたときに、こちらのQRも一緒に変わります。制作直後は正常でも、数か月後に相手側がリニューアルした瞬間に壊れる、という形で表面化します。QR画像は自分の管理下に置く(自己ホストする)のが基本です。同じ考え方はSNSのサムネイル画像にも当てはまります(参考:SNSでシェアしても画像が出ないときの確認順)。
URL自体も1か所で持つと管理が楽になります。記事のCTAリンクを175本まとめて切り替えたときも、貼り込み先を一元管理していたことで作業が1回で済みました(詳細:サイトに貼るLINE友だち追加リンクの決め方)。
印刷物にする前に確認すること
QRの用途で見落とされやすいのが紙です。紙になった瞬間、ボタンは押せません。スクロールで追いかけてくる固定ボタンも、印刷すると消えます。
印刷を前提としたページでは、次の切り分けをしておきます。
- 紙に残すもの:QRコード、電話番号、住所、受付時間
- 紙から消すもの:追従する固定ボタン、開閉メニュー、動きのある演出、スクロール前提のUI
起こりやすいのが、残すべき情報が消す側のブロックに含まれていて一緒に消えるケースです。住所や電話番号が問い合わせブロックの内側にあると、そのブロックごと印刷対象から外れて連絡先が紙に載りません。印刷用の設定を入れたら、必ず一度PDFに出力して現物を確認します。
そして紙は刷ったら直せません。Webなら差し替えれば済む不整合が、印刷物では在庫を刷り直すまで残ります。入稿前のデコード確認は、Webよりも紙のほうが重要です。
貼り替え作業のチェックリスト
リンクを新しくするときに、そのまま使える手順です。
- 正しいURLを1か所に控える(管理画面からコピーし、シートやメモに正本として残す)
- 旧URLのドメイン名でサイト全体を検索し、残っている箇所を全部リストにする
- リンク先を差し替える(料金・採用など下層ページも含めて全部)
- 計測タグの判定文字列を確認する(旧ドメインで判定していないか)
- QR画像を差し替える(新しいURLで生成し直す)
- 差し替えたQRをデコードして、1と文字で突き合わせる
- 検索件数が0になったことを再確認する
- 印刷対応が必要なページはPDFに出して確認する
6を省くと、ここまでの作業が1枚の画像で無効になります。QRは作った人が正しいと思い込みやすい成果物です。記憶ではなく、完成した画像から読み直して確認してください。
FAQ
Q. QRコードは一度作れば内容を後から変更できますか?
一般的なQR(静的QR)は画像そのものにURLが埋め込まれているため後から変更できません。変えるには画像を作り直します。変更したい場合は、中継URLを挟んで転送先を管理画面で切り替えられるサービス(動的QR)を使う方法もありますが、中継サービスが止まると全QRが同時に死ぬため、印刷物では提供元の継続性を確認してから採用してください。
Q. スマホで読み取ったら正しいページが開きました。それでも確認は必要ですか?
必要です。旧URLも生きているため、間違ったQRでも正しく見えるページが開きます。入口ごとに流入計測が分かれるサービスでは、開くかどうかではなく識別子の一致で判定してください。
Q. 印刷済みのチラシのQRが古いリンクだと分かりました。どうすればいいですか?
まずその古いリンクが今も有効かどうかを確認します。有効ならお客さまが困ることはないため、刷り直しは在庫が切れるタイミングで構いません。計測は分かれるので、その経路の数字を別枠で見ます。すでに無効なら、可能な範囲で転送設定を入れ、紙は早めに差し替えます。
Q. 支給されたQR画像をそのまま使ってよいですか?
設置前に必ずデコードして、指定されたURLと一致するか確認してください。支給時点で古い画像が混ざっているケースがあります。書式が違っても(短縮URL形式と通常形式など)識別子が同じなら同じ入口です。
Q. QRのスクリーンショットを転送されると困る用途があります。防げますか?
画像として複製できる以上、QR単体では防げません。店頭で回数券や特典を配る仕組みなら、読み取られた側の処理で条件を判定する設計にします。読み取り時に対象者か、有効期限内かを確認してから処理を実行すれば、画像が出回っても不正な利用は成立しません。QRは「鍵」ではなく「入口の案内」だと考えるのが安全です。
まとめ
QRコードの確認で押さえるべき点は3つです。
- QRは壊れないまま間違う。古いリンクも生きているので、開いて動くことは正しさの証明にならない
- 確認とは、画像から中身を文字として取り出し、正しいURLと突き合わせること。目視・スクショでは判定できない
- 貼り替えはリンク先・計測タグ・QR画像の3層で揃える。1層でも取り残すと、見た目は正常なまま数字だけが狂う
リンクの差し替えは1本ずつ見れば単純な作業ですが、確認の抜けは表面に出ないまま残ります。旧ドメインの検索件数が0になったこと、差し替えたQRをデコードして正本と一致したこと。この2つを作業の締めにすれば、静かな取りこぼしは防げます。
弊社では、ホームページ制作とLINE公式アカウントの構築をあわせてお受けしています。導線の設計から計測の設定までご相談いただけますので、リンクやQRの管理に不安がある場合はお問い合わせください。