2015年10月23日金曜日

Bloggerでインデックスステータスがずっと0 その1

お疲れ様です。岡田です。

ちょうどひと月前の9月末にブログをBloggerへ移設してきたのですが、標題のとおり、Search Consoleで見れる「インデックスステータス」がずーーーーーーっと0になっているので、気になっていました。
序盤はコンテンツが少ないですし、新しいサイトなので、クローラーが来づらいのかなぁと、勝手な想像を巡らせていたのですが、1か月を過ぎた今もまだ「0」のままなので、いい加減どうにかしないとと思いました。

「ピーーーーーーーーーーーーーー」(心停止状態)


クロールエラーはないか

Search Consoleの左メニューにある「クロール」のところをちゃんと見てみます。

まず先頭の「クロールエラー」。
「サイトエラー」と「URLエラー」の2項目ありますが、どちらの「過去90日間エラーが検出されませんでした」となっているので、大丈夫っぽいですね。

クロールの統計情報を確認

次に、「クロールの統計情報」を見てみます。
「過去90日間のGooglebotの活動」とあるので、グラフに動きがあるということは、クロールできてるっていうことなんでしょう。たぶん。。。
10月7日に3ページ、クロールされてるみたい。その後ぼちぼち


robots.txtを確認

Bloggerでブログを作ると、デフォルトのrobot.txtはこんな風になっているのです。

User-agent: Mediapartners-Google
Disallow:
User-agent: *
Disallow: /search
Allow: /

各項目の意味については、こちら(robots.txtの書き方と効果的な活用法)を見ました。
真ん中よりちょっと下くらいで各項目について説明してもらえました。
(追記:後日山田くんがちょっと書いてくれました robots.txtの書き方)

このブログは、複数人数でいろいろなテーマについて記事を書いていく感じなので、開発チームのみなさんには記事に「ラベル」を付けてもらうようにお願いをしています。
そうすると、ラベルごとに記事の一覧が見れて、便利だな~と思ったわけです。
(そういうワケだからみんなラベル付けてくれ~)

たとえば、Kさんが書いてくれている「リンク切れ」というラベルがついている記事の一覧はhttp://stpsysdev.blogspot.jp/search/label/リンク切れ
というURLで表示できるのですが、このデフォルトのrobot.txtだと、このラベル別の記事ページにはクローラーが入らないようになってしまってるっぽいのです。

なので、これは変えたほうがいいな!と思いまして、こちら(Bloggerのサイトマップとrobots.txtの設定方法)を参考にして、robot.txtをこんな風にしました。

User-agent:* 
Allow: /search/label/
Disallow: /*archive 
Sitemap: http://stpsysdev.blogspot.jp/feeds/posts/default?orderby=UPDATED
これでインデックス数も増えるんじゃないかなぁ。と、期待ですが、どうなんだろう。

サイトマップを確認

いつだったか忘れてしまったのですが、かの心停止がずっと続いているのが気になり始めたころに、サイトマップを追加しました。
なんと、Bloggerにはサイトマップを作成する機能が備わっているので(こちらを参照しました:Bloggerのサイトマップ(sitemap.xml)の自動作成)、それで作成したものを「Search Console」⇒「クロール」⇒「サイトマップ」⇒「サイトマップの追加/テスト」から追加しました。

サイトマップのコンテンツというグラフを見ると、10月12日から送信されているページが増えているので、きっとこの時期にやったのかもしれません。

もしかしたらやらなくても上がってきてたのかもしれませんが、送信できているみたいですし、その後もコンテンツが増えるたびに数字が伸びてるみたいなので、OKってことにし、、、、!!?

ん?ちょっとまって

青が「送信」、赤が「インデックスに登録済み」

「インデックスに登録済み」が25もある!?ど、どういうこと・・・・・・

だって「インデックスステータス」が心停止だから、「インデックスに登録済み」のページが0っていうことなんじゃないの・・・チガウノ・・・・?

ヨクワカリマセン




というようなかたちで、Search Console からクロールについての設定を見直してみたのですが、これで「インデックスステータス」が息を吹き返してくれるといいのですが、、しばらく様子を見てみたいと思います。

なにかお知恵を貸してくださる方!コメントをお願いいたします。

そもそも「インデックスステータス」ってナニモノなのかしら、、、





【後記】
Kさんの見やすい記事を見習って、画像を使ってみたり、htmlをいじいじしてみましたが、なんか変。もうあきらめです。
h2タグの場所が変なのかな?エディタと二刀流だとはちゃめちゃです。
h2要素の個数は検索順位に影響を与えるか?
次回もがんばります。カステラ食べたい。

2015年10月22日木曜日

タイニーPNG のAPIを利用した画像圧縮アプリケーションの作成

こんにちわ山田です。
昨日は、オリオン座流星群がよく見えたそうですね。
まったく見れなかったです、、。

たまたま夕方のニュースで情報を得ていたので、楽しみにしていたら
朝になるまで思い出せませんでした。

そんなこんなで、画像を外部のサービス(API)を利用して
圧縮して、画像サイズを小さくするメソッドを作成したので、その覚書です。

開発環境 ASP.NET
開発言語 C#

使用したのは、TinyPNGでほぼ公式のリファレンス通りに実装しました。 
画像→byte配列にするのが苦戦しました。ここを参考にさせていただきました。 

呼び出し元
    protected void ButtonUpload_Click(object sender, EventArgs e)
    {
        Label1.Text = "";
        if(FileUpload1.HasFile)
        {
            string path = @"C:\temp\\";
            //つけたいファイル名
            string fileName = FileUpload1.PostedFile.FileName;
            string output = Path.Combine (path, fileName);

            //アップロードファイルを入力ストリーム経由でbyte配列に読み込む
            Byte[] aryData = new Byte[FileUpload1.PostedFile.ContentLength];
            FileUpload1.PostedFile.InputStream.Read(aryData, 0, FileUpload1.PostedFile.ContentLength);
            output = SizeDownImage(aryData, output);
            Label1.Text = "次のファイル名で保存しました: " + output;
        }
  
呼び出される側
    /// <summary>
    /// アップされた画像をTinyJPGのAPIを使用して、圧縮して保存するメソッド
    /// ・引数:
    ///  byte[] 画像のバイナリデータ
    ///  string 保存先のファイルパス
    /// ・返り値:
    ///  string 保存後のファイルパス
    ///   ※失敗した場合は、空を返却
    /// </summary>
    /// <param name="_imageByte"></param>
    /// <param name="_output"></param>
    /// <returns></returns>
    public static string SizeDownImage(Byte[] _imageByte, string _output)
    {
        string key = [外部APIキー];

        string url = [外部APIのURL];
        string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));

        WebClient client = new WebClient();
        client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);
        string result = "";
        try
        {
            //画像アップロード //
            client.UploadData(url, _imageByte);
            // 画像ダウンロード
            client.DownloadFile(client.ResponseHeaders["Location"], _output);
            result = _output;
        }
        catch (WebException ex)
        {
            log.Error(ex.Message);
        }
        finally
        {
            client.Dispose();
        }
        return result;
    }
}

2015年10月20日火曜日

クエリの速度を見る方法



こんにちわ山田です。
MSのManagement Studio を使った SQL Server の操作で
クエリの実行速度の計測方法を知ったのでその覚書です。




いつも使っているクエリの実行の右隣に、
「実行プラン」と「クライアント統計」というアイコンがあります。
選択して、いつも通りクエリを実行すると、なんと!実行速度がさくっとでます!

外部結合をたくさんして、サーバーの負荷がかかっているのかなと心配になったら
ここの一番下の、「サーバー応答の待機時間」を見れば処理にかかった時間を見ることできます。

該当するページ内リンクを他のタブで全て開く方法

こんにちは!Sです!
今日はページ内リンクを一気に開く方法を調べていたので、その覚書と共有です。

下記のように書けばページロードした際にページ内リンクが一気に別タブで開きます。
しかしこの場合ヘッダーやフッダーなどのあらゆるリンクを開くのでページ数の多いサイトでは本当に恐ろしいことになります・・・

<script type="text/javascript">
<!--
window.onload = function () {
for (var i = 0; i < document.links.length; i++) {
var ele = document.links[i];
if (ele.href.match(/^http/)) {
window.open(ele);
}
}
}
function openwin() {
var url = this.href;
if (document.all && !window.opera) {
if (url.match(/[^\x21-\x7E]/)) {
if (!window.createPopup) {
this.target = "_blank"; // IE 5.5 未満は target="_blank" を適用して終了
return true;
}
url = escape(url); // 取得 URL をエスケープ
url = decodeURIComponent(url); // エスケープした文字列をデコード
url = encodeURI(url); // 正常な URI に URL エンコード
}
}
window.open(url);
return false;
}
</script>


その為何か特定のリンクだけを対象にする場合にはより具体的なURLを指定する必要があります。




「datepicker」を日本語化する

こんにちわ、開発者のⅠです。

前回紹介したdatepickerについて、各表記をデフォルトの”英語”から”日本語”に変更してみたいと思います。

それでは、datepickerの各プロパティに対して表示させたいもの(日本語)を設定してあげましょう。



/* 日本語化してみよう */

jQuery(function($){
    $.datepicker.regional ['ja'] = {
        closeText : '閉じる',
        prevText : '<前',
        nextText : '次>',
        currentText : '今日',
        monthNames : ['1月', '2月', '3月', '4月', '5月', '6月', 
        '7月', '8月', '9月', '10月', '11月', '12月'],
        monthNamesShort : ['1月', '2月', '3月', '4月', '5月', '6月', 
        '7月', '8月', '9月', '10月', '11月', '12月'],
        dayNames : ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],
        dayNamesShort : ['日', '月', '火', '水', '木', '金', '土'],
        dayNamesMin : ['日', '月', '火', '水', '木', '金', '土'],
        dateFormat : 'yy/mm/dd',
        firstDay : 0,
        isRTL : false,
        showMonthAfterYear : true,
        yearSuffix: '年'};

    $.datepicker.setDefaults($.datepicker.regional['ja']);
});


これで、カレンダーの表記が日本語に変化しているはずです。
この他にも、日本語化対応だけではなく、特定の部分の表示・非表示を切り替えることもプロパティを指定することで可能です。

それでは、今回はここまでです。
次回、またお会いしましょう。