jQueryの初心者がselectタグの選択結果がページ内の特定の要素の表示・非常時を切り替えてみた

jQueryを使って気づいたことのメモ。

まずjQueryを使って書いたJavaScriptは、別ファイルmyscript.jsとして作成し、該当のHTMLファイルから読み込むようにする。

JavaScriptとHTMLはファイルを分けたほうがメンテナンスがしやすいため。両社が同じフォルダ内にある場合は”./~.js”という具合に指定。

<script src=”./myscript.js” type=”text/javascript”></script>

以下、セレクタについて。

class名はドット始まり。id名は#始まり。

// classが class_name という名前の要素すべて
$(“.class_name”)

// idが id_name という名前の要素すべて
$(“#id_name”)

さらに属性で絞り込みたい場合は [属性名1=’値1′][属性名2=’値2′]… とつなげればよい。

$(“.class_name[attribute1=’val1′][attribute2=’val2′]”)
$(“#id_name[attribute1=’val1′][attribute2=’val2′]”)

これらの絞り込みが想定しているのは、下記のようなHTML。

<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>

この要素はidが id_name で attribute1 が val1 で attribute2 が val2。

したがって

$(“#id_name[attribute1=’val1′][attribute2=’val2′]”)

と書けばピンポイントでこの要素に絞りこめる。

ある要素の配下にある、特定のclassやidで絞り込みたい場合は[class=’クラス名’] [id=’id名’]とすればよい。

つまり、class名もid名も、セレクタで絞り込むときには属性と同等にあつかえる。

$(“.class_name[id=’id_name’]”)
$(“#id_name[class=’class_name’]”)

これらは以下のように書いても同じ。

$(“.class_name #id_name”)
$(“#id_name .class_name”)

ここまで、属性の絞り込みには等号「=」を使っているが、この等号にはバリエーションがある。

参考:jQueryリファレンス Selectors:セレクタ

あくまで値を文字列として扱う前提。

=:等しい
^=:~で始まる
$=:~で終わる
*=:~を含む

以上の方法で絞りこめるようにするために、PHPなどでHTMLを出力する時は、絞り込みたい要素に属性値をたくさんつけておくとよい。

そうすると、複数の属性値の組み合わせで、柔軟に要素の絞り込みができる。

<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>

確実にページ内の特定の部分に存在するclassやidだけを絞り込みたい場合は、その部分全体を、あらかじめclassやidで囲んでおく。

<div class=”container1″>
<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>
</div>

その上でセレクタで絞り込むとよい。

上記の要素は以下のセレクタでピンポイントで絞りこめる。

$(“.container1 #id_name[attribute1=’val1′][attribute2=’val2′]”)

セレクタで絞り込んだ要素だけを表示したい場合は、全要素をいったん非表示にしてから、絞り込んだ要素だけを表示する。

非表示にする:スタイルシートのdisplayをnoneにする。
表示する:スタイルシートのdisplayをblockにする。

// いったん特定のクラスの全要素を非表示にしてから…
$(“.container1 .class_name”).css(“display”, “none”);

// 絞り込んだ要素だけを表示する
$(“.container1 .class_name[attribute1=’val1′][attribute2=’val2′]”).css(“display”, “block”);

以上のような要素の絞り込みと、表示・非常時の切り替えを、selectタグで何かの値を選択したときに実行したいとする。

ページ全体のいずれかの要素のクリックや選択などのイベントを拾うには、以下のように記述すればいい。

$(function() {

……

});

名前のない関数は、最初は非常に気持ち悪いが、慣れればよい。

例えばidがselect1というselectタグがあったとする。

<select id=”select1″>
<option value=”val1″>選択肢1</option&g;
<option value=”val2″>選択肢2</option&g;
</select>

このselectタグの選択値が変更されたときの処理は以下のように書く。

$(function() {

$(“#select1”).change(function() {
……
});

});

$(“#select1″)で、そのページの中でidがselect1である要素に絞りこめる。

選択値が変更されたときの処理を書きたい場合は、その要素のchange()という関数を呼び出す。

具体的にどういう処理をしたいかは、change()関数の中に、また名前のない関数function() { …… } を書いて …… の部分に記述する。

……の部分には、ふつうにJavaScriptやjQueryで書けるロジックは何でも書ける。

……の部分で、その処理のきっかけになった <select id=”select1”> 自体を参照したい場合は $(this) と書く。「自分自身」の意味だと思えばいい。

選択した値を読み取りたい場合は $(this).val(); と書けばいい。

ちなみに、デバッグしながらコードを書きたい場合は、console.log(~); の「~」の部分に、その時点の値を確認したい変数を書けばいい。

console.log(); で書き出したログは、たとえばGoogle Chromeなら[Ctrl]+[Shift]+[i]キーを押して、[Console]というタブを選べば、確認できる。

$(function() {

$(“#select1”).change(function() {
console.log($(this).val());
});

});

このように書いておいて、該当のページでselectタグで例えば「選択肢2」という項目を選択すると、その瞬間、以下のログが書き出される。

val2

ここまでにやったことを組み合せると、attribute1という属性が、selectタグで選択した値と同じである要素だけを表示する、といったことができる。

$(function() {

$(“#select1”).change(function() {
var selected_val = $(this).val();
$(“#id_name”).css(“display”, “none”);
$(“#id_name[attribute1='” + selected_val + “‘]”).css(“display”, “block”);
});

});

selectで選択した値を、分かりやすくするためにいったん selected_val という変数に代入している。

そしてそのselected_valを使ってセレクタ文字列を組み立てる。

例えばそのページの中でidが id_name である要素すべてを、まずいったん非表示にする。

$(“#id_name”).css(“display”, “none”);

その後、そのページの中でidが id_name であり、かつ、attribute1が選択した値である要素だけは表示させる。

$(“#id_name[attribute1='” + selected_val + “‘]”).css(“display”, “block”);

セレクタの文字列の組み立て部分は、以下のようなしくみ。

選択した値が「val1」だったとすると

“#id_name[attribute1='” + selected_val + “‘]”

この文字列の計算結果は

“#id_name[attribute1=’val1’]”

となる。つまり、idがid_nameである要素のうち、attribute1がval1のものという意味になり、下記のidがid_nameである要素がいったんすべて非表示になり、いちばん上の要素だけが表示される。

<div id=”id_name” attribute1=”val1″>表示したい要素の1つ目
</div>
<div id=”id_name” attribute1=”val2″>表示したい要素の2つ目
</div>
<div id=”id_name” attribute1=”val3″>表示したい要素の3つ目
</div>

須藤凛々花『人生を危険にさらせ!』のレビューをアマゾンにとりあえず書いておいた

以下、アマゾンに書いたレビューの全文です(汗)


優しすぎる堀内氏が、須藤凛々花を素朴すぎる実存主義へミスリードした過程が読める本

第四章の正義論でp.151~152にかけて堀内氏が軽く触れているポストモダン思想について
堀内氏自身がまともに考えたことがないように読める点が、須藤凛々花をヒドく単純化
された実存主義にミスリードしている。

ポストモダンは「自分」が自分であるという同一性を疑問に付して問い続け、哲学を語る
「言語」自体が誤解なく何かを伝えることを疑問に付して問い続けている。

その絶望の深さは、「自分」の同一性や「言語」の意味の同一性を無批判に前提した
通俗的な実存主義が(つまり本書の中での須藤凛々花が)深淵と呼び、絶望と
呼んでいる深淵や絶望よりもさらに絶望的なものだ。

ポストモダンの思想家たち(たとえばジャック・デリダ)が問い続けた、その絶望の
救いようのなさ、ニヒリズムの救いようのなさに、堀内氏も須藤凛々花もまったく
とどいていないように読める。

これほど無批判に「自分」の同一性や、自分の「意志」の実在、思考するときに
自分が使っている言葉の「意味」のゆらぎのなさに安住して、「自己の生を行く抜く」
(p.287)などと無邪気な宣言をしていれば、結婚宣言で批判にさらされるのも
当然だろう。

彼女の結婚宣言の問題点の一つは、ゲームのルールである恋愛禁止を相対化する行為に、
自分自身の自律や自由を見ている可能性がある点。

これでは大人の作った規則に反抗する「青年の哲学」(p.228~229)、つまり哲学の
手段化を、彼女が批判的に考えることができず、行動に起こしてしまっている。

このナイーブさだけでも、彼女は哲学者を自称するに値しない。

結婚宣言の問題点の二つめは、ゲームのルールより「自分」や主体が先立つ、という
単純化された実存主義から、彼女が結局は抜け出していないこと。

実存が本質に先立つのはよいとして、その実存に先立つものがない、という考え方が
ナイーブすぎる実存主義だ。

そもそもこの世界は「自己」が同一であること、言葉が一定の「意味」を間違いなく
伝えること、といった、それ自身大いに疑わしい「ルール」の上に成り立っている。

彼女が、たとえば総選挙結果発表で結婚宣言をするのは不適切だというルールを
相対化することを、「哲学」だと思っているなら、それ以前に、疑問に付すべきことがある。

それは、彼女自身が「哲学」するときに暗黙の前提にしている「自己」同一性や
哲学するときに使っている言葉の意味にゆらぎがないという、「哲学のルール」だ。

この「哲学のルール」は、本来彼女が、AKB48の恋愛禁止といったルールよりも
先に問うべきことのはずだ。

彼女がナイーブな実存主義にとどまっていられるのは、「自己」の同一性や
言葉の「意味」のゆらぎのなさという、哲学のルール、哲学の権威、哲学の
パターナリズムに依存しているからだ。

その「父親」としての哲学に依存しているからこそ、彼女は安心してAKB48という
ゲームのルールを相対化できるわけだ。

しかし、彼女が本当に問うべきは、その仮想の「父親」そのものではないのか。
哲学の暗黙のルールそのものではないのか。

彼女が「自律した自由な個人でありたい」とか「自己の生を生き抜く」と語るなら、
まず、無批判に前提されている「自己」の同一性をまず疑うべきだ。

さらに、そう自分自身に語りかける言葉が、自分自身に誤解なく伝わっていると
思い込んでいる、その言葉の意味のゆらぎのなさについて、自身のナイーブな
信頼をまず疑うべきだろう。

(このあたりはジャック・デリダの『声と現象』を参照のこと)

堀内氏の失策は、自称「哲学者」である須藤凛々花を、ナイーブな実存主義の
向こう側にある、ポストモダンのさらに救いようのないニヒリズムの深淵に
突き落とさなかった「優しさ」にある。

堀内氏は須藤凛々花に対して、優しすぎたのだ。

ポストモダンの哲学者は、一人で黙々と思考するとき、自分が自分に語りかける
言葉そのものが、自分自身によって誤解されているかもしれないという、
絶望的な可能性を考える。

ポストモダンの哲学者は、一人で黙々と思考するとき、自分が語りかけている
自己そのものが、語りかけのために使っている言葉なしでは、そもそも成立
しないのではないかという、絶望的な可能性を考える。

システムやルール(例えば言語)に先立って、自己や意味があるのではなく、
システムやルールが存在しなければ、自己や意味も存在しないのではないか。

そういうふうにポストモダンの哲学者は考える。

さらに言えば、そのシステムやルール自身も、自分で自分を根拠付けるしかない
壮大なフィクションなのではないか、と考える。

堀内氏が須藤凛々花を、そういう絶望、ニヒリズムにまで突き落とさなかった、
つまり「非啓蒙」しなかったからこそ、須藤凛々花は哲学を手段化してしまった。

須藤凛々花が、哲学が終わりのない思考であることを、自分で否定した今、
彼女は哲学者でも何でもない。

彼女に足りないのは絶望だ。

その証拠に、彼女は目の前の愛によって、しかも日本社会における結婚という
何の反省的思考もない制度に呑み込まれることで、ニヒリズムから救われている。

そんな彼女のいったいどこが哲学者なんだろうか?


企業向けモバイル端末管理製品2017年版「マジック・クアドラント」公開

毎年6月前後に公開されている、企業向けモバイル端末管理製品(Enterprise Mobility Management)の「マジック・クアドラント」2017年版が公開された。

今まで「リーダー」だった5強のうち、AirWatch(VMware社)、Mobileiron、MaaS360(IBM社)、BlackBerryは安泰だが、Citrix社だけが「ビジョナリー」に事実上の格下げになった。

各社の「強み」と「注意点」は以下のとおり。以下の要約はあくまで単なる参考であり、正確な内容については必ず原文を参照のこと。

VMware AirWatch

「強み」
・垂直統合型市場のほとんどで大規模導入実績あり。
・OS新バージョンの即日サポート、管理対象外端末に対する独自のソリューションについて技術革新を継続推進。
・これまでのEMMのみの導入に対して「Workspace One」が対象機能範囲を大きく拡張、競争力のある位置づけ。

「注意点」
・顧客企業から、テクニカル・アカウント・マネージャー(TAM)に直接コンタクトがとれないとの不満を継続して受けている。TAMオプション購入済み企業からは問題の報告なし。大規模導入についてVMware社は「pods」と呼ばれる直接サポートを追加。
・旧版のAirWatch Inboxをまだ利用している顧客企業が機能面と安定性の面で問題を報告している。Boxerの新機能S/MIMEサポートの品質が現時点で検証されていない。
・AirWatchのコード品質について継続的に報告を受けており、広範な互換性を提供しようとしている結果と思われる。

Mobileiron

「強み」
・昨年、顧客サポートの全般的な改善が報告されている。オンプレミス導入の顧客企業にも最新のパッチ適用を積極的に促し、クラウドユーザには定期保守によるサービス停止を適時に通知している。
・セキュリティと使いやすさの両立に焦点を当てている。各種法規制に対応、企業アプリストアやEmail+などの使いやすさも改善。
・クラウド版が、10万端末以上の大規模顧客にも導入されている。

「注意点」
・専業EMMベンダーとして、広範な製品を持つベンダーの競争力からプレッシャーを受けており、長期的に顧客が同社製品の適用範囲を縮小する脅威がある。
・導入直後からすぐ使えるレポーティングや分析機能が管理画面に組み込まれていない。
・AppConnect機能を利用しているユーザ企業が機能制限を考慮しなければならない。Android用AppConnectはiOS同様のSDKをサポートしていない。AndroidのAppConnectはラッパーにしか対応していない。

IBM MaaS360

「強み」
・システム管理者に便利な端末状況把握の機能を提供している。例えばポリシー違反や組織がさらされている脅威情報のダッシュボードなど。
・Windows 7、8、10、macOSに従来のクライアント管理ツールだけでなくEMM機能も提供している。
・この数年間、導入企業から他の製品よりMaaS360は導入が簡単という報告を受けている。

「注意点」
・SaaSのみでオンプレミスの提供がない。ただしメールやその他アプリケーションについてオンプレミスとのゲートウェイは提供している。
・WindowsやmacOSの高度な管理機能は、BigFixと組み合せる必要があり、完全統合されていない。
・MaaS360のiOSアプリは96MBもあり、他のEMM製品のiOSアプリよりかなりサイズが大きい。インターネット回線の遅いユーザは導入時に困難がある。

BlackBerry

「強み」
・個人情報管理(PIM)アプリは依然として強力で、セキュリティや遵法対応のPIMが必要な企業・組織では、EMM製品の中で最も多く採用されている。
・BlackBerry、WatchDox、Goodの歴史的経緯、社会的評価、セキュリティ機能から、セキュリティ重視の企業・組織にとって強力な製品である。
・BlackBerry Dynamicsは機能が豊富、サードパーティーアプリに対して機能が豊富で、セキュアで汎用的なSDKを提供しており、社内でアプリ開発をする企業・組織はSDK方式に価値を見出している。

「注意点」
・PCやMacの管理機能の実績がほとんど報告されていない。報告されている反応はおおむねプラス評価だが、少数の事例では、全般的なテストやパイロット展開を計画したいとしている。
・アプリ・ラッピング機能の提供を停止したが、Appdomeとして継続提供される。モバイルアプリ管理を計画している場合、この点を考慮する必要がある。
・IDaaSなどサードパーティーの認証サービスやアクセス管理のサポートは限定的。導入済みのIDaaSと互換性があるか確認が必要。

最後に、参考までにMicrosoftとCitrixの評価も見てみる。両社はEMM分野で2016年5月に広範な提携を発表しているため、その経緯の部分も含める。

Citrix XenMobile

2017年、XenMobileを独立した製品として提供しつつ、Microsoft Intuneの移行を検討している企業や導入済み企業にXenMobileを販売するため、Microsoftと大規模な提携をした。このシナリオでXenMobileは、Intuneが端末登録(entrollment)なし設定の場合の追加ツールと位置づけられる。Citrix社のコンテナ化アプリはIntuneのMAM機能でも管理できる。

「強み」
・Microsoft Intuneの影響力拡大に対応するため、XenMobileとの連携戦略をとることで、防御的なスタンスを取っている。
・Citrix Secure Mailはいくつかの競合他社製品の追加機能と比べてプラス評価を得ている。
・NetScalerのネットワーク管理、ShareFileのデータ処理とデータ保護と密に統合され、Citrixのアプリ仮想化、デスクトップ仮想化との統合で強い製品戦略を示している。

「注意点」
・iOS 10.xとAndroidをサポートする機能に現時点でギャップがある。
・とくに小さな組織でサポート問題が指摘されている。サポートや機能要望に同社経営層との直接連絡が必要になることがあるため。
・仮想化によりデスクトップやデスクトップアプリへの接続機能は強力だが、端末管理機能は他製品より弱い。

Microsoft
2016年に、同社EMS製品への注目が大きく拡大し、機能拡張にともない導入事例も増加。”Intune in Azure Portal Preview”としてAzureへの移行が2016年12月から始まり、2017年5月には一般提供開始。これが過去の同製品の弱みに対処するマイルストーンとなった。EA契約締結ずみの組織や同社を戦略的パートナーとする組織にはよく適合する製品で、Office 365導入組織、Azure AD導入済・導入予定組織に適している。

「強み」
・Office 365モバイルアプリと独自連携が可能、同アプリデータ漏えい保護機能を直接管理可能。
・250ユーザ以上の組織でEA契約が広がっており、Intuneはライセンス面で非常に魅力的。
・Azure ADとAdvanced Threat Protectionとの強力な統合で、豊富な遠隔セキュリティ監視が利用可能。

「注意点」
・初期設定とIntuneインストールの難しさが継続して報告されているため、Microsoft FastTrackから直接支援を受けることが推奨される。
・サードパーティーのIAM製品導入済みの場合、Intuneは現時点でAzure ADの統合のみをサポートしている点に注意が必要。
・Intuneはクラウドサービスとしてのみ利用可能で、オンプレミスやハイブリットのローカルアクセス機能はない。ローカルアクセスの必要な企業は他製品の検討が必要。

グローバルパートナーズという会社からのOCN光への切替えセールス電話への正しい対処法

グローバルパートナーズという会社からセールスの電話がかかってきた件について。今回も下らない記事ですみません(苦笑)。

フレッツ光をOCN光に切り替えて、プロバイダもOCNにすると、月額料金がマンションタイプなら3,600円とお安くなりますよ、というセールスの電話だった。

グローバルパートナーズという社名をグーグルで検索してみると、みなさんも検索するとお分かりだとおもうが、ヤフー知恵袋などで「あやしい業者なので断りました」という主旨の書き込みが複数見つかった。

同名の会社があるので紛らわしいが、かかってきた電話の相手にウェブサイトのアドレスを確認したところ http://www.global-p.com/ このURLで正しいとのこと。

個人向けの光回線の切り替えサービスや、NTTコミュニケーションズの代理店といった記載がどこにもありませんが、と聞くと、ウェブサイトにはありませんが、ということで代理店コードを教えてもらえた。

そしてNTTコミュニケーションズのどの窓口にこの代理店コードを教えれば、正規の代理店と教えてもらえるでしょうか?と質問すると、一般問い合わせ窓口しかないとこのと。

では、電話だけで移行手続きが完了するとのことですが、書面でやらせてもらえないでしょうか?と質問すると、できないとのことで、その段階で断って電話を切った。

そこでじっさいにNTTコミュニケーションズのOCN光の公式サイトに行ってみると、たしかにOCN光に切り替えて、プロバイダーも今のものからOCNに切り替えると安くなると書いてある。

しかもオンラインで手続きできると書いてあるので、自分でやってみた。

営業の電話で話のあった、NTTからの光回線の転用番号の取得も、オンラインの手続きですぐに発行された。

その転用番号をOCNの申し込み画面に入力して、ものの10分くらいで、NTTフレッツ光+現在のプロバイダーから、OCN光+OCNへの切り替え手続きは完了。

手続き完了時に表示されたPDFファイルの契約内容どおり、自宅のモデム兼ルータの設定画面から、OCNへの接続情報を入力すると、するっとOCN経由でインターネットに接続完了。

あっけないほど簡単にプロバイダの移行も完了した。

要するに、ある程度知識のある人なら(ちなみに筆者はIT関係の仕事をしているのでかなり有利なことには違いないけれど)、10分間くらいで、オンラインだけでできてしまう手続きなのだ。

じゃあグローバルパートナーズという会社は、自分でできる手続きなのに、なぜわざわざ電話をかけてきたのか?

あのまま筆者がこの会社に切り替えをお願いして、その場で電話でやり取りしながら手続きをしてもらったとしたら、どういう問題があるのか?

たぶん、個人情報だと思う。

すでに自宅に電話はかけてきているので、筆者の電話番号がどこからか漏えいして、この会社に伝わったんだろうと思う。

いや、違う。

よく考えてみると、グローバルパートナーズという会社の電話の相手は、電話をしている最初から最後まで、筆者の名前を一度も言わなかった。「旦那さん」と呼んだだけ。

つまり、筆者の自宅の電話番号が漏えいしていたわけではなく、NTTひかり電話管轄の電話番号に、かたっぱしから電話をかけているのかもしれない。

そして非常に落ち着いた声で、自分ひとりでできる手続きを、NTTコミュニケーションズの代理店でなければ出来ないかのように、ひとこともそう明言せずに、結果的にそういうニュアンスでこちらに伝わるように、案内してきたわけだ。

あのまま電話で手続きをしてもらっていたら、こちらの氏名、住所、携帯電話番号など、いろいろと個人情報を教えていたはず。

今回の電話で失敗したのは、「お使いのフレッツ光はマンションタイプでしょうか?」という質問に、「そうです」と答えてしまったこと。

うちが集合住宅だという情報だけは伝わってしまったが、その他の個人情報は伝えずにすんだ。

仮に個人情報を伝えていたら、使いみちはいろいろあっただろう。

個人情報と住所からある程度こちらがどういう人物かを推測して、たとえばマンション経営の営業をしかけるとか、単に個人情報を転売するとか。

ただ、これらは筆者の憶測にすぎない。

というわけで、グローバルパートナーズという会社が信用できるかどうかは重要ではない。

重要なのは、フレッツ光をOCN光に切り替えて、月額通信料金を少し安くする手続きは、インターネットで自分で10分くらいでできるという事実。

そしてその事実を、このグローバルパートナーズという会社の営業さんが、電話で教えてくれなかったという事実。

以上。

自分でできることは、面倒くさがらずに自分でやりましょう(汗)。

自分のブログのURLの最後にヘンなURLが追加されて404エラーが続発しているときの解決策

自分で運用しているブログ(筆者の場合はWordpress)について、突然Googleさんから「404エラーが急増していますよ」という注意メールが届いた。

確かにメールにあったリンクをクリックして、Google Search consoleのクロールエラー画面を確認すると、404エラーの発生回数が急増していた。

自分のブログのURLの末尾に、特定のドメインの完全名(いわゆるFQDN)が追加されており、それらがすべて404エラー(ページが見つかりませんエラー)になっている。

たとえばこんな感じ。(下記ドメイン名はダミー)

http://myblog.com/2017/1234/www.example.com

http://myblog.com/2017/1234/ でアクセスすると正常だが、末尾に変なURLがついているので404エラーになる。

どうして勝手に変なURLが付いてしまうのか、Googleで調べたら答えが見つかった。

https://webmasters.stackexchange.com/questions/104346/weird-404-url-problem-domain-name-is-being-placed-at-end-of-urls-in-wordpress-s

自分のブログのソースコードを見て、「href=」で指定されたリンク先をすべて調べれば、その中にプロトコル(http://https://)が書かれていないwww.example.comへのリンクがあるはずです、とのこと。

それをhttp://www.example.com/ や https://www.exmaple.com/ など、ちゃんとプロトコルを付けたリンクに修正すれば問題が解決するらしい。

そこで自分のブログを探してみたら、ありました。Wordpressのウェジェットの中に自分で記入した「href=」のリンク先に・・・

<a href=”www.exmaple.com”>

・・・という、まさに上のページに書かれてある不具合が。

そこでちゃんとプロトコルをつけて・・・

<a href=”http://www.exmaple.com”>

・・・と書き直したところ、問題は解決。

以上、とてもつまらないサボりで、ウェブサイトのクローラーに大量の404エラーを発生させてしまっていた、というお話と解決法でした(汗)。