ラベル seo の投稿を表示しています。 すべての投稿を表示
ラベル seo の投稿を表示しています。 すべての投稿を表示

2015年3月20日金曜日

Googelの検索結果内に検索フォームを表示させる方法

Googelの検索結果内に検索フォームを表示させる方法

Google とかで検索した際に、大きいサイトだと企業名のしたによく検索フォームが表示されているのをよく見かけると思います。

zozo.jpの場合

zozoの検索フォーム

大きな主要サイトだと、Googleが良きに計らってくれて表示させてくれているようですが、

小さなサイトだとなかなかやってくれないようなので、
自分で”もし良かったら、こんな感じでフォーム表示してもらってもいいですか?”的に設定が可能です。

下記より実装方法になります。

実装方法

今回の実装サンプルでは、Ruby on Rails で chema.org と JSON+LDを使っています。

common/_semantic_web.html.erb

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "WebSite",
  "url": "https://www.example.com/",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://www.example.com/search?keyword={keyword}",
    "query-input": "required name=keyword"
  }
}
</script>
* https://www.example.com/の部分はご自分のサイトURLに変更してください

* https://www.example.com/search?keyword={keyword}は自分のサイトの検索用URLを指定してください。

* "query-input": "required name=keyword"は検索フォームに入力されてワードを**keyword**という変数名定義します。そして、**required** をつけることで必須ですよと設定しています。必須でなくても問題ないようであれば、requiredは削除してください。

あとは、共通レイアウト等でrenderして読み込んでください。

layouts/application.html.erb

  (略)

  <%= render('common/semantic_web') %>

  </body>
</html>

まとめ

比較的簡単に設定ができて、SEOにも効果があると思うので、設定してもよいのではないでしょうか。
しかも、検索結果に表示された時にインパクトもありますしね。

参考サイト

今回の実装にあたり参考にしたサイトです。

Goolge 公式

Google ウェブマスター向けブログ

https://developers.google.com/structured-data/slsb-overview

schema.org

http://schema.org/WebSite

http://schema.org/SearchAction

http://schema.org/docs/actions.html

2015年2月25日水曜日

Middlemanでちゃんとsitemap.xmlを生成する方法

以前に簡単にMiddlemanでsitemapを動的に生成する方法という記事をエントリーしましたが、
本当に簡単なサイトマップで、priorityが固定だったり、lastmodがなかったりと手抜きな感じのサイトマップだったので、もう少しちゃんとした、sitemap.xmlを生成でるような設定のメモです。

Gemfileの追加

Gemfileに下記を追加して、bundle install

# https://github.com/jimweirich/builder
# sitemap.xml feed.xml
gem 'builder'

sitemap.xml.builderの作成

source/sitemap.xml.builder を下記のように作成します。

拡張子が.htmlのファイルに対してのサイトマップを生成していきます。

xml.instruct!
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
  sitemap.resources.each do |resource|
    xml.url do
      xml.loc "http://example.com#{resource.url}"
      xml.lastmod File.mtime(resource.source_file).strftime('%Y-%m-%d')
      xml.priority (1.1 - resource.url.count("/") * 0.1).round(1).to_s
      xml.changefreq "daily"
    end if resource.destination_path =~ /\.html$/
  end
end

※ http://example.com部分は、環境に合わせて変更してください。

lastmod

ファイル自体の、最終更新時刻からlastmodを指定しています。

priority

priorityはroot直下の階層が1.0
2階層目が0.9
2階層目が0.8

と階層を追う毎に0.1づつpriorityが下がっていきます。

changefreq

changefreqは、上記の書き方では、daily固定になっています。
上記に合わせて、値を変更してください。

値 説明
always 毎回内容が更新
hourly 1時間毎に変更
daily 1日毎に変更
weekly 1週間毎に変更
monthly 月毎に変更
yearly 年毎に変更
never 基本変わらないページ

また、urlのpath等をみて、振り分けを行ってもよいと思います。

sitemap.xmlの作成

後は、以下を実行しれば、build/sitemap.xmlが生成されるので確認して、サーバーにアップしてください。

middleman b

2015年2月12日木曜日

簡単にMiddlemanでsitemapを動的に生成する方法

Middleman環境で、動的にsitemap.xmlを動的に生成する方法です。

特に、gem等は利用せずに、erbファイルから生成する方法になります。
SEO的にも最低限 サイトマップは用意しておくべきだと思います。

以下がその手順になります。

sitemap.xml.erbの生成

source/sitemap.xml.erbを下記のように作成します。

<% pages = sitemap.resources.find_all{|p| p.source_file.match(/\.html/) } %>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
pages.each do |p|
  <url>
    <loc>http://www.example.com/<%= p.destination_path.gsub('/index.html','') %></loc>
    <priority>0.5</priority>
  </url>
<% end %>
</urlset>

上記の場合、build時に生成される、htmlファイルにたいして、priorityを全て0.5を設定するようになっています。

必要があれば、pages.each do |p| の ループの中でディレクトリ名を見ながら、
以下の値を変更していってください。

<lastmod> 最終更新日
<changefreq> 更新頻度
<priority> 優先順位

sitemapのタグの定義方法に関しては、Goolge - サイトマップを作成する を参考ください。

config.rbへの設定追加

config.rbに以下を追加します。

page "/sitemap.xml", :layout => false

上記で、生成した、source/sitemap.xml.erbを元に、/sitemap.xml を生成してくれます。

ためしに、以下にアクセスして、saitemapが取得できれば成功です。

http://localhost:4567/sitemap.xml

まとめ

比較的簡単に、saitemapの生成が可能です。
細かく設定していこうとすると大変かもしれませんが、必要最低限のサイトマップの生成はできると思います。

参考サイト

http://benfrain.com/understanding-middleman-the-static-site-generator-for-faster-prototyping/

2015年1月28日水曜日

Middlemanでmetatagを設定する方法

MiddlemanでMetatagを設定する方法です。
通常のメタタグとオープングラフ、Twitter Cardも合わせて設定しています。

metatag用のGemもあるようですが、今回はそれは使わずに、
各ページのフォーマッタからメタ用の情報を設定したものを、親のレイアウトで受け取ることを想定しています。

layoutの編集

layoutのメタタグ部分を以下のように編集する。

  <title><%= (current_page.data.title).present? ? "#{(current_page.data.title)} | SITE NAME" : 'SITE NAME' %></title>
  <meta name="keywords" content="<%= data.page.keywords %>">
  <meta name="description" content="<%= data.page.description %>">
  <%# OGP %>
  <meta content="<%= data.page.og_title %>" property="og:title"/>
  <meta content="<%= data.page.og_type %>" property="og:type"/>
  <meta content="<%= data.page.og_description %>" property="og:description"/>
  <meta content="http://www.example.com/<%= data.page.og_url %>" property="og:url"/>
  <meta content="SITE NAME" property="og:site_name"/>
  <meta content="http://www.example.com/<%= data.page.og_image %>" property="og:image"/>
  <meta content="99999999999999" property="fb:app_id"/>
  <%# Twitter card %>
  <meta content="summary" property="twitter:card"/>
  <meta content="@xxxxxxxxx" property="twitter:site"/>

各ページのFrontmatterの編集

各ページのFrontmatter部分を以下のように編集する。

---
title: 'ページタイトル'
keywords: キーワード1, キーワード2, キーワード3
description: 'メタ説明。あああああああ'

og_title: 'OPG用ページタイトル'
og_type: 'website'
og_description: 'OPG用メタ説明。あああああああ'
og_url: 'index.html'
og_image: 'img/index/sample.png'
---

2015年1月7日水曜日

robots.txtにサイトマップを指定する方法

検索エンジンのクローラにサイトマップの場所を教える方法です。

robots.txtに下記のように追加して、自分のサイトのsitemapの場所を指定します。

Sitemap: http://ore-tech.blogspot.com/sitemap.xml

全体的には、こんな感じでしょうか。

User-agent: *
Disallow: 

Sitemap: http://ore-tech.blogspot.com/sitemap.xml

補足

ウェブマスター ツールのrobots.txtの記事を読んでいたら下記の記載がありました。

robots.txt ファイルが必要になるのは、サイトに Google などの検索エンジンのインデックスに登録したくないコンテンツがある場合のみです。サイト全体が Google のインデックスに登録されるようにする場合は、robots.txt ファイルを(空のものでも)作成しないでください。

登録したくないコンテンツがある場合のみでだそうです。
Sitemap指定だけに作った方がよいのか不安になるところですが
私は、上記のように全て許可でSitemapを指定するようにしています。

robots.txtの指定の仕方によってはクロールが行われないこともありますので
取り扱いには十分注意してください。あくまで自己責任でお願い致します。

参考サイト

検索エンジンのクローラに通知

2014年11月28日金曜日

Rails でサイトマップ目的のRSSフィードを配信する

概要

GoogleがXMLサイトマップとRSSの両方を送信することを推奨しているようなので、XMLサイトマップと追加でRSSを設定するようにしました。
RSSをwebマスターツールに登録するにあたって、当然のことながらRSS自体を配信できるようにします。

実装

rss配信用のcontrollerを作成するような設計にしました。
そこから、商品であったりブログであったりのRSSを生成していくことを想定しています。

routes.rd

resources :rss, :only => [:index] do
    member do
      get "blog"
    end
  end

rss_controller.rd

# -*- encoding : utf-8 -*-
class RssController < ApplicationController


  def blog

    start_id = params[:id].to_i
    @blogs = Blog.order('updated_at desc')
    @blogs = @blogs.where('id >= ? AND id < ?', start_id, start_id + 500)

  end

end
最大で、500件づつ区切って指定することを想定しています。

blog.rss.builder

xml.instruct! :xml, :version => "1.0"
xml.rss("version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
  xml.channel do
    xml.title 'ブログRSSテスト'
    xml.link 'http://www.sample.com/blogs'
    xml.description "新着ブログのお知らせ"
    xml.language "ja-jp"
    xml.ttl "40"

    @blogs.each do |blog|
      xml.item do
        xml.title blog.title
        xml.description blog.description if blog.description.presents?
        xml.pubDate blog.updated_at.in_time_zone("Asia/Tokyo").to_s(:rfc822)
        xml.guid blog_url(blog.code)
        xml.link blog_url(blog.code)
      end
    end
  end
end
実装は、というような感じです。

webマスターツールへの設定

あとは、webマスターツール > サイトマップ画面 > [サイトマップの追加/テスト] ボタンをクリックして以下のようにURLを指定します。
rss/1/blog.rss
rss/500/blog.rss
rss/1000/blog.rss

2014年11月18日火曜日

画像をロスレス圧縮する方法

googleのPageSpeedで分析をかけたら、画像をロスレス圧縮するように言われたので、その対応方法です。

PNG画像

PNGの圧縮はtinypng (https://tinypng.com/)

JPEG画像

jpegの圧縮はmedia4x (http://media4x.com/)
いずれのサイトも、D&Dで画像を圧縮した画像をダウンロードできます。

結果

PNGで試したところ、以下のようにサイズが小さくなりました。
2.7KB => 804B
1.1KB => 159B
コツコツやっていけば、相当量のサイズ削減できるかもしれないです。

2014年11月14日金曜日

Railsでmeta-tagsやOpen Graphを設定する方法

SEO対策として、Railsのmeta-tagsを設定するために、GitHub - kpumuk/meta-tags を使ったやりかたです。

Gemのインストール

Gemfileに下記を追加して、bundle install
# https://github.com/kpumuk/meta-tags
gem 'meta-tags'

書き方

以下の様にset_meta_tagsして、<%= display_meta_tags %>場合のシンプルな例です。
<% set_meta_tags :title => ‘Member Login’ %>
Member Login

<% set_meta_tags :site => ‘Site Title’, :title => ‘Member Login’ %>
Site Title | Member Login

<% set_meta_tags :site => ‘Site Title’, :title => ‘Member Login’, :reverse => true %>
Member Login | Site Title

Open Graph

Open Graphの設定は下記のように行います。

書き方

set_meta_tags 
  :title => 'item AAAA',
  :og => {
         :title => "Member Login",
         :type => 'website',
         :url => 'https://www.sample.com/',
         :site_name => 'SITE',
         :description => '説明アアアア',
         :image => 'https://www.sample.com/logo.jpg'
 }
}
とすると、下記のようになります。
<meta content="product" property="og:type" />
<meta content="https://www.sample.com/" property="og:url" />
<meta content="SITE" property="og:site_name" />
<meta content="説明アアアアア" property="og:description" />
<meta content="https://www.sample.com/logo.jpg" property="og:image" />
typeは色々とあるようなので、ページに適宜指定してください。
詳しくは、下記のページを参照ください。
https://developers.facebook.com/docs/reference/opengraph
ちなみに、topページにはwebsite を商品ページには、productを指定したりしています。

app_idの取得

それから、facebookのapp登録をして、app_idを取得します。
Appの登録は下記より行ってください。
https://developers.facebook.com/apps
登録したapp_idをもとに、meta-tagにapp_idも設定します。
<meta property="fb:app_id" content="111111111111111" />
※ 111111111111111部分に取得した、app_idを指定

設定の確認

Open Graphの確認は下記から確認できます。
https://developers.facebook.com/tools/debug/og/object/

Twitter Cards

summaryカード

上記のOpen Graphの設定を行っておくと、Twitter Cardsの指定が、かなり簡単になります。
<%
set_meta_tags :site => 'RESTIR リステア',
                     :reverse => true,
                     :og => {
                       ・・・・・・
                     }
                     :twitter => {
                             :card => 'summary',
                             :site => '@twitter_id',
                     }
%>                    
twitterのcardとsiteを指定すれば、あとの画像や説明は、Open Graphから取得してくれます。

Productカード

Productカードの設定サンプルは下記です。
Open Graphが未設定な状態を想定して書きました。
brand_name = 'BrandA'
item_name = 'ItemA'

set_meta_tags 
  :title => 'item AAAA'
  :twitter => {
                         :card => 'product',
                         :site => '@twitter_id',
                         :domain => 'www.sample.com',
                         :title => "#{brand_name} - #{item_name}",
                         :description => '説明AAAAA',
                         :image => ['http://www.sample.com/item-img.jpg',
                                    {       :width => 207,
                                            :height => 234
                                    },
                         ],
                         :label1 => 'BRAND',
                         :data1 => brand_name,
                         :label2 => 'PRODUCT NAME',
                         :data2 => item_name
                 }
とすると、下記のようなタグが発行されます。
<meta content="product" property="twitter:card" />
<meta content="@twitter_id" property="twitter:site" />
<meta content="www.sample.com" property="twitter:domain" />
<meta content="BrandA - ItemA" property="twitter:title" />
<meta content="説明AAAAA" property="twitter:description" />
<meta content="http://www.sample.com/item-img.jpg" property="twitter:image" />
<meta content="BRAND" property="twitter:label1" />
<meta content="BrandA" property="twitter:data1" />
<meta content="PRODUCT NAME" property="twitter:label2" />
<meta content="ItemA" property="twitter:data2" />
imageに指定する画像サイズは160 x 160pxが推奨されています。
imageのwidthとheightを指定すると、縦横比を維持してくれるようです。
GitHubの公式サイトをみると下記のようにしてしていますが
:image => {
    :_      => "http://example.com/1.png",
    :width  => 100,
    :height => 100,
  }
下記のように指定した方が、きれいにタグが生成されました。
:image => ["http://example.com/1.png",
  {
    :width  => 100,
    :height => 100,
  }
]

その他

SEOの効果出て欲しいです。
経過を見守ります。

参考サイト

Twitter Card

2014年11月6日木曜日

Googleアナリティクスのイベント トラッキングを設定する方法

Googleアナリティクスでクリックしたボタンを計測したい時など、イベントトラッキングを設定することで、計測が可能になります。

jQueryでの実装

コードは以下のようになります。

$('.button').on('click', function() {
  ga('send', 'event', 'button', 'click', 'nav-buttons', 4);
});

ga 関数の send コマンドを利用します。


旧バージョンはこちら

  $('.button').on('click','a',function(event) {
        _gaq.push(['_trackEvent', 'button', 'click', 'nav-buttons', 4])
  });

オプション

値 型 必須 説明
Category String ○ 通常は操作対象のオブジェクト(例: button)。
Action String ○ 操作の種類(例: click)。
Label String イベントの分類に便利(例: nav-buttons)
Value Number 正数値を指定する必要があります。

2014年10月31日金曜日

Railsでsitemap_generator使ってS3にサイトマップを作成する方法

Railsでサイトマップを作成して、登録する方法です。
サイトマップの生成は、GitHub - kjvarga/sitemap_generatorのGemを利用して行います。
また、サイトマップ自体はアマゾンのS3に保存しておきます。

インストール

Gemfileに下記を追加して、bundle install

gem 'sitemap_generator'

設定ファイルの作成

下記を実行して、config/sitemap.rb を作成します。

rake sitemap:install

サンプルコード

本来であれば、上記で生成されたconfig/sitemap.rbに設定を書けばよいと思いますが、
rakeでサイトマップ生成とS3のアップロードを行うようにしました。

コードは以下のような感じです。

  namespace :batch do
    desc 'サイトマップを作成して、S3にアップする。'
    task :create_site_map => :environment do |task|
      success_msgs = []
      success_msgs << 'success'

      batch_start_at = Time.now
      puts "run #{task.name} with env: #{Rails.env} : #{batch_start_at}"

      begin

        SitemapGenerator::Sitemap.default_host = 'http://ore-tech.blogspot.jp/'
        SitemapGenerator::Sitemap.public_path = 'tmp/'

        SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new({
            :aws_access_key_id    => 'xxxxxxxxxxxxxxxxxxxxxxxxx',
            :aws_secret_access_key => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            :aws_region            => 'ap-xxxxxxx-1', # リージョン 東京の場合、ap-northeast-1
            :fog_provider          => 'AWS',
            :fog_directory         => 'bucket-name' # bucket name
        })
        SitemapGenerator::Sitemap.sitemaps_host = 'http://bucket-name.s3-ap-xxxxxxx-1.amazonaws.com'

        site_maps_path = 'sitemap/'
        unless Rails.env == 'production'
          site_maps_path = "sitemap/#{Rails.env}/"
        end

        SitemapGenerator::Sitemap.sitemaps_path = site_maps_path

        SitemapGenerator::Sitemap.create do

          # home
          add '/home', :changefreq => 'daily', :priority => 0.9

          # contact 
          add '/contact_us', :changefreq => 'weekly'

          # Blog
          group(:sitemaps_path => site_maps_path, :filename => 'blog') do
            Blog.all.each do |blog|
              add blog.url, lastmod: blog.updated_at
            end
          end

        end

        if Rails.env == 'production'
          SitemapGenerator::Sitemap.ping_search_engines
        end

        batch_end_at = Time.now
        puts "end time : #{batch_end_at}"
        puts "Processing time #{batch_end_at - batch_start_at}"

      rescue => e
        puts "error occurred batch : #{Time.now}"
        puts "error occurred batch : #{e.message}"
      end

    end
  end

サイトマップ生成の設定

サイトマップ生成の設定は、主に下記の部分で行っています。

SitemapGenerator::Sitemap.default_host = 'http://ore-tech.blogspot.jp/'
SitemapGenerator::Sitemap.public_path = 'tmp/'

SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new({
    :aws_access_key_id    => 'xxxxxxxxxxxxxxxxxxxxxxxxx',
    :aws_secret_access_key => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    :aws_region            => 'ap-xxxxxxx-1', # リージョン 東京の場合、ap-northeast-1
    :fog_provider          => 'AWS',
    :fog_directory         => 'bucket-name' # bucket name
})
SitemapGenerator::Sitemap.sitemaps_host = 'http://bucket-name.s3-ap-xxxxxxx-1.amazonaws.com'

site_maps_path = 'sitemap/'
unless Rails.env == 'production'
  site_maps_path = "sitemap/#{Rails.env}/"
end

SitemapGenerator::Sitemap.sitemaps_path = site_maps_path

上記設定を行った場合、下記の場所にサイトマップ用のファイルが生成されます。

application側

/tmp/sitemap/blog.xml.gz
/tmp/sitemap/sitemap.xml.gz
/tmp/sitemap/sitemap1.xml.gz

S3側

/bucket-name/sitemap/blog.xml.gz
/bucket-name/sitemap/sitemap.xml.gz
/bucket-name/sitemap/sitemap1.xml.gz

また、下記を行っているので実行されるenv環境によって、生成されるファイルの場所が異なります。

site_maps_path = 'sitemap/'
unless Rails.env == 'production'
  site_maps_path = "sitemap/#{Rails.env}/"
end

production => /bucket-name/sitemap/
staging => /bucket-name/sitemap/staging/blog.xml.gz
development => /bucket-name/sitemap/development/blog.xml.gz

サイトの登録

主には以下の部分で、ページを登録しています。
add メソッドでページ単位で登録していきます。

SitemapGenerator::Sitemap.create do

   # home
   add '/home', :changefreq => 'daily', :priority => 0.9

   # contact 
   add '/contact_us', :changefreq => 'weekly'

   # Blog
   group(:sitemaps_path => site_maps_path, :filename => 'blog') do
     Blog.all.each do |blog|
       add blog.url, :lastmod => blog.updated_at
     end
   end

 end

addメソッドのオプション

:changefreq

ページの予想される更新頻度
デフォルトは、weekly

設定可能な値は以下の通り

  • always:アクセスがあるたびに内容を更新するページに使用します。
  • hourly
  • daily
  • weekly
  • monthly
  • yearly
  • never: アーカイブ ページの URL に使用します。

:priority

サイト内のURLの優先順位を指定します。
0.1(重要でない)~1.0(重要)の範囲で指定します。
デフォルトは 0.5

ここの数値で、掲載順位には影響はないようです。

:lastmod

最終更新日を指定します
デフォルトは Time.now 現在日時

:host

ホストを指定します。
デフォルトはdefault_hostの値。
loginページなど、https://xxxxxなどに変更したい時などに使えると思います。

:expires

有効期限を設定可能です。

group

groupを使うことで、別ファイルで管理することができます。

サイトマップの登録

routes.rb

Googleのウェブマスターツールに /sitemapと登録させるために
routes.rbでS3のサイトマップのパスへリダイレクトさせます。

 match '/sitemap'  =>  redirect('http://backet-name.s3.amazonaws.com/sitemap/sitemap.xml.gz')

robots.txt

検索エンジンのrobot用に以下を追加

Sitemap: http://backet-name.s3.amazonaws.com/sitemap/sitemap.xml.gz

参考サイト

Goolge サイトマップを作成する

2014年10月4日土曜日

Bloggerのサイトマップを登録する方法

Bloggerのサイトマップを登録するには、atomを使うのが楽チンです。
googleのウェブマスターツールのサイトから、サイトマップの追加テストから追加します。
記事数が500以下の場合
atom.xml?redirect=false&max-results=500
記事数が501以上に達したら、サイトマップを追加で
atom.xml?redirect=false&max-results=500&start-index=501
500件単位で、start-indexを1001 => 1501 => 2001と増やしていくとどんどんサイトマップに記事ページが送信されます。
1000件ぐらい記事を追加できるように頑張りたいもんです。

statistics