さくらインターネットでContact Form7の確認メールが迷惑メール判定されてしまう場合・・・

さくらインターネットの共用サーバを借りているお客様をWordpressを利用してリニューアルし、フォームにはContactForm7のプラグインを利用したのですがお客様への確認メールが迷惑メール判定されて届かないという現象が頻発しました。

何度かテストをしても、自分の環境では現象を再現できませんでした。しかし、Gmail宛でテストした際、確認メールは届いたのですが送信元に「www9999.sakura.ne.jp 経由」という気になる記述がありました。

上記のように送信元に「経由」が表示される理由がGmailのヘルプに書いてありました。

メールが別のメール サービス経由で送信されたことを示しています。つまり、送信者がサードパーティのメール サービスを使ってこのメールを作成した可能性があることを示しています。たとえば、ソーシャル ネットワーキング サイトのメール機能を使って送信されたメールや、登録しているメーリング リストから送信されたメールなどが考えられます。

Gmail でこの情報を表示する理由は、代理でメールを送信するサービスの多くで、送信者が指定した名前がメール アドレスと一致するかどうかの確認が行われないためです。Google では、知り合いを装ったメールからユーザーを保護しようと努力しています。

送信者名の横に詳細情報が表示される理由 より引用

上記の記載を見ると、メールアドレスの一致確認が取れていないため成りすましメールと判断されて迷惑メール判定されてしまった可能性が高い気がします。そのサイトは独自ドメインで運営していたのでドメインが「sakura.ne.jp」と完全に異なっていたのも多少の影響があるかもしれません。

結局、完全なる原因究明は難しいのでとりあえずの対応策としてsendmailで送るのを外部SMTPサーバー経由で送信できるプラグイン「WP Mail SMTP」を利用してgmail経由で確認メールを送信できるよう変更しました。

WP_Mail_SMTPを利用してGmail経由でメールを送るようにする手順は以下の通りです。

WP Mail SMTP」プラグインをダウンロードして有効化。

設定 > メール をクリックすると設定画面が現れるので以下の通りに入力する。

setting さくらインターネットでContact Form7の確認メールが迷惑メール判定されてしまう場合・・・

From Email:(gmailのアカウント)@gmail.com
From Name:任意
メーラー:「WordPressの全てのメールをSMTP経由で送信する。」を選択

SMTP Host:smtp.gmail.com
SMTP Port:465
Encryption:「SSLを使用する。」を選択
Authentication:「はい: SMTP認証を使用します。」を選択
Username:gmailのアカウント
Password:gmailのパスワード

そしてContactForm7の確認メールの送信元を上記に設定したGmailアドレスに変更して完了です。

対策しても直ぐに有効かどうかは判定しにくい問題なのでとりあえずの処置として経過を見ていくことになりそうです。

最新の記事を探しやすくするGoogle検索テクニック

Google検索における期間指定して検索する簡単なテクニックです。

タイトルだけ見てなんだそんな事かって思った方はその通りの内容なのでこの先を読む必要はないと思います。でも、あまりにも簡単な事なんですが知ってると知ってないで、目的の記事を見つけるスピードが天と地の差になるのでご紹介します。

例えばWordpressで最新のプラグインとかテクニックを検索したい時、キーワード「Wordpress」で検索します。

wordpress1 最新の記事を探しやすくするGoogle検索テクニック

そうすると上記のようにWordpressの公式サイトやウィキペディアなどメジャーなサイトが表示されます。

最新の記事を検索したい場合、検索フォームの下にある「検索ツール」をクリックします。
すると検索オプションが表示されるので「期間指定なし」のプルダウンを押下して「1年以内」を選択してみましょう。

wordpress2 最新の記事を探しやすくするGoogle検索テクニック

すると上記のように1年以内に更新されたサイトが検索結果に表示されますので、最新の記事を検索しやすくなります。

簡単な検索テクニックですが知ってるととても便利です。

パンくずリストをリッチスニペットにしてGoogle対策

サイトのユーザビリティ向上には欠かせないパンくずリスト。単純に作っていたりしませんか?

ちょっとした手間を加えればGoogleにパンくずリストをリストとして認識してもらうことができ、SEO的にも効果があります。

Google では、ページのコンテンツを把握した場合に、ユーザーが特定の検索を行う際に役立つ詳細情報となるリッチ スニペットを作成できます。たとえば、レストランのスニペットであれば、レビューの平均や価格帯などが表示されます。レシピ ページのスニペットであれば、合計所要時間、写真、そのレシピのレビュー評価などが表示されます。音楽アルバムのスニペットであれば、楽曲のリストと各曲の再生リンクなどが表示されます。このようなリッチ スニペットにより、ユーザーが検索キーワードと関連性の高いサイトについて情報を得ることができ、また、そうしたページのクリック数の増加にもつながります。

Googleウェブマスターツール -リッチ スニペットと構造化データについて- より引用

その他ウェブマスターツールには「リッチ スニペットに関するガイドライン」なども書いてあるので一読しておくととても参考になります。Googleが進める施策なのでGoogle検索に対するSEO効果がない訳がないので必須でやっておいた方がよい施策と言ってもいいと思います。ただそれによって検索順位が劇的に上がることもきっとありませんし、やりすぎると逆にスパムと判定されてしまう可能性もあるので、程々にあまり劇的な効果を期待することはないようにすべきですね。

具体例としてノウハウサイトのnanapiを挙げてみます。Googleで「nanapi 恋愛」で検索すると・・・

search result1 パンくずリストをリッチスニペットにしてGoogle対策

Google 「nanapi 恋愛」検索結果

検索結果の2件目の緑色の文字が1件目のようなサイトURLではなく、
「nanapi.jp › 恋愛 › モテる方法 › 非モテを脱出 › 女性向け」のようなパンくずリストが表示されます。

これはGoogleがページスニペットを解読し、検索結果に反映させたことにより表示されました。

これによりGoogleにページ構造をより把握してもらいやすくなるので、SEOにも少なからず効果があると思っていいと思います。

nanapiのパンくずリストは以下のように表示されています。

nanapi パンくずリストをリッチスニペットにしてGoogle対策

nanapiパンくずリスト

そして、htmlには以下のようにリッチスニペットが記載されています。

	<li class="home" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a itemprop="url" onclick="_gaq.push(['track._trackEvent', 'RecipeMain', 'Bread']);" href="/"><span itemprop="title">nanapi トップ</span></a></li>
 <li itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" data-theme-url="love"><a itemprop="url" onclick="_gaq.push(['track._trackEvent', 'RecipeMain', 'Bread']);" href="http://nanapi.jp/love"><span itemprop="title">恋愛</span></a></li>
 <li itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<a itemprop="url" onclick="_gaq.push(['track._trackEvent', 'RecipeMain', 'Bread']);" href="http://nanapi.jp/love/1460"><span itemprop="title">モテる方法</span></a></li>
 <li itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<a itemprop="url" onclick="_gaq.push(['track._trackEvent', 'RecipeMain', 'Bread']);" href="http://nanapi.jp/love/18260"><span itemprop="title">非モテを脱出</span></a></li>
 <li itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<a itemprop="url" onclick="_gaq.push(['track._trackEvent', 'RecipeMain', 'Bread']);" href="http://nanapi.jp/love/690"><span itemprop="title">女性向け</span></a></li>
 <li itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">恋愛残念女子の特徴</span></li>

上記の記載方法は、「microdata」による記載方法です。その他に、「microformats」、「RDFa」などの記載方法があるので、詳しくはGoogleウェブマスターツールのページを参照してみてください。

また、素晴らしいことに設定したリッチスニペットが正しいかどうかをもGoogleウェブマスターツールの
構造化データ テスト ツール」にて確認できます。

このようにひと手間加えれば、Google検索に理解してもらえるような構造にすることができるのでぜひサイト制作に取り入れてみてはいかがでしょうか?

プラグインなしでページナビゲーションをfunction.phpで実現する。

WordPressはプログラムが苦手なデザイナーやコーダーでもプラグインを使えばある程度カスタマイズ出来るのが魅力です。でもあれもこれもプラグインを突っ込むと表示が遅くなったりプラグイン同士がバッティングして動作しなかったりっていうことが結構あります。

めちゃくちゃ便利で色々な事が出来るプラグインでも自分が使う機能はそのプラグインのごく一部でほとんどの機能は不要だったりすることってよくあります。

そんな時は、必要な機能はfunction.phpにちょこちょこっと処理を書いてしまえば自分の望む処理だけを行ってくれるようになるし、自分の好きなようにカスタマイズもしやすいので少しでも知っておくと重宝します。

WordPressのページング処理ではとても有名なWP-PageNaviっていうページナビゲーションを表示するプラグインがあるのですが、今回はこのページナビをfunction.phpに記載して実現する方法をご紹介します。

まずは【function.php】に以下「page_navigation」関数を追加します。


function page_navigation(){
global $wp_rewrite;
global $wp_query;
global $paged;
$paginate_base = get_pagenum_link(1);
if(($wp_query->max_num_pages) > 1){
if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
$paginate_format = '';
$paginate_base = add_query_arg('paged', '%#%');
} else {
$paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/', 'paged');;
$paginate_base .= '%_%';
}
$result = paginate_links( array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $wp_query->max_num_pages,
'end_size' => 1,
'mid_size' => 1,
'current' => ($paged ? $paged : 1),
'prev_text' => '&lt;',
'next_text' => '&gt;',
'type' => 'list'
));
echo '<div id="page_nav" class="clearfix">'."\n".$result."</div>\n";
}
}

次に、呼び出したい箇所で「page_navigation」を呼び出します。


<?php
if(function_exists('page_navigation')) page_navigation();
?>

そうすると以下ように出力されます。


<div id="page_nav" class="clearfix">
<ul class='page-numbers'>
	<li><a class="prev page-numbers" href="http://pearlcourtguesthouse.com/">&lt;</a></li>
	<li><a class='page-numbers' href='http://pearlcourtguesthouse.com/'>1</a></li>
	<li><span class='page-numbers current'>2</span></li>
	<li><a class='page-numbers' href='http://pearlcourtguesthouse.com/page/3/'>3</a></li>
	<li><span class="page-numbers dots">&hellip;</span></li>
	<li><a class='page-numbers' href='http://pearlcourtguesthouse.com/page/9/'>9</a></li>
	<li><a class="next page-numbers" href="http://pearlcourtguesthouse.com/page/3/">&gt;</a></li>
</ul>
</div>

あとは要素やclass名に合わせてスタイルを決めれば自分の好みのスタイルで表示されます。

WordPressのテーマ作成時にcssとjsをfunction.phpに書いておく

twenty twelveのデフォルトテーマからcssとjsをfunction.phpに記載される様になりました。

なぜこの様になったかというと子テーマを作成する際に@importで親テーマのcssを読み込む必要がなくfunction.phpで読み込むことができるようになり何かと便利らしいです。

twenty twelveでのcss、jsは「twentytwelve_scripts_styles」って関数で読み込みされてます。
↓こんな感じ


/**
 * Enqueues scripts and styles for front-end.
 *
 * @since Twenty Twelve 1.0
 */
function twentytwelve_scripts_styles() {
 global $wp_styles;

/*
 * Adds JavaScript to pages with the comment form to support
 * sites with threaded comments (when in use).
 */
 if ( is_singular() && comments_open() && get_option( 'thread_comments' ) )
 wp_enqueue_script( 'comment-reply' );

/*
 * Adds JavaScript for handling the navigation menu hide-and-show behavior.
 */
 wp_enqueue_script( 'twentytwelve-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '1.0', true );

/*
 * Loads our special font CSS file.
 *
 * The use of Open Sans by default is localized. For languages that use
 * characters not supported by the font, the font can be disabled.
 *
 * To disable in a child theme, use wp_dequeue_style()
 * function mytheme_dequeue_fonts() {
 * wp_dequeue_style( 'twentytwelve-fonts' );
 * }
 * add_action( 'wp_enqueue_scripts', 'mytheme_dequeue_fonts', 11 );
 */

/* translators: If there are characters in your language that are not supported
 by Open Sans, translate this to 'off'. Do not translate into your own language. */
 if ( 'off' !== _x( 'on', 'Open Sans font: on or off', 'twentytwelve' ) ) {
 $subsets = 'latin,latin-ext';

/* translators: To add an additional Open Sans character subset specific to your language, translate
 this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language. */
 $subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)', 'twentytwelve' );

if ( 'cyrillic' == $subset )
 $subsets .= ',cyrillic,cyrillic-ext';
 elseif ( 'greek' == $subset )
 $subsets .= ',greek,greek-ext';
 elseif ( 'vietnamese' == $subset )
 $subsets .= ',vietnamese';

$protocol = is_ssl() ? 'https' : 'http';
 $query_args = array(
 'family' => 'Open+Sans:400italic,700italic,400,700',
 'subset' => $subsets,
 );
 wp_enqueue_style( 'twentytwelve-fonts', add_query_arg( $query_args, "$protocol://fonts.googleapis.com/css" ), array(), null );
 }

/*
 * Loads our main stylesheet.
 */
 wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );

/*
 * Loads the Internet Explorer specific stylesheet.
 */
 wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentytwelve-style' ), '20121010' );
 $wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' );
}
add_action( 'wp_enqueue_scripts', 'twentytwelve_scripts_styles' );

うーん難しい・・・(笑)どうやらcssもjsも同様の関数で読み込まれてるみたいですね。

もっと簡単にかつcssとjsを別々に書いてみる

正直ちょっとわかりづらかったので自作テーマを制作する際に、function.phpで、cssとjsを別関数に分けて読み込ませるようにしてみました。

css読み込み関数【set_styles】


//スタイルシート読み込み
function set_styles(){
    wp_enqueue_style('theme-style',get_stylesheet_uri());
}
add_action('wp_enqueue_scripts','set_styles');

js読み込み関数【set_scripts】


//スクリプト読み込み
function set_scripts(){
    if(is_singular() && comments_open() && get_option('thread_comments')){
        wp_enqueue_script('comment-reply');
    }
    if(!is_admin()){
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js');
        wp_enqueue_script('jquery');
        wp_enqueue_script('googlemaps','http://maps.google.com/maps/api/js?sensor=false',array('jquery'),NULL);
    }
}
add_action('wp_enqueue_scripts','set_scripts');

両関数とも「wp_enqueue_scripts」のアクションフックで処理されるので分ける必要は全くないんですけど、とりあえずわかりやすく分けておいた方が後々のメンテナンスが楽になるかなって思いこんな感じに毎回カスタムしてます。

あ、もちろん【wp_head】と【wp_footer】の記述は忘れないようにしましょう。

2013年!WordPress!個人的お勧めなニッチなプラグイン決定版5選!!

WordPress案件が来るたび、良さ気なプラグインを探して色々な人のブログを転々とするんですが結構こんな感じのまとめ記事ってプラグイン探す時の参考になったりするんで自分もとりあえず2013年4月時点のマイブームなプラグイン!メジャーな【ContactForm7】とか【Google XML Sitemaps】とか【Custom Field Template】とかのプラグインは結構色々な人が挙げてるので、自分的によく使うプラグイン5選を挙げてみようと思います。個人的にニッチと思ってるだけで結構な人が使ってるプラグインな可能性もあるけども。

1.Admin Menu Editor

このプラグイン、自分で触らない案件には必ず入れます。Wordpressについてわかりきっているブロガーさんはほぼ不要だと思うけどホームページとかブログとか全く知らないって位の人が触ることが多々あるのでとにかくシンプルな管理画面にすべくWordpress案件には100%入れるプラグインです。

なにができるプラグインかというと管理画面のメニューを消したり隠したりできるプラグインです。
ユーザーが触ることのないというか触ってほしくない「外観」のメニューだったり、設定のメニューだったりをメニューから消すことができます。サブメニューも消すことができるので「投稿」の中の「タグ」とか「カテゴリー」とかも消すことができるし名前も変更することができますよ!

2.BackWPup

これはそんなにニッチじゃないかな?Wordpressのバックアップを取ってくれるプラグインです。

何日おきとか何週おきとかに自動的にバックアップを取ってくれるプラグイン。入れなきゃってきっかけはファーストサーバのダウンのときだったかな。
自分は直接的な被害を受けなかったけどあまりにも多くのところから悲鳴が聞こえてきたのでとりあえず入れました。これでサイトデータふっとばされても安心!!(復旧はやっぱ面倒くさいけどね・・・)

3.PS Taxonomy Expander

これもすごくお世話になってるプラグイン。カテゴリーの表示順序を並び替える【My Category Order】はすごく有名で知ってたけどカスタム投稿とかカスタムタクソノミーとかブログじゃないコーポレートサイト作るときはやっぱすごく使用するので、カスタムタクソノミーの表示順序を変えたいけど【My Category Order】じゃできないっっ!!ってなった時に助けてもらったプラグインです。【My Category Order】もタクソノミー並び替えできるようになってるかもしれないけど自分は今でもこのプラグインにお世話になってます。ちなみにタクソノミーやカテゴリーを投稿一覧に表示できたり、投稿時の選択でセレクトボックスでなくラジオボタンで単一選択させるようにできるいかしたプラグインです!

4.SEO Friendly Images

このプラグインは有名サイトで紹介されちゃったりしてるしニッチじゃないかもしれないけどとりあえず。
不精な自分を助けてくれるプラグインです。投稿にイメージ挿入する際、ちゃんと画像にalt属性入れてれば不要なプラグインだけどやっぱね・・・結構忘れる事が多いです。

そんな人におすすめのプラグイン!!なんと自動でalt入れちゃってくれます。ありがたいっ!!

5.Custom Field Suite

この記事自体正直、このプラグインを紹介したいがために書いたようなものです!!個人的には最高ヒットのプラグイン。直近の案件ですごく助けてもらいました。

よくあるカスタムフィールドのプラグインです。で最近いろんな方がお勧めしている【Advanced Custom Fields】をフォークしたプラグインです。自分は今までずーっと【Custom Field Template】にお世話になってましたがどうしてもカスタムフィールドでやりたい事があったんですけど【Custom Field Template】じゃちょっと実現が難しいなーって事がありました。

それは「繰り返しフィールド」を作ることです。もちらん!【Custom Field Template】もフィールドの繰り返しができますが、自分が知る限りは単一フィールドの繰り返ししかできなかった気がします。そんな時、ググったりして探してたらそれが実現できる【Advanced Custom Fields】を発見!!これは複数フィールドをグループとして繰り返しできてまさにコレ!!っていうプラグインでした。

が、しかし・・・ループ機能は有料オプションでした。それでもこの機能は絶対欲しいって思ってたけど予算も少ないしどうしようかと迷いに迷ったときに発見したプラグインがこの【Custom Field Suite】でした。

【Advanced Custom Fields】の機能ほぼ同等で複数カスタムフィールドの繰り返しも実現できしかも無料!!っていうとってもナイスなプラグインです。

以上が、2013年4月時点のマイブームでニッチなWordpressプラグイン個人的5選です。
今は素晴らしいプラグインの恩恵を受けているばかりですがいつか自分も提供できるようになれたらいいなと思います。

我流!ウェブデザインブログはじめます

たぶん誰の目にも留まることのない記事になると思うけど、何年も寝かしていた中古ドメインをそろそろ有効活用させなきゃなと思いブログをはじめました。無駄にページランク4!!!凄いね!
おかげで自分のブログのURLが全く覚えられない・・・

ブログは何度も始めようと腰をあげてあーだこーだ考えて結局やらないってことを3年位続けていたので、とりあえずバーッと環境用意してデフォルトテーマでババーッと始めました。勢い大事!!あれこれ考えると何にも出来ないってことを3年かけて学びました。

目標は続けること!!ひっそり始めて細く長く、気を張らずにやっていけたらと思います。
幸運にも見てくれる人が少しずつ増えてきたらブログのデザインも変えていこうと思います。

誰も見ていないと思いますがよろしくお願いします。