121

I am looking to use JSON-LD for schema on a website. (Schema meaning schema.org data.) I know how to write the data but my question is is there a prefered location in my code to insert this data? In other words, should the JSON-LD always be in the head, body, etc.?

L84
  • 45,514
  • 58
  • 177
  • 257

3 Answers3

114

The data can be placed anywhere. From Google's documentation:

The data, enclosed within the <script type="application/ld+json"> ... </script> tags as shown in the examples below, may be placed in either the <HEAD> or <BODY> region of the page that displays that event.

You can also use data dynamically fetched using AJAX:

JSON-LD markup inserted by Javascript that runs upon initial page load can be recognized.

Update (as pointed by Antony in the comments)

The latest documentation says:

[JSON-LD is a] JavaScript notation embedded in a tag in the page head or body... Google can read JSON-LD data when it is dynamically injected into the page's contents, such as by JavaScript code or embedded widgets in your content management system.

Dheeraj Vepakomma
  • 26,870
  • 17
  • 81
  • 104
  • 5
    The new URL is https://developers.google.com/search/docs/guides/intro-structured-data. There is a table 2/3 way down, with a "Description and Placement" column – Antony Mar 19 '18 at 17:26
  • 1
    This video on Google Search Central channel also backs up this answer https://www.youtube.com/watch?v=lI6EtxjoyDU – Rafael Lebre Dec 21 '22 at 20:41
82

From the perspectives of Schema.org, JSON-LD, and the possibly extracted RDF, it should not matter. The data is the same, no matter from where in the document it got extracted.

From the perspective of HTML5:

If it’s data about your page (or what this page is about), you could place the script element in the head, as the head element

[…] represents a collection of metadata for the Document

But of course it would not be wrong to use body for this instead. It’s just that you shouldn’t use head for data that is not about your page or what it represents.

unor
  • 92,415
  • 26
  • 211
  • 360
  • It try to understand the last line of your high quality answer. Do you mean that if the `ld+json` is about the organisation _as a whole_ and not on _the current page perse_ it should __not__ go in the ``? – theking2 Apr 28 '23 at 12:45
  • 1
    @theking2: Correct. But, as mentioned in the first part, it doesn’t affect the structured data at all (i.e., when extracting/parsing the JSON-LD, it doesn’t matter where in the HTML document it’s placed). – unor Apr 29 '23 at 13:30
  • true. It probably is a matter of best-practices – theking2 May 02 '23 at 13:04
-3

if you choose to insert in the <body>, you got to do it like this:

<p class="companyName" vocab="http://schema.org/" resource="#manu" typeof="Organization">
   <span property="name">ShopTech Media</span>
   <img property="logo" src="https://yoursite.com/logo.png" />
   <a property="url" href="http://www.yoursite.com">Home page</a>
</p>
<p typeof="contactPoint">
  <span property="contactType">Customer Service:</span>
<span property="telephone">+45-xxxxxxx</span>
</p>

below is the script code to insert your structured data in the <head> tag

<script type="application/ld+json"> 
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "url": "http://www.shoptech.media",
  "logo": "https://shoptech.media/wp-content/uploads/2019/08/cropped-logo-sm.png",
  "contactPoint": [{
    "@type": "ContactPoint",
    "telephone": "+45-65711114",
    "contactType": "customer service"
  }]
}
</script>

check the documentation at general structured data guideline

Richard Rosario
  • 115
  • 1
  • 12
  • 2
    Are you able to back up your answer with some sources or more information? Other answers say something different, and I can't find anything in the link you provided. – Sebi Feb 11 '20 at 11:11