Search Console - ホーム の
構造化データと
どうも
JSON-LD を
0. 前提
以下の
OS
CentOS release 6.7 (Final)Python Version
Python 2.7.8Package (必要そうな
ものだけ 抜粋)
Django (1.10.5)
Mezzanine (4.2.3)
1. 参考に した もの
JSON-LD Blog Post Example Code | Steal our JSON-LD
Blog 投稿用のJSON-LD の Example が 参考に、 なりました。 Blog - schema.org
使用できるプロパティ値の 説明 【徹底解説】
JSON-LDを 使った schema.orgの 記述方法 | 海外SEO情報ブログ
日本語記事、参考に なりました。 Bloggerで
構造化データの エラーが 出てたので schema.orgで マークアップしてみた | 日々の メモ帖 by holidaybuggy1980
BlogPost
の構造化マークアップの 必須属性が 増えたようで その 対応
2. python の json-ld ライブラリ
JSON-LD を
install して
今回は、json
モジュールを
3. Blog の 記事詳細ページに 埋め込む json-ld に ついて
blog のBlogPosting
を
それに
以下、
BlogPost の Molde Field 属性を 取得する
command
python2.7 manage.py shell
script
from mezzanine.blog.models import BlogPost import pprint blogpost = BlogPost.objects.all()[0] pprint.pprint([f.name for f in blogpost._meta.get_fields()]) ------------------------------------ [u'id', u'comments_count', u'keywords_string', u'rating_count', u'rating_sum', u'rating_average', 'site', 'title', 'slug', '_meta_title', 'description', 'gen_description', 'created', 'updated', 'status', 'publish_date', 'expiry_date', 'short_url', 'in_sitemap', 'content', 'user', 'allow_comments', 'featured_image', 'categories', 'related_posts', 'rating', 'comments', 'keywords'] ------------------------------------
Model のmodel.meta.get_fields()
で
Django: Get list of model fields? - Stack Overflow
作成したTemplatetag
mezzanine_extentions_tags.py 作成した
Templatetag
は以下に なります。
JSON-LD Blog Post Example Code | Steal our JSON-LDをベースに 作成した 後、
構造化データ テストツール でテストした ところ、
エラー、警告が 出ていたので、 警告に 対して 対処しています。 1
[1] 具体的に、publisher
、image
の必須エラー(これは shema.orgの 型が 違う エラー)、 mainEntityOfPage
を付けなさいと 警告が 出力されました。 # -*- coding: utf-8 -*- from __future__ import unicode_literals from mezzanine import template from mezzanine.blog.models import BlogPost, BlogCategory import json @register.as_tag def conv_blog_post_to_json_ld(blog=None): """ Get blogpost JSON-LD """ result_dict = { "@context": "http://schema.org", "@type": "BlogPosting", "headline": blog.title, "author": {"@type": "Person", "name": blog.user.first_name}, "publisher": {"@type" : "Organization", "url" : "https://www.monotalk.xyz", "name" : blog.user.first_name, "logo" : { "@type" : "ImageObject", "url" : "https://drive.google.com/uc?export=view&id=0By5O5w7iwOMOVE5pTEcyeE40WlE" } }, "image": { "@type" : "ImageObject", "url" : "https://drive.google.com/uc?export=view&id=0By5O5w7iwOMOMDdhaDhHdXBVTHc","height": 450, "width": 800 }, "mainEntityOfPage":{ "@type":"WebPage", "@id": blog.get_absolute_url_with_host(), }, "genre": ' '.join(map(lambda n:n.title, blog.categories.all())), "wordcount": str(len(blog.content)), "datePublished": str(blog.publish_date), "dateCreated": str(blog.created), "dateModified": str(blog.updated), "description": blog.description } json_o = json.dumps(result_dict, ensure_ascii=True) return json_o
blog_post_detail.html
blog の記事詳細テンプレートに 以下、 記述を 追加しました。
{% load i18n mezzanine_tags mezzanine_extentions_tags %}
のタグ名は、
mezzanine_extentions_tags
は、conv_blog_post_to_json_ld
メソッドの記述先を 記載してください。 {% block blog_post_json_ld %} {% load i18n mezzanine_tags mezzanine_extentions_tags %} {% conv_blog_post_to_json_ld blog=blog_post as json_ld %} {% if json_ld %} <script type="application/ld+json"> {% autoescape off %} {{ json_ld }} {% endautoescape %} </script> {% endif %} {% endblock %}
出力結果
以下のような、スクリプトが 出力されます。
構造化テストツールのテストは 通りましたが、 認識までに 時間が かかるのか、 Google Search Console
上は認識されておらず、
もう少し 様子を みようかと 思います。 <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "BlogPosting", "author": { "@type": "Person", "name": "kem" }, "dateCreated": "2017-03-15 15:14:38.754503+00:00", "dateModified": "2017-03-15 15:14:38.754503+00:00", "datePublished": "2017-03-15 15:12:51+00:00", "description": "PageNavigator の 表示要素として、 PageableListView を使用していたのを、 DataView に書き換えて、Limit Offset を指定できるようにした話を書きます。 ", "genre": "wicket", "headline": "Wicket PageNavigator で表示要素の Limit Offset を指定する", "image": { "@type": "ImageObject", "height": 450, "url": "https://drive.google.com/uc?export=view&id=0By5O5w7iwOMOMDdhaDhHdXBVTHc", "width": 800 }, "mainEntityOfPage": { "@id": "http://www.monotalk.xyz/blog/wicket-pagenavigator-%E3%81%A7%E8%A1%A8%E7%A4%BA%E8%A6%81%E7%B4%A0%E3%81%AE-limit-offset-%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B/", "@type": "WebPage" }, "publisher": { "@type": "Organization", "logo": { "@type": "ImageObject", "url": "https://drive.google.com/uc?export=view&id=0By5O5w7iwOMOVE5pTEcyeE40WlE" }, "name": "kem", "url": "https://www.monotalk.xyz" }, "wordcount": "7849" } </script>
以上です。
コメント