CircleCI Gem Version Maintainability


Let's create Structured Data that's correct, every single time.

Google Search works hard to understand the content of a page. You can help us by providing explicit clues about the meaning of a page . . .


Let's say you have a Rails app. If you put this in a controller:

@public_law =
  name:             'Public.Law',
  founder:  'Robb Shecter'),
  founding_date:, 3, 6),
  founding_location: 'Portland, OR'),
  email:            '',
  url:              '',
  logo:             ''

...and this in a template:

<%= @public_law %>'ll get this HTML:

<script type="application/ld+json">
  "@context": "",
  "@type": "Organization",
  "name": "Public.Law",
  "email": "",
  "url": "",
  "logo": "",
  "foundingDate": "2009-03-06",
  "founder": {
    "@type": "Person",
    "name": "Robb Shecter"
  "foundingLocation": {
    "@type": "Place",
    "address": "Portland, OR"

Strong typing is at work here. SchemaDotOrg will validate your code, and if correct, will generate JSON-LD markup. Notice how the foundingDate is in the required ISO-8601 format. The founding date must be a Ruby Date object and so we can ensure correct formatting. In the same way, the foundingLocation is a Place which adds the proper @type attribute.

You cannot create invalid markup

E.g., If you use the wrong type or try to set an unknown attribute, SchemaDotOrg will refuse to create the incorrect JSON-LD. Instead, you'll get a message explaining the problem: 12345)
# => ArgumentError: Address is class Integer, not String
  address: '12345 Happy Street',
  author:  'Hemmingway'
# => NoMethodError: undefined method `author='

This type safety comes from the ValidatedObject gem.

The Goal: Rich enough vocabulary for Google parsing

The plan is to implement a subset of types and attributes relevant to the Google web crawler. See test-script.rb for the supported types. Currently, all the attributes are required. Propose new types and attributes by opening an Issue.


Add this line to your application's Gemfile:

gem 'schema_dot_org'

And then execute:

$ bundle

Or install it yourself as:

$ gem install schema_dot_org


After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install.


Bug reports and pull requests are welcome on GitHub at


The gem is available as open source under the terms of the MIT License.