WooCommerceの基本 商品登録(基本的な商品)編

WooCommerceの基本 商品登録(基本的な商品)編

デジタルドリームワークスからHigaです。
さて最近ではWooCommerceを使用したサイト制作の機会もいくつか出てきました。
以前にも何度かWooCommerceについての記事を投稿しています。

カスタマイズや機能拡張がフォーカスされがちですが、実際基本機能でどれだけのことが出来るのでしょうか。
今回からしばらくWooCommerceの基本機能を集中的に確認していきたいと思います。

WooCommerce最新版(現在 2.6.4)をインストールして勉強していきます。
インストールや初期セットアップは比較的簡単ですので説明を省きました。
最新版をインストールして気付いた事は、旧バージョンでは日本語化の作業が必要だった覚えがありますが、セットアップ無しにすぐに日本語表示になりました。

それでは本題の商品登録(基本的な商品)を進めていきます。

「商品」の項目から「商品を追加」を選択します。

タイトル(商品名)、本文は通常の投稿画面と同じですね。
商品画像や商品ギャラリーの項目もデフォルトでは左に表示されています。こちらは説明いらずですね。
その下にWooCommerceのメタボックスが追加されています。

まず初めに「商品データ」を選択していきます。
標準では4つの商品タイプが用意されいます。

● 基本的な商品
● グループ化された商品
● 外部/アフェリエイト商品
● バリエーションのある商品

 

161007-pict02

 

それぞれ表示される項目などが変わりますので投稿を分けて確認していきます。
今回は「基本的な商品」を確認。

基本的な商品には以下の項目が用意されています。

 

【商品データ】項目

● バーチャル(出荷が必要無い商品を取り扱う)
● ダウンロード可能(その名の通りダウンロード商品を取り扱う)

ポイント:
基本的な商品の他、配送無しの商品やダウンロード可能商品も取り扱いが可能です

 

———-

【一般】項目

● 標準価格(料金)
● セール価格(セール価格はセール期間を指定することが可能)
● 税状況(課税をするか、配送にのみ課税するか、課税しないかを設定出来る)
● 税区分(税区分では税率を変更したり出来る??)

ポイント:
セール価格は1期間しか設定出来きません。複数期間ある場合は一度キャンペーン終了後、期間の再登録が必要です。
また税区分は商品に対して税率を変えて課税を行うことが出来るようですが現状出来ませんでした。設定ミス??
色々と試しましたが、追加設定した税区分を選択しても保存すると標準にもどります。今のところ商品毎に税率を変更する場面に遭遇していないので様子を見ます。

 

———-

 

161007-pict02

【在庫】項目

● SKU(商品コード登録)
● 在庫管理をしますか?(在庫管理をするか否か)
● 在庫状況
● 個別販売(1点もの商品などの場合に1つだけ購入出来る様にします)

※在庫管理をしますかにチェックを入れた場合
● 在庫数
● バックオーダーを受け付けますか(在庫がゼロになっても購入を受付けるか否か)
● 在庫状況(在庫数があっても在庫切れ表示が出来ます)

ポイント:特に無し

 

———-

 

161007-pict03

【配送方法】項目

● 重さ
● 大きさ
● 配送区分

ポイント:
重さや大きさは商品ページ追加情報に表示されます。
配送方法部分は少し複雑でしたので後日まとめる予定です。
今回は詳しい事はスルー。
最新バージョンでは以前自分がさわったときより大きく変わっていました。
配送区分は「WooCommerce」->「設定」->「配送方法」->「配送クラス」より項目追加可能

 

———-

 

161007-pict04

【リンクされている商品】項目

● アップセル

● クロスセル
● グループ分け

ポイント:
アップセルは関連商品のような感じで表示されます。デフォルトでは「あたなの好みかも…」という感じ
クロスセルはアップセルと似ていますが、カート内に表示されます。また既にカートに入れてある商品はこの枠から除外される優れもの
グループ分けは今回設定出来ませんでした。グループ化された商品タイプで使用するのかもしれません。今後の投稿で!

アップセルの設定をすると…
商品詳細の説明下に「あたなの好みかも…」で表示されます。
161007-pict07

クロスセルを設定すると…
商品がカートに入れられると、「興味がある可能性アリ…」かもという感じでカート内に表示されます。
161007-pict08

 

———-

 

161007-pict05

【属性】項目

● カスタム属性

ポイント:
左のメニュー「商品」->「属性」から登録すれば全ての商品で共通の属性項目を設定出来ます。
カスタム属性は、商品毎に別属性を追加する役割のようです。
また基本的な商品では属性毎に料金を設定する事は出来ません。あくまでも項目を表示する役割となっています。
属性毎に料金を設定するには商品タイプをバリエーションのある商品にする必要があります。

 

———-

 

161007-pict06

【高度】項目

● 注意事項
● 表示順番(商品一覧ページで表示順を変更する)
● レビューを有効にする

ポイント:なし

注意事項は、カート内に商品が追加された際に表示されます。また同様に注文完了メールにも記載される仕組みです。

カート内、注文完了メールに以下のように表示される…

 

161007-pict09

 

161007-pict10

 

ふー、以上長々と文章が続きましたが、商品登録(基本的な商品)を確認していきました。
属性別に料金が変わらない商品は簡単に作成出来そうです。(属性別に料金が変更になる場合は、バリエーションのある商品で登録)
ほとんどが入力部分に説明がついており、項目の機能が分かりますね。
配送部分については少し複雑なので注意が必要ですが、初期で設定を行えば商品登録時はそれぞれ項目を選択していくだけですお客様の負担も少ないと感じます。
多機能過ぎて使わない項目も多々出てきそうですね。
煩わしいので設定項目を消す方法も追々調べていきたいと思います。

情報がおかしい部分がありましたらぜひコメントいただけると幸いです m(_ _)m

EC-CUBE3系 on Plesk! Plesk搭載サーバーでEC-CUBE3系を動かしてみる!

20160628-pict01

デジタルドリームワークスから比嘉です。
今回はPleskが搭載されているサーバーへのEC-CUBEのインストールを行ってみました。
composerを利用したインストールもあるようですが、まだ深く理解出来ていないので今回はファイルをアップしてインストールを行いました。

さて、本題です。
Pleskは標準で搭載されているPHPのバージョンが低いため色々と大変です。
こちらの環境では以下のような作業を踏んでとりあえずインストールまでこぎつけました。

1. Pleskへ新しいバージョンのPHPをインストール
2. FastCGIによるセッションパスの変更
3. PDOモジュールを利用可能に設定
4. PHP タイムゾーンの修正

1. Pleskへ新しいバージョンのPHPをインストール

Plesk搭載サーバーはサーバー管理がとても便利でサイト運営しやすいのですが、その分自由度が落ちる部分もあります。
とくにネックとなるのがPHPのバージョンです。
標準のPHPバージョンが低いため動かないシステムもあります。
自力でPHPをバージョンアップするとPleskがエラーを起こすなど難しい部分がありました。
しかしPleskのバージョンも上がり、環境によってはPHPの高いバージョンがインストール出来たり、複数のPHPバージョンを入れることが出来る様になっているみたいです。
今回試してみた環境は、後者の複数のPHPバージョンのインストールが提供されていました。
Pleskバージョンにより違いはあると思いますが、以下の方法でEC-CUBEが動作するバージョンをインストール。

※ 参照 https://kb.plesk.com/jp/125146

色々と記述されていますが、やったことは
サーバー管理「ツールと設定」->Plesk項目「アップデートおよびアップグレード」->「コンポーネントを追加/削除」->「ウェブホスティング機能」よりEC-CUBEの動くバージョンのPHPをインストールするだけです。

これでホスティング設定よりPHPのバージョンを選択出来る様になります。
ただしインストールしたPHPはFastCGIでしか動作しません。
ここからが試行錯誤の始まりでした。

2. FastCGIによるセッションパスの変更

PHPのバージョンもクリアしたので早速EC-CUBE3系をサーバーへアップ、アクセス権を変更してインストール画面にアクセスします。
するとセッションディレクトリが書き込み&読み込み出来ませんとエラーが出ます。

RuntimeException in NativeFileSessionHandler.php line 52:
Session Storage was not able to create directory “/var/lib/php/session”

これはPHPをFastCGIで実行しているため、実行権限がFTPユーザーになるのが理由のようです。
そこでセッションのパス(session.save_path)を変更します。

まずセッションのディレクトリを作成

mkdir /var/www/vhost/domain.tld/private/php_sess
chown [ftpuser]:psacln /var/www/vhost/domain.tld/private/php_sess
chmod 0700 /var/www/vhost/domain.tld/private/php_sess

※ 参照 https://kb.plesk.com/jp/7056

次にセッションパスの変更

通常はphp.iniを修正しても良いのですが、複数ドメイン管理しているので、Plesk上のPHP設定から「session.save_path」を変更します。
apacheを再起動します。

3. PDOモジュールを利用可能に設定

さてセッションの問題もどうにか解決し、インストールステップを踏めるようになりました。
早速ステップを進めていきます。ところがSTEP3でストップ orz.
エラーの文章を読む感じではPDO部分でエラーが発生している様子でした。
そこでphp.iniを確認し、PDOモジュールを読み込み出来る様に設定します。
こちらもPlesk上で行えそうでしたが、他のドメインでも拡張しても問題ないと判断しphp.iniを修正

;extension=php_pdo.dll

extension=php_pdo.dll

apacheを再起動して再度アクセスすると、すぐにSTEP3が表示されてステップが進めません。
どうもインストール時のキャッシュがどこかで保存されている模様です。
これがどうもよく分からず、今回は再度ファイルをアップし直して、最初からインストール手順を進めました。

4 PHP タイムゾーンの修正

さー、これで大丈夫かと思ったのですが、どうも最後のステップ5で動作が強制的に終了して真っ白な画面になります。
エラーログを見る感じ、FastCGIのリクエストが多いことが原因と思いましたが…
最終的には根本的な問題、タイムゾーンを修正していんトール完了!

date.timezone = Asia/Tokyo

20160628-pict02

さてー、記述してしまえばそこまで長い道のりではないですが試行錯誤をしたため数日を要しました。
管理画面へのログインやフロントページ等、特に問題は無さそうですがここまでの道のりを見ると、本番環境で利用するにはもう少し様子を見た方が良さそうです。
間違えている情報やこんなやると簡単など、情報があればぜひコメントをいただけると幸いです。
よろしくお願い致します。

またサーバーの環境により同じやり方でも上手くいかなかったり、設定変更によりサーバー全体に影響を及ぼしたりします。
みなさんバックアップ等、もしくは設定を元に戻せる状態の準備をして、自己責任で慎重に作業を行いましょう。
EC-CUBE3の情報がまだまだ少ないですが、問題解決の糸口になれば…

CakePHP2.x リレーションシップ(アソシエーション)のまとめ…

さて表題通り、CakePHPにはモデル間のアソシエーションを定義することでリレーショナルデータベースを構築できます。
CakePHP には4つのアソシエーションが用意されています。hasOne, hasMany, belongsTo, そして hasAndBelongsToMany (HABTM) です。
Cookbookには以下のように説明がされています。

hasOne(1 対 1)
hasMany(1 対 多)
belongsTo(多 対 1)
hasAndBelongsToMany(多 対 多)

言い換えると以下のような感じになる。

hasOne:相手テーブルに、自分テーブル.idの外部キーをもっている(この外部キーはユニークである)
hasMany:相手テーブルに、自分テーブル.idの外部キーをもっている(この外部キーは複数ある)
belongsTo:自テーブルに、相手テーブル.idの外部キーをもっている
hasAndBelongsToMany:中間テーブル テーブル1とテーブル2の情報をもっている

※「hasOne」と「hasMany」の関連性はほぼ同じですが、ユーニークかじゃないかの違いみたいです。

少し具体的な部分をCakePHPのCookbookを見ながら理解を深めていきます。

20160617-pict01


【hasOne】

class User extends AppModel {
    public $hasOne = array(
        'Profile' => array(
            'className' => 'Profile',
            'conditions' => array('Profile.published' => '1'),
            'dependent' => true
        )
    );
}

UserテーブルとProfileテーブルがあります。
Profileテーブルは、1つのUser.id(ユーザーid)を持っていることになります。
hasOneですので、 プロフィール情報は1つユーザーに1つしかない。当たり前ですが、このような関係をhasOneで定義します。

———

20160617-pict02


【hasMany】

class User extends AppModel {
    public $hasMany = array(
        'Comment' => array(
            'className' => 'Comment',
            'foreignKey' => 'user_id',
            'conditions' => array('Comment.status' => '1'),
            'order' => 'Comment.created DESC',
            'limit' => '5',
            'dependent' => true
        )
    );
}

UserテーブルとCommentテーブルがあります。
Commentテーブルは、ユーザーid情報を持っています。Commentテーブルには同じユーザーidを持っているレコードが複数存在します。
1ユーザーが複数のコメントを投稿出来るため、ユーザーとコメントの関連性はhasManyで定義することになります。

———

20160617-pict03


【belongsTo】

class Profile extends AppModel {
    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id'
        )
    );
}

さてbelongsToの定義です。
先ほどhasOneの定義で、UserモデルからProfileモデルにアクセスできるようになりました。
視点を逆にしてみます。プロフィールテーブルにはユーザーid(外部キー)を含んでいるため、Userテーブルに属しているということになります。
その場合にProfileテーブルは、UserテーブルとbelongsToの関係で定義することになります。

———

20160617-pict04


【hasAndBelongsToMany (HABTM)】

class Recipe extends AppModel {
    public $hasAndBelongsToMany = array(
        'Ingredient' =>
            array(
                'className' => 'Ingredient',
                'joinTable' => 'ingredients_recipes',
                'foreignKey' => 'recipe_id',
                'associationForeignKey' => 'ingredient_id',
                'unique' => true,
                'conditions' => '',
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'finderQuery' => '',
                'with' => ''
            )
    );
}

最後にhasAndBelongsToManyです。こちらは中間テーブルとなります。
上記を例にすると、Recipeテーブル、Ingredientテーブルがあり、それをRecipe_Ingredientで紐づけるイメージです。

ということでCakePHP2.xのアソシエーションについてメモしました。
皆さんもご存知の通りすでにCakePHPは3系がリリースされています。
自分はこれから3系についても勉強をしていきますが、ファイル構成を眺めただけでも大分2系とは違いがありそうです。
ですがきっとこれまで勉強していた2系がベースとして役立つと思います。
新しい技術習得に努めていきたいと思います。

間違っていることや分かりやすい考え方、3系での違い等の情報があれば、ぜひコメントを残していただけると嬉しいです。
よろしくお願い致します。m(_ _)m

タイトル通り複数のカスタムフィールドの値で投稿をソートする

デジタルドリームワークスからHigaです。

タイトル通り複数のカスタムフィールドの値で投稿をソートする方法について。
良く出てくる案件と思いますので、メモしておきます。

 

1. クエリの書き換え(ソート)について(通常のソート)

WordPressで投稿の並び替えをする際には「orderby」や「order」などクエリのパラメータを指定して変更出来ます。

例:最近の投稿をタイトル順に並べる

[php]
10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ( $postslist as $post ) :
setup_postdata( $post ); ?>





[/php]

※Wordpress Codexより
https://wpdocs.osdn.jp/テンプレートタグ/get_posts

 

2. クエリの書き換え(ソート)について(pre_get_postsについて)

また自分は単純にメインループのクエリをかえる場合は「pre_get_posts」のアクションフックを使用してfunction.phpに記述しちゃいます。
その方がそれぞれのテーマに記述する必要が無く、function.phpの1ファイルで管理出来るので便利です。
こんな感じになります。

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'posts_per_page', 10 );
$query->set( 'order', 'ASC' );
$query->set( 'orderby', 'title' );
}
}
add_action( 'pre_get_posts', 'get_post10by_title' );
?>
[/php]

 

3. クエリの書き換え(ソート)について(1つのカスタムフィールド値でソート)

さて前置きが長くなりました。
今回複数のカスタムフィールドでソートをする場合についてです。
通常1つのカスタムフィールドでソートする場合は、以下のように簡単にできます。
しかしこれでは2つのカスタムフィールドではソート出来ませんでした。

カスタムフィールドKey:「custom_key01」でソート

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'order','ASC' );
$query->set( 'orderby','meta_value_num' );
$query->set( 'meta_key','custom_key01' );
}
}
add_action( 'pre_get_posts', 'get_post_sortby_customkey' );
?>

[/php]

 

4. クエリの書き換え(ソート)について(複数のカスタムフィールド値でソート)

2つのカスタムフィールドでソートする場合は以下のように記述する必要がありました。

カスタムフィールドKey:「custom_key01」、「custom_key02」でソート

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'orderby', array(
'meta_custom_key01' => 'ASC',
'meta_custom_key02' => 'ASC'
)
);
$query->set('meta_query',
array(
'meta_custom_key01' => array(
'key' => 'custom_key01',
'type'=>'DATE' //それぞれに合うタイプを指定
),
'meta_custom_key02' => array(
'key' => 'custom_key02',
'type'=>'TIME' //それぞれに合うタイプを指定
)
)
);
}
}
add_action( 'pre_get_posts', 'get_post_sortby_customkey2' );
?>
[/php]

という感じでキーを「meta_query」でキーを指定してあげると良いようです。
かなり端折ったので例では上手く動作するか不安ですが、考え方が分かればこのような感じで出来ます。

実は別件でtaxonomyでソートも行いたかったのですが、どうしても上手くいかず、時間の都合上断念。
色々と便利なWordpressですので、出来ないことはないはず…
こちらはまた検証してみます。

記事情報の誤りや、別の方法でのやり方などありましたらコメントいただけると嬉しいです!
またtaxonomyでソートについてもコメントいただけると!

WordPress マルチサイト(サブドメイン型) SSL対応を試してみる

20160411-pict01

こんにちは。
デジタルドリームワークスからHigaです。

早速ですが表題通り マルチサイトのSSL対応を確認していました。
ネット上でもWordpressのシングルドメインやサブディレクトリ型については、検索で多くがヒットしますが
マルチサイト、サブドメイン型についてはあまり確認することが出来なかったので確認してみました。

 

結論としては、問題なく対応出来ました。※テスト環境でですが…

 

サブドメイン型の場合、サブドメイン毎にSSL証明書を取得するか、サブドメインを全て1つの証明書を網羅出来るマルチドメイン、ワイルドカード証明書が必要になります。
コスト面だけを考えればマルチサイト、ディレクトリ型の方が良いですね。
しかし色々なサイト運営の形態があるので、一概には言えませんが…
2016年4月現在でもSSL証明書はかなり安くなっています。
もう少し下がるのか、GoogleのSEO的側面(SSL対応へのランキングの影響)も含めて検討&提案していきたいところですね。

個人の意見としては、SSLはセキュリティーの観点から もちろん導入するべきと思います。
しかしSEOのランキングに大きく影響するという観点だけを見るのであれば、現状ではもう少し時間がかかると感じます。
もちろんGoogleさんもSSLをランキングの指標に入れると宣言していますし、現在も加味しています。今後 徐々に大きく影響してくるのは確実ですが…
SSLはもちろんですが、それにも増して猛プッシュしている、AMPなどのスマホ対応が急務と思っています。

 

———-

 

さて、本題に戻りましてWordpress マルチサイト(サブドメイン型) SSL対応のメモです。
流れとしては、

1. サーバのSSL環境を整える
2. WordPressのSSL対応化
3. WordPressデータのSSL対応とポストデータのSSL対応
4. SSLのチェックとhttpアクセスの際の考慮

というながれでしょうか。
いくつかメモを残しておきます。

 

1. サーバのSSL環境を整える

サーバーのSSL環境についてはOSやそれぞれの環境により異なると思いますので各サーバーで適切に設定を行って下さい。

 

2. WordPressのSSL対応化

WordPressのSSL対応化についてですが、プラグインがあったりもするようですが今回はプラグインを入れずに対応しました。
ネット上で検索をすればシングルサイトについては管理画面->一般設定の項目からすぐに出来るようです。
マルチサイト(サブドメイン型)は管理画面から変更が出来ないので、データベースのデータを直接httpsに変更します。

 

3. WordPressデータのSSL対応とポストデータのSSL対応

この項目は上記の2とかぶるところですが、テーマ内に直接記述した「http://〜」はすべて「https://〜」に変更が必要です。
※プロトコル相対URLがベターみたいです。
またWordpressのポストデータなども画像等はすべて「http://〜」で記述されているので変更が必要になります。
かなり面倒な作業になります。
未確認ですがphpMyAdminなどが入っている環境であれば、SQLコマンドで一括変換など出来ると思います。
自分の場合は、SQLコマンドについて自信が無かった為、一度phpMyAdminからバックアップデータを取り、テキストエディタで一括変換。
再度データをアップする方法をとりました。それでも問題なくて出来ました。

 

4. SSLのチェックとhttpアクセスの際の考慮

どれだけ慎重に確認しても、修正漏れは出てきます。
https対応化はすべての読み込むファイルをhttps化した方が良いそうです。
chromeの場合は、httpで読み込むコンテンツがあると警告が出るので、そこら辺で読み込むデータをすべてhttps化していきます。
プラグイン周りもチェックが必要みたいです。
そして最後にhttpのアクセスをhttpsへ301リダイレクトします。
実際のコードは検索すれば出てきますので省きます。

 

 

さあ、長々と文章が続きましたがいかかでしょうか。
難しいかなと思っていた作業も案外いけました。
ただ作業量としては項目3あたりから多くなりますね。
またこちらの作業はすべてテスト環境で試した為、本番環境での作業は少し不安なところもあります。
SSL証明書はテスト用を発行していただけるところもありますので、そちらを利用して検証する方がより本番環境に近い形で検証出来るのでおススメです。

安全なWebアクセスの為、そして将来は必須となってくるであろうSSL対応についてメモでした。
内容に間違いがある場合や、簡単なやり方もあるよなどご意見などございましたらコメントいただけると幸いです。
それではよろしくお願い致します。m(_ _)m

AMPの下調べ (実践前)

デジタルドリームワークスからHigaです。
さてGoogleが猛プッシュ中のAMPについて下調べしました。
今後弊社のブログにも導入していきたいと思います。

AMPについての概要は以前に投稿した記事をご確認下さい。
http://blog.ddwnet.com/archives/1190.html

さてそれではAMPのコードを見ていきましょう!

20160328-pict02

上記が推奨されるampの雛形です。
HTMLのコーディングをしている方であれば、それほど難しくないですね。
しかしAMP独自の記述もありいくつか注意が必要です。

● htmlタグにはamp属性を入れましょう。
● canonical要素には通常記事のURL、もしくはAMP版ページしか無い場合は、AMPページのURLを記述します。
● viewport要素は「initial-scale=1」が望ましいようです。
● スキーマタグでセマンティックウェブへの対応
● AMP JS ライブラリーの読み込みとAMPスタイルの読み込み

という感じでしょうか。それに加えて以下も気をつけてましょう!
従来通りCSSで装飾を行っていきますが、AMPではhead内にインラインで以下の様に記述していきます。

[css]

[/css]

imgダグはAMP独自タグ(amp-img)だったりするようです。
その他、AMP独自タグがあったり、非推奨タグなどもあり、詳細はACCELERATED MOBILE PAGES PROJECTを確認してみましょう。

それでは次回 実際に記述してみたいと思います。

参考
ACCELERATED MOBILE PAGES PROJECT
https://www.ampproject.org/

20160328-pict01

SPFレコードを公開しよう!

20160318-pict01

メールのやり取りで、正当なメールが迷惑メールに振り分けられる場合がよくあります。
特にGmailへ送信する場合は、必ずと言っていいほど問題になります。
そんなときにはSPFレコードを確認しましょう!

現在では迷惑メール対策の一つとして送信ドメイン認証SPFレコードの確認を行っているプロバイダーや携帯会社が多いです。
送信ドメイン認証SPFレコードの公開は、DNSレコードに1行レコードを追加するだけで手軽に設定出来ます。
もう設定済みですよ!という方も多いと思いますが…

 

SPFレコードの設定

SPFレコードは対応していないリゾルバやDNSサーバーが存在するためTXTレコードとSPFレコードの両方を記述します。
自分が調べた感じでは、多くの記事ではTXTレコードのみを紹介していたのでTXTレコードのみの記述で問題ないようです。
シンプルな書き方はこんな感じかな。環境や記述されているDNSレコードにより異なると思いますが…

 

20160318-pict02

 
記述方法も多くあり、また紹介している記事も多数ありますので「SPF設定方法」などで検索してみて下さい。

またSPFレコードは記述ミスがあると無視されてしまいますので、最後にチェックをお忘れなく!
SPFチェック出来るサイトもいくつかあるようです。
自分は以下で確認しています。

http://mxtoolbox.com/spf.aspx

というわけで迷惑メールに振り分けられたり、メール拒否対策としてSPFを取り上げました。
しかし様々な要素が判断材料となり迷惑メールや拒否の振り分けをしていますので、これですべて解決するわけではありません。
でも1つの判断材料をクリアする事で少しは問題回避の糸口とあるかもしれませんね。
それでは!

間違っているところや別の方法などがあるという方は、ぜひコメントいただければと思います。

サーバーの負荷を考える(メールサーバー)…

postfix

デジタルドリームワークスから比嘉です。
さてサーバーを持っていると必ずと言っていいほど打ち当たるのが負荷問題です。
一時的なものであればまだ良いのですが、頻繁に負荷がかかり処理が出来なくなる状況であれば対策をねらなければなりません。
そもそもスペック的な問題なのか、一部のシステムが高負荷になり全体に影響を与えているのか。
ログを確認しても難しい部分もあります。

今回はメールサーバ(Postfix)を見ていきます。
弊社の環境ではメールサーバーが負荷を与えている状況ではありませんでしたが、改善出来るポイントを確認してみました。

※以下のチェック項目はあくまでPostfixの他の部分(スパムメールの踏み台にされない)など 適切な設定を行っている場合の追加チェックポイントみたいなものです。

 

———-

 

/etc/postfix/main.cfを確認していきます。

 

1. unknown_local_recipient_reject_code 項目の確認

「unknown_local_recipient_reject_code」の項目は名前通り、宛先ユーザーが存在しない場合のresponse codeの設定です。
バージョンが古いpostfixでば、「450」となっている場合があるようです。

コード「450」の場合は一時的にメール配送ができない状態を表し、時間をおいて再送される仕組みになっています。
宛先ユーザーが存在しない場合でも設定されている期間内で繰り返しメールを配送しようと処理するので「450」の場合は「550」修正します。
※ コード「550」は宛先ユーザーが存在しないということで即座に拒否(送り返す)します。

unknown_local_recipient_reject_code = 550

色々と記事を見ていると配送設定の期間もデフォルトではいけませんよ 的な記事もありました。

【 参考 】

Postfixの再送設定はデフォルトだとちょっとお人よしですよ

minimal_backoff_time =
maximal_backoff_time =
maximal_queue_lifetime =
bounce_queue_lifetime =
queue_run_delay =

 

2. エラーメールの返信ポリシーを検討する

宛先ユーザーが存在しない場合はエラーメールとして送り主にエラーメールが返信されます。
しかしスパムメールは送り主を偽装して実在しないメールからメールを送信されたかのようになっている場合があり、エラーメールが送信出来ずにサーバー内に溜まっていく場合があります。
調べた結果、管理者によりエラーメールの設定ポリシーは異なるようです。

1. 従来通りエラーメールを送り主に送信(サーバー内に溜まるエラーメールを定期的に削除?)
2. エラーメールを送信せずそのままサーバー内で削除

1の場合は送信者がエラーでメールが届いていないことが分かるメリットがありますが、サーバーに溜まるエラーメールを削除する必要がありそうです。
2の場合は溜まったメールを処理する手間は省けますが、メールが届いてない場合も確認出来ないなどの問題が出てきそうです。

どちらもメリット、デメリットがあります。
そして一般的な設定はどうなっているのでしょうか。気になるところですがその部分を確認することは出来ませんでした…
ご存知の方がいらっしゃいましたらコメントいただけると幸いです m(_ _)m
弊社のサーバー環境も確認&検討してみようと思います。

Google マップの上位表示の要因メモ

20160115-higa-pict01

 

お客様からGoogle マップ上位表示についてチラッと話が出たのでメモ。
Googleマップの上位表示についてまとめてみました。

1. Google マイビジネスの登録
2. ホームページと登録したGoogle マイビジネスの情報の統一
3. サイテーションを増やす

様々な要因があるようですが、自分としての最も重要な部分は上記と思いました。

 

1. Google マイビジネスの登録(無料)

・正確な情報を入力する
・入力出来る項目は出来るだけ入力する
・適切なカテゴリへの登録

Google マイビジネスへの登録自体が重要なのではなく、登録する際に正確な情報を入力することが重要です。
業務内容に合ったカテゴリの登録や紹介文などにはキーワードを盛り込んだ文章にすると良いそうです。
ホームページに記載されているビジネス名や住所、電話番号もGoogle マイビジネスの情報と完全一致させることも重要だそうです。

沖縄県宜野湾市大山6-27-11
沖縄県宜野湾市大山6丁目27番地11

など意味は同じでも、少し違う書き方をすると良くないようで統一すること。

 

2. ホームページと登録したGoogle マイビジネスの情報の統一

項目1とかぶりますが、Google マイビジネスに登録した情報とビジネス名や住所、電話番号もGoogle マイビジネスの情報を統一させる。
また登録したURLのページのtitleに都市名を入れて地域性を持たせた方が良いそうです。

 

3. サイテーションを増やす

協力していただける方などがいれば、協力してもらいサイテーションを増やしていきましょう!

 

「住所」、「電話番号」の完全一致ということは各店舗ごとにGoogle マイビジネスを登録が必要そうですね。
サポートページに一括アップロードツールなどもありました。

https://www.google.co.jp/business/faq.html

Google Maps iframeでホイールスクロールを無効

デジタルドリームワークスから比嘉です。
たぶん「こんなの知ってるよ!」というくらい、ちょっとしたメモです。

ホームページにGoogle Mapsを組み込むことは多々あります。
Google Maps APIを使用すればよりカスタム性は上がりますが、そこまでは…
という方にはGoogle Mapsの「共有」から組み込みコードを取得してコピペで簡単に導入出来ます。

Google Maps 非常に便利ですが、少し気になる部分も出てきます。
ページの表示速度が遅くなること。そしてページをスクロールする際にマップの上引っ掛かることがあります。
実際に試して下さい。

 

 

スクロール中にマップにさしかかると、マップのズームが反応してスクロールの妨げになります。
PCの場合はカーソルをマップからずらせば問題ないですが、スマホとかだと画面一杯に表示されていて面倒だったりもします。
Google Maps APIで回避する方法は以前から知っていましたが、iframeでも簡単に回避できるようです。

ちなみに、Google Maps APIでは、以下のようにマウスホイールのオプションを付与することで回避出来ます。

scrollwheel: false

 

[javascript]

[/javascript]

 

そしてGoogle Maps iframeの場合は、こちらもめちゃくちゃ簡単でした 笑
iframeのスタイルに、pointer-events無効のスタイルを入れるだけ。

pointer-events: none;

 

[html]

[/html]

 

 

スクロールがマップにさしかかってもズームが回避されてスムーズにスクロール出来ると思います。

 

—–

 

ここ数年はスマホ、タブレットに対応したサイト制作が増えましたね。
今年もサイト制作の上でスマホやタブレット対応は必須、重要となってきますが、
さらにスマホでもより使いやすいサイト設計へとステージアップ、レベルアップしていきたいと思います。
今年もどうぞよろしくお願い致します!