ZEN_SEO is a clean way of managing your meta tags for resources

Install

Hope all of us are at least on Rails3 and moving to upcoming Rails4(unsupported for now)

    # Gemfile
    gem 'zen_seo'

Then run the install generator, that will create migration(MongoDB is on the routemap) for the SEO model.

    rails generate zen_seo:install

Usage

Pick up a resource to grant a promotable behavior

Model

   #app/models/post.rb
   has_seo

This will try to call title, description, keywords on your model to fill in seo fields, optionally you can supply a hash, that redefines the methods to be called

   #app/models/post.rb
   class Post < ActiveRecord::Base
     attr_accessible :body, :tags, :title
     has_seo :description=>:body, :keywords=>:make_keywords

     private
     def make_keywords
       self.tags.gsub(/:/, ', ')
     end
   end

Excessive options

Note that you can pass excessive options that meta_tags support through :options key like so:

   #app/models/post.rb
   class Post < ActiveRecord::Base
     attr_accessible :body, :tags, :title
     has_seo :description=>:body,
                :options=>{
                    :og => {
                      :title    => :title,
                      :type     => 'website',
                      :image    => 'http://now.com/you_rock.jpg'
                    }
                }
   end

Controller

ZEN_SEO heavily based on meta_tags gem, so set it up as normal.

When your layout contains

    #application.html.erb
    <head>
      <%= display_meta_tags default_meta_tags %>
    </head>

now in controller you can use meta_tags_for helper

    #posts_controller.rb
    # GET /posts/1
    # GET /posts/1.json
    def show
      @post = Post.find(params[:id])
      meta_tags_for @post
      respond_to do |format|
        format.html # show.html.erb
        format.json { render json: @post }
      end
    end

Form

To set meta tags for your resource just put fields_for :seo in your form. Like this:

  <h3>Make yout post seo-friendly</h3>
  <%= f.fields_for :seo do |seo| %>
    <div class="field">
      <%= seo.label :title %><br />
      <%= seo.text_field :title %>
    </div>
    <div class="field">
      <%= seo.label :keywords %><br />
      <%= seo.text_field :keywords %>
    </div>
    <div class="field">
      <%= seo.label :description %><br />
      <%= seo.text_area :description %>
    </div>
  <% end %>

Note on Patches/Pull Requests

  • Any help on issues-fighting(or finding) and testing is highly appreciated

Developed by Sergey Prikhodko Copyright (c) 2013. See LICENSE for details.