1月 17

2010年の目標!!


新年明けましておめでとうございます!(遅っ)
今年も、森の夢ブログがんばっていきます。

新年一発目のブログは今年の目標!!
(読み物的にはまったくつまらないものだけど、公言することに意味があるとおもってます・・・)

目標1:事業のリーダーになる。

まず、第一に掲げたいのが仕事面で達成したいこの目標。
エンジニアとしてもまだまだ成長しないといけない部分があるが、ビジネスができるエンジニアになりたい。
どんなに小さなプロジェクトでもいい。
自分が主体となって、ビジネスをする経験がなければこの時代生きていけないと思う。

目標2:何かサイトをつくる

これは去年できなかった目標。今年は仕事とは別に何かサイトを作りたい!
まだ、アィディアがあるわけでは無いが、自分自身で自由に企画・運営のできるサービスを立ち上げたい。
儲かるかどうか、人が集まるかどうかはともかく自分1人の力で世の中にサービスが提供できることに意味がある。
かといって、考えることを放棄してはだめ。少しでも人が集まってくるようなサービスを作る。

目標3:IT勉強会への出席

私もそろそろ25歳・・・。社会人になってから2年半くらいたつが、
まだまだエンジニアとしても成長しなければならない、さらなる高みを目指すためにはできるだけ多くのエンジニアに出会って、色々な刺激を受ける必要がある。
先輩だけに色々教えてもらうのは卒業し、自分自身で成長のフィールドを広げなければならない時期だと思う。

目標4:英語

  • 異文化交流を活発化する
  • 技術のドキュメントもできるだけ英語で読む
  • TOEIC800点を目指す!

上記3点!がんばるぞー

目標5:投資

今年も1銘柄買う。まだ買い時。

目標6:ジギングを極める

今年の釣りのメインはジギングです。
絶対にワラサを釣ってやります!

目標7:あとまわしにしない。めんどくさがらない

最近、あとまわしにしたり、めんどくさがることが多い・・・
あとまわしにしない2010年。
めんどくさがらない2010年。

まとめ

仕事面の①、技術面の②・③、その他スキルの面④、プライベートの⑤・⑥、行動規範の⑦
今年もやりごたえのある目標がたった。
2010年もがんばります!!

written by YSU \\ tags: ,

12月 08

mysqlパーティショニングのまとめ① - 設定・再コンパイル
mysqlパーティショニングのまとめ② - パーティショニングのタイプ
mysqlパーティショニングのまとめ③ - パフォーマンス

さて、前回まではパーティショニングの設定やパーティショニングのタイプについて述べてきたが、
ここからはパフォーマンスの話をしていく。

サンプルテーブル

まず、以下のサンプルテーブルを用意した。
それぞれのテーブルに2倍にあたる245746件の郵政省のデータをいれてある。

・postal_normal

CREATE TABLE postal_normal (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  `code` int(7) NOT NULL,
  ken_kana varchar(255) DEFAULT NULL,
  ctiy_kana varchar(255) DEFAULT NULL,
  town_kana varchar(255) DEFAULT NULL,
  ken varchar(255) DEFAULT NULL,
  citiy varchar(255) DEFAULT NULL,
  town varchar(255) DEFAULT NULL,
  flg1 tinyint(1) NOT NULL,
  flg2 tinyint(1) NOT NULL,
  flg3 tinyint(1) NOT NULL,
  flg4 tinyint(1) NOT NULL,
  flg5 tinyint(1) NOT NULL,
  flg6 tinyint(1) NOT NULL,
  entry timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY town (town),
  KEY flg1 (flg1),
  KEY entry (entry),
  KEY `code` (`code`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

・postal_hash16

CREATE TABLE postal_hash16 (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  `code` int(7) NOT NULL,
  ken_kana varchar(255) DEFAULT NULL,
  ctiy_kana varchar(255) DEFAULT NULL,
  town_kana varchar(255) DEFAULT NULL,
  ken varchar(255) DEFAULT NULL,
  citiy varchar(255) DEFAULT NULL,
  town varchar(255) DEFAULT NULL,
  flg1 tinyint(1) NOT NULL,
  flg2 tinyint(1) NOT NULL,
  flg3 tinyint(1) NOT NULL,
  flg4 tinyint(1) NOT NULL,
  flg5 tinyint(1) NOT NULL,
  flg6 tinyint(1) NOT NULL,
  entry timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY town (town),
  KEY flg1 (flg1),
  KEY entry (entry),
  KEY `code` (`code`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8
PARTITION BY LINEAR HASH (id) PARTITIONS 16;

テストケース

上記のデータに対して、以下のテストを行う。

  • id=240000で検索
  • id IN (240000, 240001, 240002, 240003, 240004, 240005, 240006, 240007)で検索
  • code=1000000で検索
  • ken LIKE '%北海道%'
  • 1レコード追加

id=240000で検索

・パーティショニング

select * from postal_hash16 where id = 240000;
1 row in set (0.02 sec)

・ノーマル

select * from postal_normal where id = 240000;
1 row in set (0.01 sec)

さすがに、パーティションしていないとはいえインデックスの効いたたかが24万件なので差はあまり無いと思われる。
ただ、パーティションしてあるほうはたかだか1万ちょっとからの検索になるはずなので早いはずだが・・・

id IN (240000, 240001, 240002, 240003, 240004, 240005, 240006, 240007)で検索

・パーティショニング

select * from postal_hash16 where id IN (240000, 240001, 240002, 240003, 240004, 240005, 240006, 240007);
8 rows in set (0.00 sec);

・ノーマル

select * from postal_normal where id  IN (240000, 240001, 240002, 240003, 240004, 240005, 240006, 240007);
8 rows in set (0.00 sec)

うーん・・・検索件数を増やしてもスピードは変わらず・・・
やはり24万件程度では差がでないということか。

code=1000000で検索

・パーティショニング

 select * from postal_hash16 where code = 1000000;
2 rows in set (0.26 sec)

・ノーマル

 select * from postal_normal where code = 1000000;
2 rows in set (0.03 sec)

これは違いがはっきり出た。
やはりパーティションしているほうが遅いということである。この場合インデックスは効いていないのかも・・・。

ken LIKE '%北海道%'で検索

・パーティショニング

 select * from postal_hash16 where ken LIKE '%北海道%'
16454 rows in set (2.34 sec)

・ノーマル

 select * from postal_normal where ken LIKE '%北海道%'
16454 rows in set (1.74 sec)

なるほど、インデックスの効いていないカラムに対しては、
ノーマルもやはり遅いが、やはりパーティショニングしている方が遅い結果になった。

1レコード追加

・パーティショニング

INSERT INTO `test2`.`postal_hash16` (`code`, `ken_kana`, `ctiy_kana`, `town_kana`, `ken`, `citiy`, `town`, `flg1`, `flg2`, `flg3`, `flg4`, `flg5`, `flg6`, `entry`) VALUES ( "9071801","オキナワケン","ヤエヤマグンヨナグニチヨウ","ヨナグニ","沖縄県","八重山郡与那国町","与那国",0,0,0,0,0,0,NOW() );
Query OK, 1 row affected (0.04 sec)

・ノーマル

INSERT INTO `test2`.`postal_normal` (`code`, `ken_kana`, `ctiy_kana`, `town_kana`, `ken`, `citiy`, `town`, `flg1`, `flg2`, `flg3`, `flg4`, `flg5`, `flg6`, `entry`) VALUES ( "9071801","オキナワケン","ヤエヤマグンヨナグニチヨウ","ヨナグニ","沖縄県","八重山郡与那国町","与那国",0,0,0,0,0,0,NOW() );
Query OK, 1 row affected (0.02 sec)

パーティショニングを計算してインサートする分どうしても遅くなってしまう。

まとめ

今回の実験結果では、パーティショニングのキーとなったプライマリキーの検索ではパフォーマンスは同じであったが、
それ以外のカラムの検索ではパフォーマンスが大きく低下してしまう結果になった。
ただし、24万件ではなく、100万件、1000万件レベルのテストになるとパーティショニングした場合のプライマリキーでの検索に効果が見られる可能性はある。

現時点では他のカラムの検索や、インサートなどのパフォーマンスが劇的に落ちてしまうため、24万レコードレベルのテーブルではパーティショニングは導入すべきでないと考える。

もし、使用するとなれば、アクセスログやクエリーログをテーブル化し、データ量がそれこそ何千万件となったときに効果を発揮するのかもしれない。
是非、大容量のデータでテストをしてみたいが、なんせインサートが遅いのとマシンのスペックが追いつかないため今回は見送らせていただく。

実は仕事でパーティショニングを使ってみたかったが、今回のパフォーマンスではなかなか難しそうだなぁ~

written by YSU \\ tags: ,

12月 08

mysqlパーティショニングのまとめ① - 設定・再コンパイル
mysqlパーティショニングのまとめ② - パーティショニングのタイプ
mysqlパーティショニングのまとめ③ - パフォーマンス
前回の記事では、mysqlのパーティショニングを使うための、mysql本体のセッティングについて述べたが、
今回はパーティショニングの種類について記述していく。

サンプルテーブル

まず、説明を始める前に今回はサンプルとして、郵政省の郵便番号データを扱う以下のテーブルを用意した。
いろいろカラムが分かれているが、code(郵便番号)にたいして、フラグやら県名を保持しているテーブルだ。

CREATE TABLE `postal` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `code` int(7) NOT NULL,
  `ken_kana` varchar(255) DEFAULT NULL,
  `ctiy_kana` varchar(255) DEFAULT NULL,
  `town_kana` varchar(255) DEFAULT NULL,
  `ken` varchar(255) DEFAULT NULL,
  `citiy` varchar(255) DEFAULT NULL,
  `town` varchar(255) DEFAULT NULL,
  `flg1` tinyint(1) NOT NULL,
  `flg2` tinyint(1) NOT NULL,
  `flg3` tinyint(1) NOT NULL,
  `flg4` tinyint(1) NOT NULL,
  `flg5` tinyint(1) NOT NULL,
  `flg6` tinyint(1) NOT NULL,
  `entry` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `town` (`town`),
  KEY `flg1` (`flg1`),
  KEY `entry` (`entry`)
)
DEFAULT CHARSET=utf8
ENGINE=InnoDB;

パーティショニングの種類

さて、本題に入る。
mysqlのパーティショニングには以下の4つのタイプが存在する。

  • RANGEパーティショニング
  • LISTパーティショニング
  • [LINEAR] HASHパーティショニング
  • [LINEAR] KEYパーティショニング

RANGEパーティショニング

LANGEパーティショニングとは、値の範囲を絞って、パーティショニングする方法である。
あくまでも、パーティショニングする値がある程度決まっている場合などに使用できる。
今回は郵便番号は12万レコード前後で推移すると考え、IDを30000毎に区切ってみる。
(サンプルでは、日付で絞る例がおおい)
「ENGINE=InnoDB」の後ろに以下のように書き加える。

DEFAULT CHARSET=utf8
ENGINE=InnoDB
PARTITION BY RANGE (id) (
PARTITION p1 VALUES LESS THAN (30000),
PARTITION p2 VALUES LESS THAN (60000),
PARTITION p3 VALUES LESS THAN (90000),
PARTITION p4 VALUES LESS THAN MAXVALUE
);

LISTパーティショニング

LISTパーティショニングは、あるカラムの値の候補が決まっている場合に使われる。
例えば、性別、誕生月、などであろうか・・・。
今回はいい例ではないかもしれないが、flg1を1,0に分けてみる。
「ENGINE=InnoDB」の後ろに以下のように書き加える。

DEFAULT CHARSET=utf8
ENGINE=InnoDB
PARTITION BY LIST (flg1) (
PARTITION p1 VALUES IN (0),
PARTITION p2 VALUES IN (1)
);

しかし、これはエラーになる。

 A PRIMARY KEY must include all columns in the table's partitioning function

プライマリーはパーティショニングの定義に入れなければならない・・・とのこと。なんやねん。
といわけで、MySQLのパーティショニングで必要そうな工夫を元に以下みたいな書き方をしてみる。

DEFAULT CHARSET=utf8
ENGINE=InnoDB
PARTITION BY LIST (( id * 0 ) + flg1) (
PARTITION p1 VALUES IN (0),
PARTITION p2 VALUES IN (1)
);

うーん・・・いけない・・・。
ちなみに、15.5. パーティショニングの制約と制限によれば、

「パーティショニング表現内の他のカラムを使用してこのテーブルをパーティショニングしたい場合、まず必要なカラムをプライマリキーに追加するか、プライマリキー自体を破棄することでテーブルを改良しなければいけません。将来的に、この制限をMySQLから取り除く方向で開発を進めています。

とのこと。是非、取り除いてほしいですね。
どうやらlistを使用するにはprimaryを外さないと使えなさそうだが、いけてなさすぎるので今回はつかわない。

[LINEAR] HASHパーティショニング

HASHパーティショニングとは、行が格納されるパーティションを算出するのにMOD(剰余)を利用するものである。
RANGEやLISTと違い、あらかじめ値の範囲や候補をしらなくても動的にパーティショニングできる。
また、各パーティショニングのかたよりも無いと思われる。

また、LINER HASHというものがあるが、これは
15.2.3.1. LINEAR HASH パーティショニング
によれば

「リニアハッシュによるパーティショニングの利点は、パーティションの追加、削除、結合、そして分裂のスピードアップが図れることです。これは、大量のデータ(テラバイト級)を含むテーブルを取り扱う際に、効果的です。欠点は、通常のハッシュパーティショニングを使用した時に比べデータがパーティションの間で不均等に割り振られていることがあります。」

とのことらしい、だが計算が難しくてよくわからないが漢(オトコ)のコンピュータ道によれば、

「テーブルが大きい場合にはHASH/KEYではなくLINEAR HASH/LINEAR KEYパーティショニングを利用すること。ただしパーティション数は2の累乗で!」

ということらしい。
なので、HASHを使う場合は「ENGINE=InnoDB」の後ろに以下のように書き加えるとよいだろう。
下記の例だと、idをキーにして1024パーティショニングすることになる。
1パーティショニングあたり、120くらい、めっちゃはやそう。
*1024がパーティショニングの限界値

DEFAULT CHARSET=utf8
ENGINE=InnoDB
PARTITION BY LINEAR HASH (id) PARTITIONS 1024;

[LINEAR] KEYパーティショニング

KEYパーティショニングはPASSWORD()関数を使ってハッシュ値を算出する。PASSWORD関数を利用するので、文字列に対しても利用することが出来る。が、ここでもPrimaryの制約があり使用できそうにない(ためしていない)。
もし、教科書的に書くなら「ENGINE=InnoDB」の後ろに以下のように書き加える感じだと思う。

DEFAULT CHARSET=utf8
ENGINE=InnoDB
PARTITION BY LINEAR KEY(ken) PARTITIONS 1024
);

パーティショニング確認

以上がパーティショニングの説明となる。
これらのテーブルのパーティショニングの状態をチェックするには、

SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME=postal

というSQLを投げれば確認できる。
では、次回はパーティショニングのパフォーマンスについて述べていこうと思う。

written by YSU \\ tags: ,

12月 08

mysqlパーティショニングのまとめ① - 設定・再コンパイル
mysqlパーティショニングのまとめ② - パーティショニングのタイプ
mysqlパーティショニングのまとめ③ - パフォーマンス

mysqlのパーティショニングを試してみたかったが、
私のmysqlではパーティショニングが使えなかったようなので
今日はmysqlパーティショニングの再コンパイルについて

まずは、mysqlのパーティショニングが使えるかどうか調べる。

mysql> SHOW VARIABLES LIKE '%PARTITION%' ;
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.01 sec)

上記のようにhave_partitioningがYESとなっていたら、パーティショニングが使用可能である。
私は使用不可であったので、再コンパイルしなければならない。

まずは念のためmysqlをストップ

/usr/local/mysql/share/mysql/mysql.server stop

*パスは各自のパスをご確認ください。

以前のコンパイルオプションに

--with-ndbcluster--with-partition

をつけて

make
make install

で再コンパイル完了。
ちなみに、以前のコンパイルオプションは
mysqlのソースがはいっているディレクトリに移動して

grep "$ ./configure" config.log

とでも打てばいいだろう。

あとはmysqlを起動して、パーティショニングが使用できることを確認できればOKだ。

/usr/local/mysql/share/mysql/mysql.server start

[おまけ]現在の私のオプション

--with-charset=utf8
--with-extra-charsets=all
--with-mysqld-user=mysql
--with-innodb
--with-falcon
--with-maria
--with-heap
--with-myisam
--enable-local-infile
--prefix=/usr/local/mysql
--with-unix-socket-path=/tmp/mysql.sock
--with-ndbcluster
--with-partition
--with-blackhole-storage-engine

いろんなストレージを試してみたい。

written by YSU \\ tags: , , ,

11月 28

symfonyのインストールが完了したので、
symfonyをつかってHello! World!を出力するまで行う。
symfonyのインストールはコチラを参照。

また、apacheのmod_rewriteというモジュールが必要です。
無い人はインストールしておきましょう。

今回はhelloというプロジェクトを開発し、Hello! World!を出力するアプリケーションを作成します。

まずは、プロジェクトを作ります。
どこでもよいので、プロジェクト用のディレクトリを作成。移動。
ここでは/project/helloがsymfonyコマンドを打つ基本のディレクトリになります。

mkdir /project/hello
cd /project/hello

次に、symfonyのプロジェクトを初期化する。
*symfonyコマンドが打てないならsymfonyにパスを通しておいてください。

symfony init-project hello

次に、アプリケーションを作成する。
今回はhello! world!というプログラムを公開するアプリケーションなので「front」というアプリケーションを作ります。
もし、このプロジェクトを管理する管理画面等を作る場合は、「back」といったアプリケーションを作ります。

 symfony init-app front

さて、ここまできたら/project/hello/web配下にindex.phpというコントローラーが配置されます。
実際にwebでアクセスした際に起動する実行ファイルはこのindex.phpになります。
なので、ここを実行するようにapacheの設定を行います。
例えば、hello.morinoyume.comというドメインなら以下のようになります。
(*hello.morinoyume.comはありませんよ)
ドキュメントルート、DirectlyIndex、Alias /sf...がミソです。
Alias /sfは自分がsymfonyをインストールしたディレクトリのsfを指定してあげましょう!

<VirtualHost *>
    ServerName hello.morinoyume.com
    DocumentRoot /project/hello/web
    ErrorLog logs/hello_error_log
    CustomLog logs/hello_access_log combined

    #php
    AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php-source .phps

    #directry index
    DirectoryIndex index.php

    Alias /sf /usr/local/php/PEAR/data/symfony/web/sf

    <Directory />
      Order Deny,Allow
      Deny from all
      Allow from all
    </Directory>

   <Directory />
     Options All
     AllowOverride All
   </Directory>

</VirtualHost>

この時点で、http://hello.morinoyume.com/にアクセスして、

symfony

「Symfony Project Created」という画面になれば、symfonyのセッティング完了です。
index.phpにアクセスできたにも関わらず、上記のような綺麗な画面にならなければ、「/sf」のAliasの設定が間違っています。
もし、index.phpにアクセスできないようなら、apacheの設定ミスです。

さて、プロジェクトができたら、いよいよモジュールを開発しましょう。
今回はfrontアプリケーションにindexというモジュールを作成して、hello!worldを出力するモジュールを作ります。
もし、Hello!Worldアプリケーションのアカウント登録のインターフェイスを作るなら「account」モジュールなどモジュールを分けてあげましょう。

symfony init-module front index

これで、indexモジュールができました。
/project/hello/apps/front/modules/ 配下にindexモジュールができていることがわかると思います。
次はテンプレートにHello! World!を書きましょう。

vi /project/hello/apps/front/modules/index/templates/indexSuccess.php

に「Hello!World!」と書いてください。

次は、アクション(プログラム)にこのテンプレートを出力するように

  public function executeIndex(sfWebRequest $request)
  {
    return sfView::SUCCESS;
  }

と書きましょう。
これで、完了です。
http://hello.morinoyume.com/index
にアクセスしてみてください。
「Hello!World!」という文字が表示されたら成功です!

だらだらと長くなってしまった・・・
わかりにくい投稿になってしまいましたね・・・。

written by YSU \\ tags: ,

2月 15

wordpressを導入しておよそ2ヶ月がすぎた。
ここで、wordpressの導入後にやるべきことをまとめておこう。
とりあえずやるべきことは以下の項目を行う必要があると考える。

  • 1.wordpressを安全にする。
  • 2.Google Analyticsに登録する。
  • 3.Google AdSenseに登録する。
  • 4.検索エンジンに登録する。
  • 5.サイトマップを送信する。
  • 6.カテゴリを準備する
  • 7.タグを準備する
  • 8.関連記事機能の実装
  • 9.パーマリンクを最適化する。
  • 10.All in One SEO Packの導入。
  • 11.Smart Update Pingerの導入。
  • 12.Ping送信の登録。
  • 13.Yahoo!ログールに登録。
  • 14.ブログランキングに参加する
  • 15.良質な記事を書き続ける

とりあえず上記の内容を行っていれば、wordpressを更新していく上で必要な内容は網羅されていると思う。
逆に上記の内容を行わずに、記事を書き続けてもインターネットの大海原で認知されていくのは難しいだろう。
では一つずつ説明していこうと思う。

1.wordpressを安全にする。

まずは、wordpressを安全にすることを考えなければならないだろう。具体的には、以下の内容をやっておく必要がある。

基本的に一番下のIPレベルで制御だけでもやっておけばかなり安全になるだろう。

2.Google Analyticsに登録する。

これはアクセス解析のために必要である。まずはGoogle Analyticsに登録し、そのあとでwordpress全体にトラッキングコードというのを埋め込めばOKである。トラッキングコードの埋め込みは「Ultimate GA」というプラグインを導入すれば簡単にできる。こちらを参照=>WordPress で Google Analytics を使う。(Ultimate GA)

3.Google AdSenseに登録する。

GoogleAdsenseとはようはアフィリエイト広告を貼り付けることである。Googleが発行したhtmlソースさえ張っておけば、Googleが勝手にコンテンツを解析し、コンテンツに応じた広告を表示していくれるというものである。登録はコチラ
これはかならずしもやっておく必要はないが、ブログをやる以上広告を張っておいたほうがちょっとモチベーションもあがるし、サイト全体もなんとなくにぎやかになる。ただし、Adsenseで儲かるかどうかは別の話である。

4.検索エンジンに登録する。

ここから先はSEOを含むアクセス向上のために行うことである。
そのためにまず必要なのは各検索エンジンに登録しておくことであろう。とりあえず

の上記3つくらいは登録しておいた方がいいだろう。Googleに関しては、必須である。

5.サイトマップを送信する。

サイトマップとは検索エンジンに対して、自分のコンテンツをクロールしてもらうために送信するクローラーに対するサイト内の地図みたいなものである。とりあえず、googleだけでも対応しておくとよいだろう。wordpressのGoogle XML Sitemapsというプラグインを使えば簡単にサイトマップの作成と送信が可能になる。⇒Google Sitemap作成プラグイン[WP]

6.カテゴリを準備する

あたりまえだが、自分の作成するブログに応じてカテゴリははじめからある程度考えておいたほうが良いだろう。
また、カテゴライズすることは人にとって見やすいだけでなく、SEO対策としてもある程度有効だと考えられる。
カテゴライズしたら忘れずにカテゴリ一覧を自分のブログに表示しておこう!インデックス数の増加につながるであろう。

7.タグを準備する

SEOの基本は内部リンクと外部被リンクを増やすことにある。内部リンクを増やすことにおいては、タグはもっとも有効的な方法であろう。
おそらく、最新のwordpressならばデフォルトでタグ機能が実装されているはずだ。
記事を書いたら忘れずにその記事に関するタグ付けを行うとよいだろう。自分のブログにタグ一覧の表示も忘れずに設定しておきたい。
また、SEOだけでなく関連記事の表示にもタグが非常に有効になってくるので、タグは思った以上に重要だと思う。

8.関連記事機能の実装

これは、投稿した記事に関連する記事を自動的に表示してくれる機能のことである。この機能を実装するためには、各記事へのタグ付けが必須である。これをやることにより、内部被リンク数が増加しある程度SEOに効果があるであろう。詳しくは、WordPressで関連記事機能の実装(WordPress Related Posts)を参考にしていただきたい。

9.パーマリンクを最適化する。

デフォルトのパーマリンクは確か「pageid=1」とかになっていてかなりいけていない。
SEO的には、パス(/)で区切ってパラメータではなく、ページ的に表示したほうがよいとされている。とりあえず、

管理画面=>設定=>パーマリンク設定=>カスタム構造

の部分に『/%category%/%postname%/』と記述しておこう。それだけである。

10.All in One SEO Packの導入。

これは、記事のdescroptionやタイトル、keywordを自動で最適化してくれるかなり重要なプラグインである。
これを導入するだけでもtitle , description , keywordはかなり改善されるであろう。
詳しくは、Wordpressの「All in One SEO Pack」プラグインを入れてみた。を参考にしていただきたい。

11.Smart Update Pingerの導入

これは、wordpressからping送信を最適化するためのプラグインである。ping送信とは、ブログが更新されたことをpingサーバーに送信する仕組みなのだが、wordpressのデフォルトでは、修正・更新のたびにpingが送信されてしまうので、pingサーバーに嫌われかねない。それを防ぐためにSmart Update Pingerを導入したほうが良いだろう。詳しくは、Wordpressでping送信を最適化する(Smart Update Pinger)を参考にしていただきたい。

12.Ping送信の登録。

11の項でも説明したとおり、pingとは更新のあったことを送信する仕組みである。
ping送信をする際のURLは、

管理画面=>設定=>投稿設定=>更新情報サービス

に追加することで設定できる。
とりあえず、pingooへの登録とpingooへのping送信設定だけは忘れずにやったおきたい。
あとは、ping送信一覧にあるURLやブログランキングに参加した際に発行されるping送信のURLを忘れずに設定しておこう。

13.Yahoo!ログールに登録。

最初のうちは、ここに登録するだけでもある程度のアクセスが集まる。
登録して自身のブログに貼り付けておこう。=>Yahoo!ログール

14.ブログランキングに参加する

アメブロなどの大規模ブログサービスならともかく、wordpressで孤軍奮闘する場合はどうしてもブログランキング等に参加して、アクセスを集める必要がある。とりあえず登録だけでもしておこう。さらに、できるのであればトラックバックコミュニティなどに参加して積極的に自分のブログをアピールしていく必要がある。とりあえず私は以下のブログランキングに参加した。

全部登録する意味はあまりないだろうが、最低限にほんブログ村Technoratiは登録しておいたほうが良いと感じた。

15.良質な記事を書き続ける

最後にこれがもっとも大切なことであろう。どんなに、すばらしいセッティングを行っていても更新のないブログや中身のないブログはあきられてしまい、アクセス向上にはつながらないであろう。とにかく、日々良質な記事を書くことがブログを立ち上げたあとにやることなのである。
しかし、これが一番難しいのもまた事実である。

最後に

wordpressを導入してすべきことは以上である。
とりあえず、上記をやるだけでも設定・SEO対策として基本的なことは抑えられるだろう。
私がwordpressを導入する際に、下記サイトは本当に参考になった、上記設定を一通り終えた後で下記サイトにも目を通しておくと良いだろう。
(参考)

written by YSU \\ tags: , , ,