Merge branch 'master' into clean-Gemfile
This commit is contained in:
commit
5567308e86
|
@ -7,4 +7,5 @@
|
|||
/pkg/
|
||||
/spec/reports/
|
||||
/tmp/
|
||||
/bin/
|
||||
*.gem
|
||||
|
|
|
@ -16,6 +16,10 @@ Style/Documentation:
|
|||
Style/FileName:
|
||||
Enabled: false
|
||||
|
||||
Style/IndentHeredoc:
|
||||
Exclude:
|
||||
- spec/**/*
|
||||
|
||||
AllCops:
|
||||
Exclude:
|
||||
- vendor/**/*
|
||||
|
|
14
Gemfile
14
Gemfile
|
@ -1,14 +1,14 @@
|
|||
source 'https://rubygems.org'
|
||||
require 'json'
|
||||
require 'open-uri'
|
||||
source "https://rubygems.org"
|
||||
require "json"
|
||||
require "open-uri"
|
||||
|
||||
gemspec
|
||||
|
||||
group :development, :test do
|
||||
versions = JSON.parse(open('https://pages.github.com/versions.json').read)
|
||||
versions.delete('ruby')
|
||||
versions.delete('jekyll-seo-tag')
|
||||
versions.delete('github-pages')
|
||||
versions = JSON.parse(open("https://pages.github.com/versions.json").read)
|
||||
versions.delete("ruby")
|
||||
versions.delete("jekyll-seo-tag")
|
||||
versions.delete("github-pages")
|
||||
|
||||
versions.each do |dep, version|
|
||||
gem dep, version
|
||||
|
|
16
README.md
16
README.md
|
@ -13,8 +13,8 @@ Jekyll SEO Tag adds the following meta tags to your site:
|
|||
* Canonical URL
|
||||
* Next and previous URLs on paginated pages
|
||||
* [JSON-LD Site and post metadata](https://developers.google.com/structured-data/) for richer indexing
|
||||
* [Open graph](http://ogp.me/) title, description, site title, and URL (for Facebook, LinkedIn, etc.)
|
||||
* [Twitter summary card](https://dev.twitter.com/cards/overview) metadata
|
||||
* [Open Graph](http://ogp.me/) title, description, site title, and URL (for Facebook, LinkedIn, etc.)
|
||||
* [Twitter Summary Card](https://dev.twitter.com/cards/overview) metadata
|
||||
|
||||
While you could theoretically add the necessary metadata tags yourself, Jekyll SEO Tag provides a battle-tested template of crowdsourced best-practices.
|
||||
|
||||
|
@ -102,12 +102,15 @@ webmaster_verifications:
|
|||
yandex: 1234
|
||||
```
|
||||
|
||||
* `lang` - The locale these tags are marked up in. Of the format `language_TERRITORY`. Default is `en_US`.
|
||||
|
||||
The SEO tag will respect the following YAML front matter if included in a post, page, or document:
|
||||
|
||||
* `title` - The title of the post, page, or document
|
||||
* `description` - A short description of the page's content
|
||||
* `image` - URL to an image associated with the post, page, or document (e.g., `/assets/page-pic.jpg`)
|
||||
* `author` - Page-, post-, or document-specific author information (see below)
|
||||
* `lang` - Page-, post-, or document-specific language information
|
||||
|
||||
## Advanced usage
|
||||
|
||||
|
@ -191,17 +194,14 @@ The following options can be set for any particular page. While the default opti
|
|||
For most users, setting `image: [path-to-image]` on a per-page basis should be enough. If you need more control over how images are represented, the `image` property can also be an object, with the following options:
|
||||
|
||||
* `path` - The relative path to the image. Same as `image: [path-to-image]`
|
||||
* `twitter` - The relative path to a Twitter-specific image.
|
||||
* `facebook` - The relative path to a Facebook-specific image.
|
||||
* `height` - The height of the Facebook (`og:image`) image
|
||||
* `width` - The width of the Facebook (`og:image`) image
|
||||
* `height` - The height of the Open Graph (`og:image`) image
|
||||
* `width` - The width of the Open Graph (`og:image`) image
|
||||
|
||||
You can use any of the above, optional properties, like so:
|
||||
|
||||
```yml
|
||||
image:
|
||||
twitter: /img/twitter.png
|
||||
facebook: /img/facebook.png
|
||||
path: /img/twitter.png
|
||||
height: 100
|
||||
width: 100
|
||||
```
|
||||
|
|
6
Rakefile
6
Rakefile
|
@ -1,6 +1,6 @@
|
|||
require 'bundler/gem_tasks'
|
||||
require 'rspec/core/rake_task'
|
||||
require "bundler/gem_tasks"
|
||||
require "rspec/core/rake_task"
|
||||
|
||||
RSpec::Core::RakeTask.new(:spec)
|
||||
|
||||
task default: :spec
|
||||
task :default => :spec
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
# coding: utf-8
|
||||
lib = File.expand_path('../lib', __FILE__)
|
||||
|
||||
lib = File.expand_path("../lib", __FILE__)
|
||||
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
||||
require 'jekyll-seo-tag/version'
|
||||
require "jekyll-seo-tag/version"
|
||||
|
||||
Gem::Specification.new do |spec|
|
||||
spec.name = 'jekyll-seo-tag'
|
||||
spec.name = "jekyll-seo-tag"
|
||||
spec.version = Jekyll::SeoTag::VERSION
|
||||
spec.authors = ['Ben Balter']
|
||||
spec.email = ['ben.balter@github.com']
|
||||
spec.authors = ["Ben Balter"]
|
||||
spec.email = ["ben.balter@github.com"]
|
||||
spec.summary = "A Jekyll plugin to add metadata tags for search engines and social networks to better index and display your site's content."
|
||||
spec.homepage = 'https://github.com/benbalter/jekyll-seo-tag'
|
||||
spec.license = 'MIT'
|
||||
spec.homepage = "https://github.com/benbalter/jekyll-seo-tag"
|
||||
spec.license = "MIT"
|
||||
|
||||
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
||||
# delete this section to allow pushing this gem to any host.
|
||||
if spec.respond_to?(:metadata)
|
||||
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
||||
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
||||
else
|
||||
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
||||
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
||||
end
|
||||
|
||||
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
||||
spec.bindir = 'exe'
|
||||
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
||||
spec.require_paths = ['lib']
|
||||
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r!^(test|spec|features)/!) }
|
||||
spec.bindir = "exe"
|
||||
spec.executables = spec.files.grep(%r!^exe/!) { |f| File.basename(f) }
|
||||
spec.require_paths = ["lib"]
|
||||
|
||||
spec.add_dependency 'jekyll', '~> 3.3'
|
||||
spec.add_development_dependency 'bundler', '~> 1.10'
|
||||
spec.add_development_dependency 'rake', '~> 10.0'
|
||||
spec.add_development_dependency 'rspec', '~> 3.3'
|
||||
spec.add_development_dependency 'html-proofer', '~> 2.5'
|
||||
spec.add_development_dependency 'rubocop', '~> 0.37'
|
||||
spec.add_dependency "jekyll", "~> 3.3"
|
||||
spec.add_development_dependency "bundler", "~> 1.10"
|
||||
spec.add_development_dependency "rake", "~> 10.0"
|
||||
spec.add_development_dependency "rspec", "~> 3.3"
|
||||
spec.add_development_dependency "html-proofer", "~> 2.5"
|
||||
spec.add_development_dependency "rubocop", "~> 0.48"
|
||||
end
|
||||
|
|
|
@ -44,7 +44,7 @@ module Jekyll
|
|||
end
|
||||
|
||||
def title?
|
||||
!(@text =~ %r!title=false!i)
|
||||
@text !~ %r!title=false!i
|
||||
end
|
||||
|
||||
def info
|
||||
|
|
|
@ -90,13 +90,15 @@
|
|||
{% endif %}
|
||||
|
||||
{% if page.image %}
|
||||
{% assign seo_page_image = page.image.path | default: page.image.facebook | default: page.image %}
|
||||
{% assign seo_page_image = page.image.path | default: page.image.facebook | default: page.image.twitter | default: page.image %}
|
||||
{% unless seo_page_image contains "://" %}
|
||||
{% assign seo_page_image = seo_page_image | absolute_url %}
|
||||
{% endunless %}
|
||||
{% assign seo_page_image = seo_page_image | escape %}
|
||||
{% endif %}
|
||||
|
||||
{% assign seo_page_lang = page.lang | default: site.lang | default: "en_US" %}
|
||||
|
||||
{% if seo_tag.title and seo_title %}
|
||||
<title>{{ seo_title }}</title>
|
||||
{% endif %}
|
||||
|
@ -109,6 +111,8 @@
|
|||
<meta name="author" content="{{ seo_author_name }}" />
|
||||
{% endif %}
|
||||
|
||||
<meta property="og:locale" content="{{ seo_page_lang | replace:'-','_' }}" />
|
||||
|
||||
{% if seo_description %}
|
||||
<meta name="description" content="{{ seo_description }}" />
|
||||
<meta property="og:description" content="{{ seo_description }}" />
|
||||
|
@ -124,7 +128,7 @@
|
|||
{% endif %}
|
||||
|
||||
{% if seo_page_image %}
|
||||
<meta property="og:image" content="{{ seo_page_image }}" />
|
||||
<meta property="og:image" content="{{ seo_page_image }}" />
|
||||
{% if page.image.height %}
|
||||
<meta property="og:image:height" content="{{ page.image.height }}" />
|
||||
{% endif %}
|
||||
|
@ -133,10 +137,6 @@
|
|||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.image.twitter %}
|
||||
<meta name="twitter:image" content="{{ page.image.twitter | absolute_url }}" />
|
||||
{% endif %}
|
||||
|
||||
{% if page.date %}
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}" />
|
||||
|
|
|
@ -172,7 +172,7 @@ describe Jekyll::SeoTag do
|
|||
context "with relative page.image as a string" do
|
||||
let(:page) { make_page("image" => "/img/foo.png") }
|
||||
|
||||
it "outputs the image" do
|
||||
it "outputs an open graph image" do
|
||||
expected = '<meta property="og:image" content="http://example.invalid/img/foo.png" />'
|
||||
expect(output).to include(expected)
|
||||
end
|
||||
|
@ -181,7 +181,7 @@ describe Jekyll::SeoTag do
|
|||
context "with absolute page.image" do
|
||||
let(:page) { make_page("image" => "http://cdn.example.invalid/img/foo.png") }
|
||||
|
||||
it "outputs the image" do
|
||||
it "outputs an open graph image" do
|
||||
expected = '<meta property="og:image" content="http://cdn.example.invalid/img/foo.png" />'
|
||||
expect(output).to include(expected)
|
||||
end
|
||||
|
@ -191,7 +191,7 @@ describe Jekyll::SeoTag do
|
|||
context "when given a path" do
|
||||
let(:page) { make_page("image" => { "path" => "/img/foo.png" }) }
|
||||
|
||||
it "outputs the image" do
|
||||
it "outputs an open graph image" do
|
||||
expected = %r!<meta property="og:image" content="http://example.invalid/img/foo.png" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
|
@ -200,7 +200,7 @@ describe Jekyll::SeoTag do
|
|||
context "when given a facebook image" do
|
||||
let(:page) { make_page("image" => { "facebook" => "/img/facebook.png" }) }
|
||||
|
||||
it "outputs the image" do
|
||||
it "outputs an open graph image" do
|
||||
expected = %r!<meta property="og:image" content="http://example.invalid/img/facebook.png" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
|
@ -209,17 +209,17 @@ describe Jekyll::SeoTag do
|
|||
context "when given a twitter image" do
|
||||
let(:page) { make_page("image" => { "twitter" => "/img/twitter.png" }) }
|
||||
|
||||
it "outputs the image" do
|
||||
expected = %r!<meta name="twitter:image" content="http://example.invalid/img/twitter.png" />!
|
||||
it "outputs an open graph image" do
|
||||
expected = %r!<meta property="og:image" content="http://example.invalid/img/twitter.png" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
end
|
||||
|
||||
context "when given the image height and width" do
|
||||
let(:image) { { "facebook" => "/img/foo.png", "height" => 1, "width" => 2 } }
|
||||
context "when given an image height and width" do
|
||||
let(:image) { { "path" => "/img/foo.png", "height" => 1, "width" => 2 } }
|
||||
let(:page) { make_page("image" => image) }
|
||||
|
||||
it "outputs the image" do
|
||||
it "outputs an open graph image width and height" do
|
||||
expected = %r!<meta property="og:image:height" content="1" />!
|
||||
expect(output).to match(expected)
|
||||
expected = %r!<meta property="og:image:width" content="2" />!
|
||||
|
@ -257,6 +257,7 @@ describe Jekyll::SeoTag do
|
|||
<!-- Begin Jekyll SEO tag v#{version} -->
|
||||
<title>Foo</title>
|
||||
<meta property="og:title" content="Foo" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<link rel="canonical" href="http://example.invalid/page.html" />
|
||||
<meta property="og:url" content="http://example.invalid/page.html" />
|
||||
<meta property="og:site_name" content="Foo" />
|
||||
|
@ -581,4 +582,38 @@ EOS
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with locale" do
|
||||
it "uses en_US when no locale is specified" do
|
||||
expected = %r!<meta property="og:locale" content="en_US" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
|
||||
context "with site.lang" do
|
||||
let(:site) { make_site("lang" => "en_US") }
|
||||
|
||||
it "uses site.lang if page.lang is not present" do
|
||||
expected = %r!<meta property="og:locale" content="en_US" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
|
||||
context "with page.lang" do
|
||||
let(:page) { make_page("lang" => "en_UK") }
|
||||
|
||||
it "uses page.lang if both site.lang and page.lang are present" do
|
||||
expected = %r!<meta property="og:locale" content="en_UK" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with site.lang hyphenated" do
|
||||
let(:site) { make_site("lang" => "en-US") }
|
||||
|
||||
it "coerces hyphen to underscore" do
|
||||
expected = %r!<meta property="og:locale" content="en_US" />!
|
||||
expect(output).to match(expected)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue