XooCode(){

InteractionCounter

InteractionCounter aggregates repeated interactions into a single counted signal. It's the node that goes under interactionStatistic on a CreativeWork, Organization, or Person to publish "22,140 views", "380 likes", "14 shares" as machine-readable counts instead of rendered badges.

Full example of schema.org/InteractionCounter json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/InteractionCounter
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "XooQuest — Launch Trailer",
  "thumbnailUrl": "https://xooquest.example/trailer-thumb.jpg",
  "contentUrl": "https://www.youtube.com/watch?v=xq-trailer",
  "uploadDate": "2022-02-01",
  "duration": "PT2M14S",
  "interactionStatistic": [
    {
      "@type": "InteractionCounter",
      "interactionType": { "@type": "WatchAction" },
      "userInteractionCount": 1243780,
      "interactionService": {
        "@type": "WebSite",
        "name": "YouTube",
        "url": "https://www.youtube.com"
      }
    },
    {
      "@type": "InteractionCounter",
      "interactionType": { "@type": "LikeAction" },
      "userInteractionCount": 48210,
      "interactionService": {
        "@type": "WebSite",
        "name": "YouTube",
        "url": "https://www.youtube.com"
      }
    },
    {
      "@type": "InteractionCounter",
      "interactionType": { "@type": "ShareAction" },
      "userInteractionCount": 3240,
      "interactionService": {
        "@type": "WebSite",
        "name": "YouTube",
        "url": "https://www.youtube.com"
      },
      "startTime": "2022-02-01T00:00:00Z",
      "endTime": "2022-03-01T00:00:00Z"
    }
  ]
}
</script>

Direct properties (6)

  • interactionType: the Action type being counted — LikeAction for likes / +1s, WatchAction for views, ShareAction for shares, CommentAction for comments.
  • userInteractionCount: Integer count.
  • interactionService: the WebSite or SoftwareApplication where the interaction happened (YouTube, your own site, TikTok).
  • startTime / endTime: optional DateTime bounds when the count is windowed ("42,000 watch actions in the last 30 days").
  • location: rarely used — for interactions tied to a physical place (check-ins).

Why publish it

Google's VideoObject and Article cards sometimes surface view / engagement counts; InteractionCounter is the canonical source. AI search engines (Perplexity, ChatGPT) read interactionStatistic to rank which sources of a topic are most-cited.

Minimal valid version

The smallest markup that still produces a valid InteractionCounter entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/InteractionCounter (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "InteractionCounter",
  "interactionType": { "@type": "LikeAction" },
  "userInteractionCount": 48210
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

  • Video / Article engagement signals (feeds ranking + AI citations)
    Google docs

Common InteractionCounter mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    interactionType as a bare string

    Wrong
    "interactionType": "LikeAction"
    Right
    { "@type": "LikeAction" }

    interactionType expects an Action *type*, published as a node (the class itself), not a string. Consumers that typecheck drop the string form.

  2. 02

    One InteractionCounter with multiple counts mixed in

    Wrong
    Combined likes + shares in one counter
    Right
    One InteractionCounter per interactionType

    The count has to be single-metric; collapsing loses the per-action breakdown.

  3. 03

    interactionService omitted for third-party stats

    Wrong
    "userInteractionCount": 1243780 on a YouTube video with no interactionService
    Right
    Name YouTube as the interactionService

    Without attribution, consumers can't tell whether the count is self-reported, aggregate, or from a specific platform.

Also mentioned in 5 other examples

InteractionCounter also appears in BlogPosting, DiscussionForumPosting, ProfilePage, SocialMediaPosting, and VideoObject. See the full InteractionCounter schema page for every reference.

About the example data

The XooQuest launch trailer on YouTube: 1.2M views, 48K likes, 3.2K shares — expressed as three InteractionCounter blocks.

Comments

Loading comments...

Leave a comment