<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: MxD Digital</title>
    <description>The latest articles on DEV Community by MxD Digital (@mxddigital).</description>
    <link>https://dev.to/mxddigital</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4179845%2Fc93c5f43-608b-4382-9261-c2fe6540c48c.png</url>
      <title>DEV Community: MxD Digital</title>
      <link>https://dev.to/mxddigital</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mxddigital"/>
    <language>en</language>
    <item>
      <title>A consent-aware event model for B2B content analytics</title>
      <dc:creator>MxD Digital</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:44:01 +0000</pubDate>
      <link>https://dev.to/mxddigital/a-consent-aware-event-model-for-b2b-content-analytics-l91</link>
      <guid>https://dev.to/mxddigital/a-consent-aware-event-model-for-b2b-content-analytics-l91</guid>
      <description>&lt;p&gt;A content analytics event should answer a decision, not merely prove that a click happened. For a B2B site, the useful question is often: &lt;strong&gt;which resources help a suitable organisation move from research to a qualified conversation?&lt;/strong&gt; Here is a small implementation pattern that keeps the event stream readable and avoids putting personal data in analytics URLs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with four events
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;When it fires&lt;/th&gt;
&lt;th&gt;Minimum properties&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;content_viewed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A resource becomes visible&lt;/td&gt;
&lt;td&gt;content ID, topic, page path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;content_engaged&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A person uses a resource meaningfully&lt;/td&gt;
&lt;td&gt;content ID, interaction type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enquiry_started&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A booking or enquiry flow opens&lt;/td&gt;
&lt;td&gt;flow ID, source content ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enquiry_submitted&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The user submits the form&lt;/td&gt;
&lt;td&gt;flow ID, consent state&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A qualified conversation is usually a &lt;strong&gt;CRM outcome&lt;/strong&gt;, not a browser event. Join it to the journey later, under the organisation's privacy rules, rather than trying to label every form submission as a sales opportunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the payload boring
&lt;/h2&gt;

&lt;p&gt;A shared payload makes it easier to compare campaigns and content types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"content_engaged"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schema_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"content_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"guide-b2b-measurement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"topic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"content-measurement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"interaction_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"guide_opened"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"page_path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/insights/b2b-measurement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"organic_search"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use a stable content ID rather than a page title that may change. Version the schema when a property changes meaning. Validate the allowed event names and interaction types at collection time; a free-text field quickly becomes a reporting problem.&lt;/p&gt;

&lt;p&gt;Do not put an email address, name, phone number, or other private detail into &lt;code&gt;page_path&lt;/code&gt;, campaign parameters, or event names. Keep consent state explicit. If consent is absent, the implementation should follow the site's configured privacy behaviour rather than silently creating a person-level trail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the questions, then add instrumentation
&lt;/h2&gt;

&lt;p&gt;Before shipping a new event, ask who will use it and what they will change. If the answer is unclear, defer the event. In QA, test a resource view, an engaged interaction, an abandoned enquiry and a submitted enquiry. Check that each fires once, has the expected properties, and reaches the reporting destination with the same names.&lt;/p&gt;

&lt;p&gt;Finally, compare &lt;strong&gt;volume and quality together&lt;/strong&gt;. More guide opens with no improvement in qualified conversations may still be useful research traffic, but it should not be reported as commercial impact. Document assumptions and review a small set of journey changes each month.&lt;/p&gt;

&lt;p&gt;We use this decision-led approach at &lt;a href="https://www.mxd.digital/" rel="noopener noreferrer"&gt;MxD Digital&lt;/a&gt;. Our &lt;a href="https://mxdgroup.github.io/mxd-digital-insights/" rel="noopener noreferrer"&gt;practical B2B content event model&lt;/a&gt; expands the view–engage–intent–outcome framework for teams planning their first dashboard.&lt;/p&gt;

</description>
      <category>analytics</category>
    </item>
  </channel>
</rss>
