Slides: bit.ly/datalayer2
SEO dataLayer2:
Entity Wars
Welcome Back
Phil Pearce
Analytics Freedom Fighter
www.linkedin.com/in/philpearce
Web Analytics
Exchange
mentor
750 GA
questions answered
Tracking
protection
group
Agenda
1. A possible Dark Future
2. Battlefield report: Before vs After
3. Arming-up
1. Enabling markup (Cheat sheets & templates)
2. Shooting range (UI for enabling)
3. Testing it worked
4. JSONLD Listeners
5. A new future
Everyone thought Google was the Bad guy…
…they were wrong!
2020: Facebook Network introduce a
new search engine called Mercury, it
used Machine Learning & Facebook`s
database to return the perfect
answer to any question.
Google became an obsolete business model
It did`nt have access to the rich structured user & content data stored
in Facebooks proprietary database.
Google was missing a semantic understanding layer.
Realising its mistake, Google sent
a machine readable data
alternative back in time
Thus began the entity wars…
I`m here to Arm you
with the tools you
will need to enable
machine readable
dataLayer
The name of this
mark-up is called…
JSON-LD Corners
What is JSON-LD video
https://www.youtube.com/watch?v=vioCbTo3C-4
And https://www.youtube.com/watch?v=XXw8g-FbemI#t=251
Does Anyone know what the
LD stands for in JSON-LD?
Audience Question….
LD = Likes Die!
Benefits of JSON-LD
1. Increases organic CTR (Google & Bing)
2. Allows for Action buttons when signed-in
3. Allows you to leverage offsite markup (via LD)
4. Extra organic impressions in card carousal
5. Requirement for AMP pages (e.g News markup)
6. Allows for contentGroups & remarketing
7. Also works in webmail aswell
JSON-LD adoption rate - increasing
http://trends.builtwith.com/docinfo/JSON-LD
Facebook like button adoption - flat growth
bit.ly/entity-day
Timeline to Entity Day… Ramping up!
Arming your SEO
team…
“Schema Markup Generator”
Future Action:
Use
playground
technicalseo.com/seo-tools/schema-markup-generator/
“JSON-LD playground”
Future Action:
Use
playground
json-ld.org/playground/
http://peadig.com/wordpress-plugins/structured-social-profiles/
https://wordpress.org/plugins/structured-social-profiles/
Wordpress plugin for JSON-LD
1. Inline MicroData converted to JSONLD for Courses
bit.ly/rdfa-to-jsonld
2. JS variables converted to JSONLD for Restaurants
bit.ly/js-to-jsonld
Heavy lifting in JS using GTM…
GTM JSON-LD example source code…
JSON script are
downloadable
from here:
login:coolgtmstuff
@gmail.com
pw:philrulesgtm8
Auto config import file:
bit.ly/winningthewar6
Winning the war examples…
bit.ly/winningthewar35
2. Microdata >> JSON-LD convertor
bit.ly/winningthewar5
https://www.schemaapp.com/schema-markup-automation/
https://www.schemaapp.com/?wvideo=jz49i69b7p
Of if you are really F**king lazy & don’t want to do
any work… (automatic method)
Pro Tip… there is a bug in GTM on
when using special characters
Don’t use…
Use this instead…
Pro Tip… there is a bug in GTM on
when using special characters
Use this instead…
Testing JSON mark-up worked
Structure Data Validator (Whole site in GWT)
Structure Data Validator (one page at a time)
https://search.google.com/structured-data/testing-tool
Monitoring changes in Google SERPs…
You can already calculate existing Organic CTR
using GA sessions / GWT impressions
Rich Cards monitoring
SEOmoz now report on this for your site vs competitors
Incoming transmission
Facebook like buttons auto-enabled listening for
JSON-LD!!
How to disable Facebook autoConfig listner…
fbq("set", "autoConfig", false, "99999999999" );
Whitelist of Entities Types
Organization – Logo, Social and Telephone number
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"url": "http://yourdomain.com/",
"logo": "http://yourdomain.com/images/logo.png",
"sameAs": [
"http://www.facebook.com/yourProfile",
"http://www.twitter.com/yourProfile",
"http://plus.google.com/yourProfile",
"http://www.linkedin.com/in/yourProfile",
"http://instagram.com/yourProfile"
],
"contactPoint": [{
"@type": "ContactPoint",
"telephone": "+1-401-555-1212",
"contactType": "customer service",
"contactOption": "TollFree",
"areaServed": [
"US",
"CA"
],
"availableLanguage": [
"English",
"French"
]
}]
}
</script>
Future Action:
Click
Homepage only
Person
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Person",
"name": "Barack Obama",
"jobTitle": "President",
"affiliation": "Democratic Party",
"additionalName": "Barack",
"url": "http://www.barackobama.com/",
"sameAs": [
"http://www.facebook.com/yourProfile",
"http://www.twitter.com/yourProfile",
"http://plus.google.com/yourProfile",
"http://www.linkedin.com/in/yourProfile",
"http://instagram.com/yourProfile"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "White house, 1600 Pennsylvania Ave",
"addressLocality": "Northwest",
"addressRegion": "Washington"
}
}
</script>
Future Action:
Follow
updates
Homepage only
WebSite – Search box
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "http://yourdomain.com/",
"potentialAction": {
"@type": "SearchAction",
"target": "http://yourdomain.com/?s={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
Future Action:
Search
Global
Breadcrumbs
<!-- developers.google.com/structured-data/breadcrumbs -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@id": "http://{{Page Hostname}}/{{jsmacro_pathnameLevel1 - no prepending slash}}",
"name": "{{jsmacro_pathnameLevel1 - no prepending slash}}"
}
},{
"@type": "ListItem",
"position": 2,
"item": {
"@id": "http://{{Page Hostname}}{{Page Path}}",
"name": "{{js_document.title}}"
}
}]
}
</script>
Page specific
NewsArticle
<!--http://developers.google.com/search/docs/data-types/articles -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "NewsArticle",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://{{Page Hostname}}/article1"
},
"headline": "Article headline",
"description": "A most wonderful article",
"image": {
"@type": "ImageObject",
"url": "http://{{Page Hostname}}/thumbnail_1.jpg",
"height": 800,
"width": 800
},
"datePublished": "2016-01-01T00:00:00+08:00",
"dateModified": "2016-01-01T13:00:00+08:00",
"author": {
"@type": "Person",
"name": "John Doe",
"sameAs": "https://plus.google.com/106113236172152128711"
},
"publisher": {
"@type": "Organization",
"name": "Google",
"logo": {
"@type": "ImageObject",
"url": "https://www.newscorp.com/logo.jpg",
"width": 600,
Page specific
Products
<!-- https://developers.google.com/search/docs/data-types/products -->
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "Executive Anvil",
"image": "http://www.example.com/anvil_executive.jpg",
"description": "Sleeker than ACME's Classic Anvil, the Executive Anvil
is perfect for the business traveler looking for something to drop from a
height.",
"mpn": "925872",
"brand": {
"@type": "Thing",
"name": "ACME"
},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "119.99",
"priceValidUntil": "2099-01-01",
"itemCondition": "UsedCondition", // schema.org/UsedCondition
"availability": "InStock", // schema.org/InStock
"seller": {
"@type": "Organization",
"name": "Executive Objects"
}
}
}
</script>
Page specific
Products Reviews
<!-- https://developers.google.com/search/docs/data-types/reviews -->
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "Executive Anvil",
//...//
"aggregateRating": {
"@type": "AggregateRating",
"worstRating": 1,
"bestRating": 5,
"ratingValue": 4.4,
"reviewCount": 1
},
"review": {
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"worstRating": 1,
"bestRating": 5,
"ratingValue": 4.4
},
"name": "A masterpiece of an Executive Anvil",
"datePublished": "2016-01-01",
"reviewBody": "I really like this product. It captures the essential
challenge business traveler looking for something to drop from a height`s",
"author": {
"@type": "Person",
"name": "John Doe",
"sameAs":
"https://plus.google.com/106113236172152128711"
Page specific
Review by Expert Author (GoogleNet whitelist)
<!-- https://developers.google.com/structured-data/critic-reviews -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Review",
"author": {
"@type": "Person",
"name": "Lisa Kennedy",
"sameAs": "https://plus.google.com/114108465800532712602"
},
"datePublished": "2014-03-13T20:00",
"description": "Nerve-racking, sentimental and thrilling.",
"itemReviewed": {
"@type": "Movie",
"name": "Gravity",
"sameAs": "http://www.imdb.com/title/tt1454468/",
"datePublished": "2013-10-04T00:00",
"director": {
"@type": "Person",
"name": "Alfonso Cuarón",
"sameAs": "http://en.wikipedia.org/wiki/Alfonso_Cuar%C3%B3n"
},
"actor": [{
"@type": "Person",
"name": "Sandra Bullock",
"sameAs": "http://en.wikipedia.org/wiki/Sandra_Bullock"
},{
"@type": "Person",
"name": "George Clooney",
"sameAs": "http://en.wikipedia.org/wiki/George_Clooney"
}
Page specific
LocalBusiness - Restaurant
<!-- https://developers.google.com/search/docs/data-types/local-businesses -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Restaurant",
"name": "Dave's Steak House",
"image": "http://www.example.com/image.jpg",
"url": "http://www.example.com/restaurant-locations/manhattan",
"menu": "http://www.example.com/menu",
"acceptsReservations": "True",
"telephone": "+12122459600",
"address": {
"@type": "PostalAddress",
"streetAddress": "148 W 51st St",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10019",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "40.761293",
"longitude": "-73.982294"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday"
],
Page specific
LocalBusiness - HealthClub - ReserveAction
<!--
https://developers.google.com/search/docs/data-types/local-businesses
-->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "HealthClub",
"name": "Dave's House of Yoga",
"image": "http://daveshouseofyoga.example.com/yoga.jpg",
"url": "http://daveshouseofyoga.example.com/",
"telephone": "+14085551135",
"potentialAction": {
"@type": "ReserveAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://www.example.com/reserve?merchantId=20373",
"inLanguage": "en-US",
"actionPlatform": [
"http://schema.org/DesktopWebPlatform"
//, "http://schema.org/IOSPlatform"
//, "http://schema.org/AndroidPlatform"
]
},
"result": {
"@type": "Reservation",
"name": "Book a class"
}
},
"address": {
"@type": "PostalAddress",
"streetAddress": "3986 Rivermark Pkwy",
Page specific
MusicEvent - location
<!– https://developers.google.com/search/docs/guides/mark-up-listings#mark_up_event_listings -->
<script type="application/ld+json">{
"@context": "http://schema.org",
"@type": "MusicEvent",
"name": "The Wurzels",
"image": "https://cdn2.gigantic.com/static/images/campaign/240x240/the-wurzels5545.jpg",
"url": "https://www.gigantic.com/the-wurzels-electric-palace-2016-09-17-19-30",
"startDate": "2016-09-17T19:30:00+01:00",
"doorTime": "19:30",
"typicalAgeRange": "Under 14's must be accompanied by an adult.",
"location": {
"@type": "Place",
"name": "Electric Palace",
"address": {
"@type": "PostalAddress",
"streetAddress": "35 South Street",
"addressLocality": "Bridport",
"postalCode": "DT63NY",
"addressCountry": "GB"
}
},
"offers": [{
"@type": "Offer",
"name": "Standing",
"category": "primary",
"price": "15.95",
"priceCurrency": "GBP",
"url": "https://www.gigantic.com/the-wurzels-electric-palace-2016-09-17-19-30",
"availability": "InStock"
}],
"performer": [{
Future Action:
Buy
The Wurzels
Sat, 17th Sept
gigantic.com
thewurzels.com
Electric Palace
35 South Street,
Bridport, DT63NY
Other supported event types include…
1. MusicEvent
2. TheaterEvent
3. SportsEvent
4. ComedyEvent
5. Festival
6. FoodEvent
Page specific
TheaterEvent - location
<!-- https://developers.google.com/search/docs/data-types/events#venue-markup -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "TheaterEvent",
"name": "Julius Caesar at Shakespeare's Globe",
"location": {
"@type": "PerformingArtsTheater",
"name": "Shakespeare's Globe",
"sameAs": "http://www.shakespearesglobe.com/",
"address": "London, UK"
},
"offers": [{
"@type": "Offer",
"name": "Standing (Yard)",
"url": "https://tickets.shakespearesglobe.com/performances.asp?PerIndex=287339",
"category": "primary",
"priceCurrency": "GBP",
"price": "7.50",
"availability": "http://schema.org/InStock"
},{
"@type": "AggregateOffer",
"name": "Lower Gallery",
"url": "https://tickets.shakespearesglobe.com/performances.asp?PerIndex=287339",
"category": "primary",
"priceCurrency": "GBP",
"lowPrice": "17.50",
"highPrice": "44.50",
"availability": "http://schema.org/LimitedAvailability"
}
],
Future Action:
Buy
Page specific
MusicGroup - ListenAction
<!-- https://developers.google.com/structured-data/actions/play-music -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "MusicGroup",
"url": [
"http://www.iheart.com/artist/Katy-Perry-35141/"
// Google validator does not like android-app URL - even though its in their example!
//, "android-app://com.clearchannel.iheartradio.controller/ihr/listen/custom_radio/artist/35141"
],
"name": "Katy Perry",
"sameAs": "http://www.katyperry.com",
"logo": "http://{{Page Hostname}}/images/logo.png", // PP missing in Google help pages
"description": "Katy Perry is a pop music artist.",
"potentialAction": {
"@type": "ListenAction",
"target": [
"http://www.iheart.com/artist/Katy-Perry-35141/?autoplay=true&ext=1&playedFrom=197"
// Google validator does not like android-app URL - even though its in their example!
//, "android-
app://com.clearchannel.iheartradio.controller/ihr/listen/custom_radio/artist/35141?ext=1&played_from=197"
],
// Offer added as validator said this was a recommended field
"expectsAcceptanceOf": {
"@type": "Offer",
"eligibleRegion": {
"@type": "Country",
"name": "US"
}
}
}
Page specific
TVEpisode - Play/WatchAction
<!-- https://developers.google.com/structured-data/actions/watch-movies -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@id": "2356865",
"@type": "TVEpisode",
"name": "The Occupation Recalibration",
"episodeNumber": 13,
"partOfSeason": {
"@type": "TVSeason",
"seasonNumber": 7
},
"partOfSeries": {
"@type": "TVSeries",
"name": "The Big Bang Theory",
"sameAs": "http://www.imdb.com/title/tt0898266/",
"url": "http://www.cbs.com/shows/big_bang_theory/",
"description": "The Big Bang Theory is an American sitcom."
},
"releasedEvent": {
"@type": "PublicationEvent",
"startDate": "2015-01-09",
"location": {
"@type": "Country",
"name": "US"
}
},
"potentialAction": [{
"@type": "WatchAction",
"target": {
Page specific
NewsArticle
(AMP requirement)
<script type="application/ld+json">
/* http://developers.google.com/search/docs/data-types/articles */
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage": "https://www.bookinglive.com/blog/online-booking-systems-for-the-public-sector/",
"publisher": {
"@type": "Organization",
"name": "BookingLive Blog",
"logo": {
"@type": "ImageObject",
"url": "https://www.bookinglive.com/blog/wp-
content/themes/bookingliveblog/themes/bookinglive/images/logo.png",
"height": 60,
"width": 600
}
},
"headline": "Online Booking Systems For The Public Sector",
"datePublished": "2016-08-08T14:59:58+00:00",
"dateModified": "",
"author": {
"@type": "Person",
"name": "Booking Live"
},
"description": "",
"image": {
"@type": "ImageObject",
"url": "https://www.bookinglive.com/blog/wp-content/themes/bookingliveblog/themes/bookinglive/images/logo.png",
"height": 800,
"width": 800
}
}
</script>
Page specific
“Kill” action
<script type="application/ld+json">
{
"@context": "http://schema.org",
"potentialAction":
[{
"@type": "MuteAction",
"target": "https://en.wikipedia.org/wiki/Jar_Jar_Binks",
"method": "Slap in face"
},{
"@type": "KillAction",
"target ": "https://en.wikipedia.org/wiki/Jar_Jar_Binks",
"method": "Terminate"
}]
}
</script>
Future Action:
Kill
Future Action:
Slap in face
Page specific
JSON ld cheatsheet
bit.ly/winningthewar4
Its not just about Websites…
Action buttons
also supported in Emails
<script type="application/ld+json">
/*
One Click Action: Confirm Action
https://developers.google.com/gmail/markup/reference/one-click-action#confirm_action
*/
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"description": "Approval request for John's $10.13 expense for office supplies",
"potentialAction": {
"@type": "ConfirmAction",
"name": "Approve Expense",
"handler": {
"@type": "HttpActionHandler",
"url": "https://myexpenses.com/approve?expenseId=abc123"
}
}
}
</script>
Here is a live
example from
GitHub emails...
http://semanticweb.com/github-adds-schema-org-actions-email-notifications-via-json-ld_b44450
You have mail
Future Action:
Pull Request
Summary
Enable JSON-LD via GTM or CMS plugins
Good for... Global JSON-LD
1. Brand Logo
2. Phone Number
3. Social Profiles
4. Site Search
5. OpeningHours
6. Address
Good for... Page Specific JSON-LD
1. News data
2. Product data
3. Review data
4. Breadcrumbs
5. Music & TV Product data
6. Local restaurants
Ping GoogleBot after making changes
1. Ensure pages validate:
2. Ping GoogleBot to re-crawl by visiting this URL:
Or use “Fetch, render and index” on homepage & individual pages in GWT.
3. Or Click submit sitemap.xml in GWT
Waiting for GoogleBot to index
(or check in SEOmoz)
Future actions…
1. Google JSON-LD Validator- try
2. GTM auto config for JSONLD
or WP CMS plugins - install
3. Ping GoogleBot via sitemap.xml - submit
Don’t let… Facebook win in 2020
Support Google`s JSON-LD… now!
Join the Resistance on GooglePlus
bit.ly/join-the-resistance
Appendix
Free “USB stick" for Best Question!
Questions….
bit.ly/wawquestions
FREE seo audit template
bit.ly/techseoaudit
Free resource...
For everyone else...
bit.ly/gtmdevguide2
€ FREE
www.amazon.de/Google-Tag-Manager-Developer-Guide-ebook/dp/B00KEC2IOK
Future Action:
Download
More links
• https://moz.com/blog/using-google-tag-
manager-to-dynamically-generate-schema-
org-json-ld-tags
• https://moz.com/blog/structured-data-for-
seo-2
• https://moz.com/blog/using-google-tag-
manager-to-dynamically-generate-schema-
org-json-ld-tags
JSON-LD Links
Testing Tools
• JSON-LD playground & validation tools:
www.json-ld.org
• Official Google markup-Tester for JSON-LD
www.google.com/webmasters/markup-tester/corporatecontacts (phone
numbers)
www.google.com/webmasters/markup-tester/events (music events)
www.google.com/webmasters/markup-tester/ (email)
JSON-LD blog posts
• www.seoskeptic.com/json-ld-google-knowledge-graph-schema-org-seo/
• moduscreate.com/google-announces-json-ld-compliance-at-google-io/
• semanticweb.com/category/technologies-2/json-ld
• https://schema.org/docs/actions.html (new)
Video on JSON LD
Very good intro video to JSON-LinkedData
• http://www.youtube.com/watch?v=vioCbTo3C-4
• http://www.youtube.com/watch?v=XXw8g-FbemI
History behind JSON-LinkedData
• http://manu.sporny.org/2014/json-ld-origins-2/
Links
http://www.simoahava.com/analytics/enrich-serp-results-using-gtm/
http://rdf.greggkellogg.net/distiller
https://developers.google.com/structured-data/testing-tool/
http://search4phil.com/_testing_script/____json_ld/json-ld-test.html
http://www.greenlaneseo.com/blog/2015/01/introducing-the-meta-and-rich-snippet-tester/
https://docs.google.com/spreadsheets/d/1sreYyRZ31HJdM1-
WX5wztTIbY28aZjCVmGIWN8WKCEM/edit#gid=674078569
https://developers.google.com/schemas/release-notes
http://www.w3.org/wiki/WebSchemas/ActivityActions
// Script to patch a broken inline JSON-LD values
https://plus.google.com/100057001384327175073/posts/SJjfczNMPhc
Free robot tracking via noscipt
+ session recording (like clicktale)
Yandex metric [config file]
bit.ly/yandexmetricagtm
or bit.ly/yandexmetricagtmV1
1. Create Yandex Account
2. Then go to yanex metrica and create a “counter” account
3. Replace 99999 accountID with your accountID in the
variable
Note: Yandex Metrica uses pageviews for crawl discovery
I recommend in the <head> with other <meta tags>
but can be placed anywhere.
Position of JSON LD on a page…
JSON-LD data
Note: If deployed via GTM - I recommend deploying on DOM ready.
Planning JSON implantation
Global vs Page specific
Global
1. Brand Logo
2. Phone Number
3. Social Profiles
4. Site Search
5. OpeningHours
6. Address
Page Specific
1. News data
2. Product data
3. Review data
4. Breadcrumbs
5. Music & TV Product data
6. Local restaurants
vs
Implementation
Method summary
GTM Wordpress
CMS agnostic Yes No
Supports server-side No
(dataLayer exception)
Yes
InTool JS validation Native n/a
Speed Asynchronous JS Server-side cache
Uneffected by CSS or
DOM ID changes
No, will break
(dataLayer exception)
Yes

SEO dataLayer 2: Entity Wars

  • 1.
  • 2.
    Welcome Back Phil Pearce AnalyticsFreedom Fighter www.linkedin.com/in/philpearce Web Analytics Exchange mentor 750 GA questions answered Tracking protection group
  • 3.
    Agenda 1. A possibleDark Future 2. Battlefield report: Before vs After 3. Arming-up 1. Enabling markup (Cheat sheets & templates) 2. Shooting range (UI for enabling) 3. Testing it worked 4. JSONLD Listeners 5. A new future
  • 4.
    Everyone thought Googlewas the Bad guy…
  • 5.
  • 6.
    2020: Facebook Networkintroduce a new search engine called Mercury, it used Machine Learning & Facebook`s database to return the perfect answer to any question.
  • 7.
    Google became anobsolete business model It did`nt have access to the rich structured user & content data stored in Facebooks proprietary database. Google was missing a semantic understanding layer.
  • 8.
    Realising its mistake,Google sent a machine readable data alternative back in time
  • 9.
    Thus began theentity wars…
  • 10.
    I`m here toArm you with the tools you will need to enable machine readable dataLayer The name of this mark-up is called…
  • 11.
  • 12.
    What is JSON-LDvideo https://www.youtube.com/watch?v=vioCbTo3C-4 And https://www.youtube.com/watch?v=XXw8g-FbemI#t=251
  • 13.
    Does Anyone knowwhat the LD stands for in JSON-LD? Audience Question….
  • 14.
  • 15.
    Benefits of JSON-LD 1.Increases organic CTR (Google & Bing) 2. Allows for Action buttons when signed-in 3. Allows you to leverage offsite markup (via LD) 4. Extra organic impressions in card carousal 5. Requirement for AMP pages (e.g News markup) 6. Allows for contentGroups & remarketing 7. Also works in webmail aswell
  • 17.
    JSON-LD adoption rate- increasing http://trends.builtwith.com/docinfo/JSON-LD
  • 18.
    Facebook like buttonadoption - flat growth
  • 19.
  • 20.
  • 21.
    “Schema Markup Generator” FutureAction: Use playground technicalseo.com/seo-tools/schema-markup-generator/
  • 22.
  • 23.
  • 24.
    1. Inline MicroDataconverted to JSONLD for Courses bit.ly/rdfa-to-jsonld 2. JS variables converted to JSONLD for Restaurants bit.ly/js-to-jsonld Heavy lifting in JS using GTM…
  • 25.
    GTM JSON-LD examplesource code… JSON script are downloadable from here: login:coolgtmstuff @gmail.com pw:philrulesgtm8 Auto config import file: bit.ly/winningthewar6
  • 26.
    Winning the warexamples… bit.ly/winningthewar35
  • 27.
    2. Microdata >>JSON-LD convertor bit.ly/winningthewar5
  • 28.
    https://www.schemaapp.com/schema-markup-automation/ https://www.schemaapp.com/?wvideo=jz49i69b7p Of if youare really F**king lazy & don’t want to do any work… (automatic method)
  • 29.
    Pro Tip… thereis a bug in GTM on when using special characters Don’t use… Use this instead…
  • 30.
    Pro Tip… thereis a bug in GTM on when using special characters Use this instead…
  • 31.
  • 32.
    Structure Data Validator(Whole site in GWT)
  • 33.
    Structure Data Validator(one page at a time) https://search.google.com/structured-data/testing-tool
  • 34.
    Monitoring changes inGoogle SERPs…
  • 35.
    You can alreadycalculate existing Organic CTR using GA sessions / GWT impressions
  • 36.
  • 37.
    SEOmoz now reporton this for your site vs competitors
  • 38.
  • 39.
    Facebook like buttonsauto-enabled listening for JSON-LD!!
  • 40.
    How to disableFacebook autoConfig listner… fbq("set", "autoConfig", false, "99999999999" );
  • 41.
  • 42.
    Organization – Logo,Social and Telephone number <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Organization", "url": "http://yourdomain.com/", "logo": "http://yourdomain.com/images/logo.png", "sameAs": [ "http://www.facebook.com/yourProfile", "http://www.twitter.com/yourProfile", "http://plus.google.com/yourProfile", "http://www.linkedin.com/in/yourProfile", "http://instagram.com/yourProfile" ], "contactPoint": [{ "@type": "ContactPoint", "telephone": "+1-401-555-1212", "contactType": "customer service", "contactOption": "TollFree", "areaServed": [ "US", "CA" ], "availableLanguage": [ "English", "French" ] }] } </script> Future Action: Click Homepage only
  • 43.
    Person <script type="application/ld+json"> { "@context": "http://schema.org", "@type":"Person", "name": "Barack Obama", "jobTitle": "President", "affiliation": "Democratic Party", "additionalName": "Barack", "url": "http://www.barackobama.com/", "sameAs": [ "http://www.facebook.com/yourProfile", "http://www.twitter.com/yourProfile", "http://plus.google.com/yourProfile", "http://www.linkedin.com/in/yourProfile", "http://instagram.com/yourProfile" ], "address": { "@type": "PostalAddress", "streetAddress": "White house, 1600 Pennsylvania Ave", "addressLocality": "Northwest", "addressRegion": "Washington" } } </script> Future Action: Follow updates Homepage only
  • 44.
    WebSite – Searchbox <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "url": "http://yourdomain.com/", "potentialAction": { "@type": "SearchAction", "target": "http://yourdomain.com/?s={search_term_string}", "query-input": "required name=search_term_string" } } </script> Future Action: Search Global
  • 45.
    Breadcrumbs <!-- developers.google.com/structured-data/breadcrumbs --> <scripttype="application/ld+json"> { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@id": "http://{{Page Hostname}}/{{jsmacro_pathnameLevel1 - no prepending slash}}", "name": "{{jsmacro_pathnameLevel1 - no prepending slash}}" } },{ "@type": "ListItem", "position": 2, "item": { "@id": "http://{{Page Hostname}}{{Page Path}}", "name": "{{js_document.title}}" } }] } </script> Page specific
  • 46.
    NewsArticle <!--http://developers.google.com/search/docs/data-types/articles --> <script type="application/ld+json"> { "@context":"http://schema.org", "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "http://{{Page Hostname}}/article1" }, "headline": "Article headline", "description": "A most wonderful article", "image": { "@type": "ImageObject", "url": "http://{{Page Hostname}}/thumbnail_1.jpg", "height": 800, "width": 800 }, "datePublished": "2016-01-01T00:00:00+08:00", "dateModified": "2016-01-01T13:00:00+08:00", "author": { "@type": "Person", "name": "John Doe", "sameAs": "https://plus.google.com/106113236172152128711" }, "publisher": { "@type": "Organization", "name": "Google", "logo": { "@type": "ImageObject", "url": "https://www.newscorp.com/logo.jpg", "width": 600, Page specific
  • 47.
    Products <!-- https://developers.google.com/search/docs/data-types/products --> <scripttype="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "Executive Anvil", "image": "http://www.example.com/anvil_executive.jpg", "description": "Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height.", "mpn": "925872", "brand": { "@type": "Thing", "name": "ACME" }, "offers": { "@type": "Offer", "priceCurrency": "USD", "price": "119.99", "priceValidUntil": "2099-01-01", "itemCondition": "UsedCondition", // schema.org/UsedCondition "availability": "InStock", // schema.org/InStock "seller": { "@type": "Organization", "name": "Executive Objects" } } } </script> Page specific
  • 48.
    Products Reviews <!-- https://developers.google.com/search/docs/data-types/reviews--> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "name": "Executive Anvil", //...// "aggregateRating": { "@type": "AggregateRating", "worstRating": 1, "bestRating": 5, "ratingValue": 4.4, "reviewCount": 1 }, "review": { "@type": "Review", "reviewRating": { "@type": "Rating", "worstRating": 1, "bestRating": 5, "ratingValue": 4.4 }, "name": "A masterpiece of an Executive Anvil", "datePublished": "2016-01-01", "reviewBody": "I really like this product. It captures the essential challenge business traveler looking for something to drop from a height`s", "author": { "@type": "Person", "name": "John Doe", "sameAs": "https://plus.google.com/106113236172152128711" Page specific
  • 49.
    Review by ExpertAuthor (GoogleNet whitelist) <!-- https://developers.google.com/structured-data/critic-reviews --> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Review", "author": { "@type": "Person", "name": "Lisa Kennedy", "sameAs": "https://plus.google.com/114108465800532712602" }, "datePublished": "2014-03-13T20:00", "description": "Nerve-racking, sentimental and thrilling.", "itemReviewed": { "@type": "Movie", "name": "Gravity", "sameAs": "http://www.imdb.com/title/tt1454468/", "datePublished": "2013-10-04T00:00", "director": { "@type": "Person", "name": "Alfonso Cuarón", "sameAs": "http://en.wikipedia.org/wiki/Alfonso_Cuar%C3%B3n" }, "actor": [{ "@type": "Person", "name": "Sandra Bullock", "sameAs": "http://en.wikipedia.org/wiki/Sandra_Bullock" },{ "@type": "Person", "name": "George Clooney", "sameAs": "http://en.wikipedia.org/wiki/George_Clooney" } Page specific
  • 50.
    LocalBusiness - Restaurant <!--https://developers.google.com/search/docs/data-types/local-businesses --> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Restaurant", "name": "Dave's Steak House", "image": "http://www.example.com/image.jpg", "url": "http://www.example.com/restaurant-locations/manhattan", "menu": "http://www.example.com/menu", "acceptsReservations": "True", "telephone": "+12122459600", "address": { "@type": "PostalAddress", "streetAddress": "148 W 51st St", "addressLocality": "New York", "addressRegion": "NY", "postalCode": "10019", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": "40.761293", "longitude": "-73.982294" }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "Monday", "Tuesday" ], Page specific
  • 51.
    LocalBusiness - HealthClub- ReserveAction <!-- https://developers.google.com/search/docs/data-types/local-businesses --> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "HealthClub", "name": "Dave's House of Yoga", "image": "http://daveshouseofyoga.example.com/yoga.jpg", "url": "http://daveshouseofyoga.example.com/", "telephone": "+14085551135", "potentialAction": { "@type": "ReserveAction", "target": { "@type": "EntryPoint", "urlTemplate": "https://www.example.com/reserve?merchantId=20373", "inLanguage": "en-US", "actionPlatform": [ "http://schema.org/DesktopWebPlatform" //, "http://schema.org/IOSPlatform" //, "http://schema.org/AndroidPlatform" ] }, "result": { "@type": "Reservation", "name": "Book a class" } }, "address": { "@type": "PostalAddress", "streetAddress": "3986 Rivermark Pkwy", Page specific
  • 52.
    MusicEvent - location <!–https://developers.google.com/search/docs/guides/mark-up-listings#mark_up_event_listings --> <script type="application/ld+json">{ "@context": "http://schema.org", "@type": "MusicEvent", "name": "The Wurzels", "image": "https://cdn2.gigantic.com/static/images/campaign/240x240/the-wurzels5545.jpg", "url": "https://www.gigantic.com/the-wurzels-electric-palace-2016-09-17-19-30", "startDate": "2016-09-17T19:30:00+01:00", "doorTime": "19:30", "typicalAgeRange": "Under 14's must be accompanied by an adult.", "location": { "@type": "Place", "name": "Electric Palace", "address": { "@type": "PostalAddress", "streetAddress": "35 South Street", "addressLocality": "Bridport", "postalCode": "DT63NY", "addressCountry": "GB" } }, "offers": [{ "@type": "Offer", "name": "Standing", "category": "primary", "price": "15.95", "priceCurrency": "GBP", "url": "https://www.gigantic.com/the-wurzels-electric-palace-2016-09-17-19-30", "availability": "InStock" }], "performer": [{ Future Action: Buy The Wurzels Sat, 17th Sept gigantic.com thewurzels.com Electric Palace 35 South Street, Bridport, DT63NY Other supported event types include… 1. MusicEvent 2. TheaterEvent 3. SportsEvent 4. ComedyEvent 5. Festival 6. FoodEvent Page specific
  • 53.
    TheaterEvent - location <!--https://developers.google.com/search/docs/data-types/events#venue-markup --> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "TheaterEvent", "name": "Julius Caesar at Shakespeare's Globe", "location": { "@type": "PerformingArtsTheater", "name": "Shakespeare's Globe", "sameAs": "http://www.shakespearesglobe.com/", "address": "London, UK" }, "offers": [{ "@type": "Offer", "name": "Standing (Yard)", "url": "https://tickets.shakespearesglobe.com/performances.asp?PerIndex=287339", "category": "primary", "priceCurrency": "GBP", "price": "7.50", "availability": "http://schema.org/InStock" },{ "@type": "AggregateOffer", "name": "Lower Gallery", "url": "https://tickets.shakespearesglobe.com/performances.asp?PerIndex=287339", "category": "primary", "priceCurrency": "GBP", "lowPrice": "17.50", "highPrice": "44.50", "availability": "http://schema.org/LimitedAvailability" } ], Future Action: Buy Page specific
  • 54.
    MusicGroup - ListenAction <!--https://developers.google.com/structured-data/actions/play-music --> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "MusicGroup", "url": [ "http://www.iheart.com/artist/Katy-Perry-35141/" // Google validator does not like android-app URL - even though its in their example! //, "android-app://com.clearchannel.iheartradio.controller/ihr/listen/custom_radio/artist/35141" ], "name": "Katy Perry", "sameAs": "http://www.katyperry.com", "logo": "http://{{Page Hostname}}/images/logo.png", // PP missing in Google help pages "description": "Katy Perry is a pop music artist.", "potentialAction": { "@type": "ListenAction", "target": [ "http://www.iheart.com/artist/Katy-Perry-35141/?autoplay=true&ext=1&playedFrom=197" // Google validator does not like android-app URL - even though its in their example! //, "android- app://com.clearchannel.iheartradio.controller/ihr/listen/custom_radio/artist/35141?ext=1&played_from=197" ], // Offer added as validator said this was a recommended field "expectsAcceptanceOf": { "@type": "Offer", "eligibleRegion": { "@type": "Country", "name": "US" } } } Page specific
  • 55.
    TVEpisode - Play/WatchAction <!--https://developers.google.com/structured-data/actions/watch-movies --> <script type="application/ld+json"> { "@context": "http://schema.org", "@id": "2356865", "@type": "TVEpisode", "name": "The Occupation Recalibration", "episodeNumber": 13, "partOfSeason": { "@type": "TVSeason", "seasonNumber": 7 }, "partOfSeries": { "@type": "TVSeries", "name": "The Big Bang Theory", "sameAs": "http://www.imdb.com/title/tt0898266/", "url": "http://www.cbs.com/shows/big_bang_theory/", "description": "The Big Bang Theory is an American sitcom." }, "releasedEvent": { "@type": "PublicationEvent", "startDate": "2015-01-09", "location": { "@type": "Country", "name": "US" } }, "potentialAction": [{ "@type": "WatchAction", "target": { Page specific
  • 56.
    NewsArticle (AMP requirement) <script type="application/ld+json"> /*http://developers.google.com/search/docs/data-types/articles */ { "@context": "http://schema.org", "@type": "BlogPosting", "mainEntityOfPage": "https://www.bookinglive.com/blog/online-booking-systems-for-the-public-sector/", "publisher": { "@type": "Organization", "name": "BookingLive Blog", "logo": { "@type": "ImageObject", "url": "https://www.bookinglive.com/blog/wp- content/themes/bookingliveblog/themes/bookinglive/images/logo.png", "height": 60, "width": 600 } }, "headline": "Online Booking Systems For The Public Sector", "datePublished": "2016-08-08T14:59:58+00:00", "dateModified": "", "author": { "@type": "Person", "name": "Booking Live" }, "description": "", "image": { "@type": "ImageObject", "url": "https://www.bookinglive.com/blog/wp-content/themes/bookingliveblog/themes/bookinglive/images/logo.png", "height": 800, "width": 800 } } </script> Page specific
  • 57.
    “Kill” action <script type="application/ld+json"> { "@context":"http://schema.org", "potentialAction": [{ "@type": "MuteAction", "target": "https://en.wikipedia.org/wiki/Jar_Jar_Binks", "method": "Slap in face" },{ "@type": "KillAction", "target ": "https://en.wikipedia.org/wiki/Jar_Jar_Binks", "method": "Terminate" }] } </script> Future Action: Kill Future Action: Slap in face Page specific
  • 59.
  • 60.
    Its not justabout Websites…
  • 61.
    Action buttons also supportedin Emails <script type="application/ld+json"> /* One Click Action: Confirm Action https://developers.google.com/gmail/markup/reference/one-click-action#confirm_action */ { "@context": "http://schema.org", "@type": "EmailMessage", "description": "Approval request for John's $10.13 expense for office supplies", "potentialAction": { "@type": "ConfirmAction", "name": "Approve Expense", "handler": { "@type": "HttpActionHandler", "url": "https://myexpenses.com/approve?expenseId=abc123" } } } </script>
  • 62.
    Here is alive example from GitHub emails... http://semanticweb.com/github-adds-schema-org-actions-email-notifications-via-json-ld_b44450 You have mail Future Action: Pull Request
  • 63.
  • 64.
    Enable JSON-LD viaGTM or CMS plugins Good for... Global JSON-LD 1. Brand Logo 2. Phone Number 3. Social Profiles 4. Site Search 5. OpeningHours 6. Address Good for... Page Specific JSON-LD 1. News data 2. Product data 3. Review data 4. Breadcrumbs 5. Music & TV Product data 6. Local restaurants
  • 65.
    Ping GoogleBot aftermaking changes 1. Ensure pages validate: 2. Ping GoogleBot to re-crawl by visiting this URL: Or use “Fetch, render and index” on homepage & individual pages in GWT. 3. Or Click submit sitemap.xml in GWT
  • 66.
    Waiting for GoogleBotto index (or check in SEOmoz)
  • 67.
    Future actions… 1. GoogleJSON-LD Validator- try 2. GTM auto config for JSONLD or WP CMS plugins - install 3. Ping GoogleBot via sitemap.xml - submit
  • 68.
  • 69.
  • 70.
    Join the Resistanceon GooglePlus bit.ly/join-the-resistance
  • 71.
  • 72.
    Free “USB stick"for Best Question! Questions…. bit.ly/wawquestions
  • 73.
    FREE seo audittemplate bit.ly/techseoaudit
  • 74.
    Free resource... For everyoneelse... bit.ly/gtmdevguide2 € FREE www.amazon.de/Google-Tag-Manager-Developer-Guide-ebook/dp/B00KEC2IOK Future Action: Download
  • 75.
    More links • https://moz.com/blog/using-google-tag- manager-to-dynamically-generate-schema- org-json-ld-tags •https://moz.com/blog/structured-data-for- seo-2 • https://moz.com/blog/using-google-tag- manager-to-dynamically-generate-schema- org-json-ld-tags
  • 76.
    JSON-LD Links Testing Tools •JSON-LD playground & validation tools: www.json-ld.org • Official Google markup-Tester for JSON-LD www.google.com/webmasters/markup-tester/corporatecontacts (phone numbers) www.google.com/webmasters/markup-tester/events (music events) www.google.com/webmasters/markup-tester/ (email) JSON-LD blog posts • www.seoskeptic.com/json-ld-google-knowledge-graph-schema-org-seo/ • moduscreate.com/google-announces-json-ld-compliance-at-google-io/ • semanticweb.com/category/technologies-2/json-ld • https://schema.org/docs/actions.html (new)
  • 77.
    Video on JSONLD Very good intro video to JSON-LinkedData • http://www.youtube.com/watch?v=vioCbTo3C-4 • http://www.youtube.com/watch?v=XXw8g-FbemI History behind JSON-LinkedData • http://manu.sporny.org/2014/json-ld-origins-2/
  • 78.
  • 79.
    Free robot trackingvia noscipt + session recording (like clicktale) Yandex metric [config file] bit.ly/yandexmetricagtm or bit.ly/yandexmetricagtmV1 1. Create Yandex Account 2. Then go to yanex metrica and create a “counter” account 3. Replace 99999 accountID with your accountID in the variable Note: Yandex Metrica uses pageviews for crawl discovery
  • 80.
    I recommend inthe <head> with other <meta tags> but can be placed anywhere. Position of JSON LD on a page… JSON-LD data Note: If deployed via GTM - I recommend deploying on DOM ready.
  • 81.
    Planning JSON implantation Globalvs Page specific Global 1. Brand Logo 2. Phone Number 3. Social Profiles 4. Site Search 5. OpeningHours 6. Address Page Specific 1. News data 2. Product data 3. Review data 4. Breadcrumbs 5. Music & TV Product data 6. Local restaurants vs
  • 82.
    Implementation Method summary GTM Wordpress CMSagnostic Yes No Supports server-side No (dataLayer exception) Yes InTool JS validation Native n/a Speed Asynchronous JS Server-side cache Uneffected by CSS or DOM ID changes No, will break (dataLayer exception) Yes