URLの後ろにつらつらと続くパラメータ。あれを取得してフォームのinputタグに渡す方法をご紹介。やれることはわかってて前からやってみたいと思っていた内容なので、実際に作ってみました。それでは、どうぞ!
※目次:
※参考:JSの基本についてはこちら
【JSの基本-前編】書ける前に読む!HTML、CSS、JSの書式-4 - クモのようにコツコツと
URLパラメータとはなんぞや
まずパラメータとはなんでしょう。こんな形式です。URLの後ろに続いている文字列です。
URLパラメータの形式
//普通のURL http://ドメイン.com //パラメータ付URL(一つ) http://ドメイン.com?変数=値 //パラメータ付URL(複数) http://ドメイン.com?変数=値&変数=値&変数=値&変数=値&変数=値
- URLのあとに
?
を付けて変数=値
を書きます。 - 複数のパラメータを付ける場合は二つ目以降は
?
が&
になります。
よくバナー広告のリンク先がこのようにパラメータがつらつらと入っていたりしますよね。あと、スパムメールのURLとかね。これらはURLに付属したい情報を追加しているわけです。
見た目は基本的に上記の形式ですがパラメータは2種類あります。
- アクティブパラメータ:パラメータによってページの内容が変化する
- パッシブパラメータ:パラメータによってページの内容が変化しない
アクティブパラメータ
アクティブパラメータの例として検索結果があります。
- 変数
q
は検索を現し値がJS
です。リンクをひらくと「JS」の検索結果が表示されます。
https://www.google.co.jp/search?q=JS - 値を
CSS
に変更すると「CSS」の検索結果に変わります。
https://www.google.co.jp/search?q=CSS ?
以降を全部削除すると検索設定が無効になって、TOPページにリダイレクトされました。
https://www.google.co.jp/webhp
パッシブパラメータ
パッシブパラメータは任意で自由でつけられます。
- 例えばあるページの後ろに
?boowy=psycho
(BOØWYは最高)という適当なパラメータを付けても
http://idr-zz.hatenablog.com/?boowy=psycho - あるいは後ろに
?koko=tokyodaze
(ここは東京だぜ)というパラメータを付けたとしても
http://idr-zz.hatenablog.com/?koko=tokyodaze - または
?boowy=psycho&koko=tokyodaze
(BOØWYは最高&ここは東京だぜ)と全部付けてもページの内容は変わりません。
http://idr-zz.hatenablog.com/?boowy=psycho&koko=tokyodaze - パラメータ付きのURLのパラメータをURLバー上で削除してみても表示内容が変わらないことが確認できるはずです。
http://idr-zz.hatenablog.com/
パラメータ付きURLのアクセスを計測
さて、パッシブパラメータはページの内容に何も影響をおよぼしませんが、それではなんのためにパラメータを付けるのでしょうか?主に、計測が目的になります。
例えばある特設ページがあり、問い合わせフォームへのリンクボタンが三つあったとします。
<article> <h1>絶対に絶対に絶対にたったの1秒で億万長者になれる方法をあなただけにこっそり伝授!!!!!!!</h1> <img src="img/main.jpg" alt="札束のお風呂に浸かる男の写真"> <aside id="btn01"><a href="form.html?btn=001">今すぐ問い合わせる!!</a></aside> <section class="setumei"> <h2>説明タイトル説明タイトル説明タイトル</h2> <p>説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。</p> </section> <aside id="btn02"><a href="form.html?btn=002">今すぐ問い合わせる!!</a></aside> <section class="setumei"> <h2>説明タイトル説明タイトル説明タイトル</h2> <p>説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。説明文章、説明文章。</p> </section> <section class="ketsuron"> <h2>結論タイトル結論タイトル結論タイトル</h2> <p>大金持ちになれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれる!なれるぞぉーーーー!!。</p> </section> <aside id="btn03"><a href="form.html?btn=003">今すぐ問い合わせる!!</a></aside> </article>
- ページTOPのすぐ下の問い合わせボタンのリンク先にはパラメータ
?btn=001
- 説明の真ん中の問い合わせボタンのリンク先にはパラメータ
?btn=002
- 結論の後の問い合わせボタンのリンク先にはパラメータ
?btn=003
この3つのボタンのリンク先は基本的に同じ内容ですが、Googleアナリティクスのアクセス解析では違うページとしてカウントされます。
そのため、どのボタンが一番多くクリックされたかがわかるわけです。
この場合、001は切羽詰まってて、002は普通の人、003は慎重派ですねw
他にこんな使い方もできます。
- 複数のSNSにシェアするときに
?sns=tw
、?sns=fb
など異なるパラメータを付ける→どのSNSが一番アクセスが多いか計測できる - メルマガ本文のリンクに
?mail=20180101
などのパラメータを付ける→メルマガからのアクセス数を計測できる - 複数のアフィリエイターに
?afi_id=001
、?afi_id=002
などのID番号を付与する→どの紹介記事が一番アクセスが多いか計測できる
URLを取得してフォームに送信
さて、URLにパラメータを追加することで、アクセスまでは計測できました。しかし、我々の最終的なゴールはフォームの送信までですよね!
もしこのパラメータ付URLをフォームの入力情報と一緒に送信できれば、フォーム送信まで到達したパラメータの数が計測できそうです。
location.hrefでURLを取得する
JSには、現在表示されているページのURLを取得する方法があります。location.href
です。
<P class="text">このページのURLは「<span id="thisurl"></span>」です。</P>
例えばid#thisurl
のspan
タグにURLを表示したい場合
var url = location.href; document.getElementById("thisurl").innerHTML = url;
- 変数
url
にlocation.href
を代入 - DOM
thisurl
の中身をinnerHTML
でurl
に変更
これでページのURLが表示されます。
上記の例では埋め込みコード用のパラメータ?type=embed&animations=run
が追記されています。大元のリンク先はパラメータ無しのURLが表示されてます。
※参考:https://codepen.io/i_ryo/pen/bjbqLx
ためしにURLにパラメータ?boowy=psycho
を追加してみると
※参考:https://codepen.io/i_ryo/pen/bjbqLx?boowy=psycho
リンク先のページにもパラメータ(BOØWYは最高)が表示されます。
フォームにURLを入れたい
さて、URLを取得して画面に表示まではできました。次にこれをフォームの項目として入力したいですね。例えばこんなフォームです。*1
<form action="php/form.php" method="post" id="test" name="test"> <dl> <dt>名前</dt> <dd> <input type="text" name="名前" id="name"> </dd> </dl> <dl> <dt>E-mail</dt> <dd> <input type="text" name="E-mail" id="e-mail"> </dd> </dl> <dl> <dt>URL</dt> <dd> <input type="text" name="URL" id="inputurl"> </dd> </dl> <input type="submit" value="送信する"> </form>
一応URL欄は作ってみましたが、まさかユーザーにURLをいちいちコピペしてもらうわけにはいきません。。
さきほどJSで取得したURLをここに渡せれば自動的に入力できそうです。
valueプロパティにURLを渡す
input
タグの入力値はvalue
属性になります。例えばname
のところに「イイダリョウ」と入力するとvalue
属性の値にイイダリョウ
が入ります。このvalue
に先ほどの変数url
を代入するとどうでしょうか。
document.getElementById("inputurl").value = url;
DOMのid#inputurl
のvalue
プロパティに変数url
を代入。どうだ?
おお!やりました!URLが自動的に入力されました!これでURLを送信することができますね。
パラメータのみを取得してフォームに送信
さて、URLをinput
タグに渡すことができましたが、ちょっと長いですよね。URLの部分は自明であって、本当に知りたいのはURLの後ろのパラメータのみです。
location.searchでパラメータのみ取得したい
はい、パラメータのみを取得するJSもありまぁす。location.search
です!
<P class="text">このページのパラメータは「<span id="thisparam"></span>」です。</P>
今度はid#thisparam
のspan
タグにパラメータを表示しましょう。
var param = location.search; document.getElementById("thisparam").innerHTML = param;
- 変数
param
にlocation.search
を代入 - DOM
thisparam
の中身をinnerHTML
でparam
に変更
先ほどのURL取得とほとんど同じ書き方ですね。さあ、どうなるか。
パラメータ、表示されました!
ちなみに元ページを見ると、埋め込み用のパラメータがないので空欄です。
※参考:https://codepen.io/i_ryo/pen/rrBzab
ここに任意のパラメータ?boowy=psycho
を追加すると…
※参考:https://codepen.io/i_ryo/pen/rrBzab?boowy=psycho
BOØWYは最高〜が表示されました!
valueプロパティにパラメータを渡す
さあ、URLと同様にinput
のvalue
属性にパラメータを渡しましょう。HTMLはこんなです。
<dl> <dt>パラメータ</dt> <dd> <input type="text" name="param" id="inputparam"> </dd> </dl>
先ほどのURLとほとんど同じです。idは#inputparam
にしています。次、JSはこんなです。
document.getElementById("inputparam").value = param;
DOMのid#inputparam
のvalue
プロパティに変数param
を代入。すると…
おお!埋め込み用のパラメータ?type=embed&animations=run
のみが表示されてますね!
任意のパラメータ?boowy=psycho
を追加したページはこちら
※参考:https://codepen.io/i_ryo/pen/OwLjWz?boowy=psycho
BOØWYは最高〜入りましたぁ!
type="hidden"で非表示に
さて、これでURLやパラメータがinput
項目に入力できることがわかりました。なお、この項目はユーザーにとっては見えなくてもいい、あくまで内部で計測するために必要な項目ですね。 *2
表示不要の項目はtype
属性をhidden
にすると非表示にすることができます。
<dl> <dt><!--URL(非表示)--></dt> <dd> <input type="hidden" name="URL" id="inputurl"> </dd> </dl> <dl> <dt><!--パラメータ(非表示)--></dt> <dd> <input type="hidden" name="param" id="inputparam"> </dd> </dl>
id#inputurl
と#inputparam
のinput
タグをtype="hidden"
にすると…
リンク先をデベロッパーツールなどで見ていただくと、非表示ながら#inputurl
のvalue
属性にURLが入っているのがわかります。
※参考:https://codepen.io/i_ryo/pen/QBLMQz
パラメータ?boowy=psycho
付きはこちら。#inputparam
のvalue
属性に「BOØWYは最高〜」が入ります。
※参考:https://codepen.io/i_ryo/pen/QBLMQz?boowy=psycho
最後に:パラメータの限界
さて、これでパラメータ付きのURLでフォームの送信まで計測することができましたが、この方法には限界があります。
このページに訪れたユーザーがその場で問い合わせや注文をする場合はこれでいいのですが、普通はそんなに即決されることは少ないと思います。
この日は認知だけで終わって、検討の結果、後日また訪れてポチった場合、もしこのときURLにパラメータがないと計測ができません。
また、即日でもサイト内を回遊してフォームに再訪したときにはもうパラメータはありません。
対策としてはパラメータ付きで訪れたユーザー情報をCookieで記録し、紐づける必要があります。また、Cookieは最近好まれない風潮ですが、これに変わる技術として、JSでローカル環境のみで完結するローカルストレージという技術も産まれました。
ここらへんについてはまた改めて触れていきたいと思います。ではまた。
※参考:ネイティブJSやってみたシリーズ
qiita.com