<?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: Matthias Kupperschmidt</title>
    <description>The latest articles on DEV Community by Matthias Kupperschmidt (@arctic_hunter).</description>
    <link>https://dev.to/arctic_hunter</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F422337%2Fe7f942c7-66b0-4969-ad4a-79115b0403ea.jpeg</url>
      <title>DEV Community: Matthias Kupperschmidt</title>
      <link>https://dev.to/arctic_hunter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arctic_hunter"/>
    <language>en</language>
    <item>
      <title>Track Google Form Views with GA4 &amp; Marketing Pixels</title>
      <dc:creator>Matthias Kupperschmidt</dc:creator>
      <pubDate>Sat, 15 Apr 2023 08:25:48 +0000</pubDate>
      <link>https://dev.to/arctic_hunter/track-google-form-views-with-ga4-marketing-pixels-pp</link>
      <guid>https://dev.to/arctic_hunter/track-google-form-views-with-ga4-marketing-pixels-pp</guid>
      <description>&lt;p&gt;Do you want to know &lt;strong&gt;how many visitors visit your Google Form?&lt;/strong&gt; - In this tutorial I explain how to use &lt;strong&gt;Google Analytics&lt;/strong&gt; to track visits to a Google Form to measure engagement and form views. After that, we'll learn how to use the visits for &lt;strong&gt;Google Ads campaigns&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'll also show how, using the same principle, you can implement other &lt;strong&gt;Tracking Pixels&lt;/strong&gt; from &lt;strong&gt;Facebook, Linkedin or Twitter&lt;/strong&gt; on the form to target visitors through &lt;strong&gt;Retargeting Campaigns&lt;/strong&gt;, for example.&lt;/p&gt;

&lt;p&gt;As a Google Analytics consultant I have set up tracking for Google forms quite a few times. So I will explain you why it is smart to track your form with additional &lt;strong&gt;tracking tools&lt;/strong&gt; and what the advantages are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it important to track Google Form attendance with GA4?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/forms/u/0/"&gt;Google Forms&lt;/a&gt; are an attractive solution to create online forms for websites. By March 2023, Google Forms is used by &lt;a href="https://trends.builtwith.com/widgets/feedback-forms-and-surveys/traffic/Entire-Internet"&gt;0.26%&lt;/a&gt; of websites across the Internet as a solution for feedback forms. &lt;a href="https://webtechsurvey.com/technology/google-forms/changes"&gt;Popular websites using Google Forms&lt;/a&gt; include &lt;em&gt;washingtonpost.com&lt;/em&gt;, &lt;em&gt;techcrunch.com&lt;/em&gt;, and &lt;em&gt;usatoday.com&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;advantages of Google Forms&lt;/strong&gt; are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free with no limits &lt;/li&gt;
&lt;li&gt;Forms can be created quickly and easily in minutes&lt;/li&gt;
&lt;li&gt;Free upload feature&lt;/li&gt;
&lt;li&gt;Many templates available&lt;/li&gt;
&lt;li&gt;Compatible with desktop and mobile devices&lt;/li&gt;
&lt;li&gt;Instant access to entered data in Google Sheets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tracking the individual views of a Google Form with Google Analytics or Marketing Pixels from Facebook, Linkedin or Twitter is not possible without overcoming a few technical hurdles. &lt;/p&gt;

&lt;p&gt;Yet it is worth it! &lt;/p&gt;

&lt;p&gt;Tracking individual page views of Google forms has compelling &lt;strong&gt;advantages&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Google Analytics 4, you can link your conversions to your Google Ads account, for example, to run &lt;strong&gt;retargeting campaigns&lt;/strong&gt;. This means that if you &lt;strong&gt;configure the form visit as a conversion&lt;/strong&gt; (!), the visitors will be added to a Google Ads segement for campaigns. Thus, you can later show promotional offers to the visitors.
So, for marketing purposes, the visitors of the form are completely available.&lt;/li&gt;
&lt;li&gt;You get to know how many visitors visit the form. If you subtract the number of completed forms from the visits, you know the potential of the campaign. GA4 engagement tracking additionally tells you how much time visitors spend on the form - which helps to improve the form in case visitors spend too much time filling it out.&lt;/li&gt;
&lt;li&gt;By tracking with &lt;strong&gt;Facebook&lt;/strong&gt; or the &lt;strong&gt;Linkedin&lt;/strong&gt; tracking pixel, you can learn more about the interests or demographics of your visitors, thereby improving communication with your customer segments.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So if you combine the general advantages of Google Forms with the benefits of tracking with Marketing Pixels, Google Forms becomes a super efficient &amp;amp; free solution for digital campaigns with contact forms!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Track Google Form Visits with GA4
&lt;/h2&gt;

&lt;p&gt;View Tracking for Google Forms in GA is achieved by embedding the Google Form Iframe together with the &lt;strong&gt;Google Analytics Tracking Code&lt;/strong&gt; on the same page.&lt;/p&gt;

&lt;p&gt;Since Google Analytics tracks every load of the website as a page view and the page contains the form, the views to the form can thus be tracked as well without having direct access to the form's code.&lt;/p&gt;

&lt;p&gt;Simple, right?&lt;/p&gt;

&lt;p&gt;Let me explain how you do this exactly, whether you have your own website or not.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measure attendance of Google Forms through embedding
&lt;/h3&gt;

&lt;p&gt;First of all, you should always embed Google Forms in a webpage, as this will allow you to insert your own Google Analytics tracking code into the page to measure the number of visitors to the form. &lt;br&gt;
I repeat: you should &lt;strong&gt;not&lt;/strong&gt; send the direct link to the Google Form to your users.&lt;/p&gt;

&lt;p&gt;If you use the Google form embed code on your own website and also add your Google Analytics snippet, every &lt;strong&gt;visit to the form&lt;/strong&gt; will be recorded as a page view in Google Analytics. &lt;br&gt;
This gives you the advantage of being able to track the &lt;strong&gt;form attendance&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;In addition, you can now also implement &lt;strong&gt;Tracking Pixel&lt;/strong&gt; for Google Ads, Facebook, Twitter or Linkedin on the page - which would not be possible otherwise.&lt;/p&gt;

&lt;p&gt;Don't have a website where you can embed the Google Form? That's no problem. You can create a hosted HTML page in seconds and embed the Google form in it. &lt;/p&gt;

&lt;p&gt;For example, use the &lt;a href="https://glitch.com/edit/#!/remix/glitch-hello-website"&gt;Basic Website starter from glitch.com&lt;/a&gt;, &lt;a href="https://pages.github.com/"&gt;Github Pages&lt;/a&gt; or simply upload your HTML file to &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt;. Below I give an example of Glitch and Netlify.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Embedded Google Form with GA tracking on custom website
&lt;/h3&gt;

&lt;p&gt;First, copy the embed code for your Google Form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ArcMRsWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/75d85ebef484c2703b53d321ff3f36bf/google-forms-embed-code.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ArcMRsWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/75d85ebef484c2703b53d321ff3f36bf/google-forms-embed-code.png" alt="Google Form Embed Code" width="700" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a single custom web page
&lt;/h3&gt;

&lt;p&gt;If you already have your own website, create a new page with any address path and add the embed code. &lt;br&gt;
If you don't have your own website, follow one of the examples below.&lt;/p&gt;

&lt;p&gt;First create an empty HTML page with a &lt;a href="https://www.freecodecamp.org/news/basic-html5-template-boilerplate-code-example/"&gt;default boilerplate code&lt;/a&gt; and add the Google Form snippet and the Google Analytics tracking code. Then upload the file to a web host.&lt;/p&gt;

&lt;h4&gt;
  
  
  Glitch Example
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Start a new web page with the &lt;a href="https://glitch.com/edit/#!/remix/glitch-hello-website"&gt;Basic Website Starter from glitch.com&lt;/a&gt; and add the embed code for the Google Form at the top of the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;. Delete the rest of the code in the body tag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gbpn6L7P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/2ef40cde934c2ef1a414e93de1fa197c/google-forms-embed-code-on-glitch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gbpn6L7P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/2ef40cde934c2ef1a414e93de1fa197c/google-forms-embed-code-on-glitch.png" alt="Insert embed code on Glitch" title="Insert embed code on Glitch" width="700" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add Google Analytics 4 Snippet&lt;/strong&gt;: Now add the Google Analytics snippet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alternatively, you could also add a GTM container snippet with a GA4 page view tag enabled.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l28Wbes8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/22f584bd3f1f2813e9cc674aeaaded37/google-forms-embed-code-on-glitch-with-ga4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l28Wbes8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/22f584bd3f1f2813e9cc674aeaaded37/google-forms-embed-code-on-glitch-with-ga4.png" alt="Insert GA4 Snippet on Glitch" title="Insert GA4 Snippet on Glitch" width="700" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copy the new link to your Google Form&lt;/strong&gt;: Next copy the link to your glitch page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under &lt;strong&gt;Preview -&amp;gt; Preview in a new Window&lt;/strong&gt; you get the created page opened in a new browser tab. From now on use this link to invite visitors to your form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--801JNAak--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/211f01436312fc737bb2d733831c6950/copy-glitch-link.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--801JNAak--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/211f01436312fc737bb2d733831c6950/copy-glitch-link.png" alt="Copy Glitch Link" title="Copy the newly generated link to your created HTML page with embedded Google Form." width="700" height="823"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Netlify Drop Beispiel
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;a href="https://www.freecodecamp.org/news/basic-html5-template-boilerplate-code-example/"&gt;HTML page from a boilerplate template&lt;/a&gt; and add the copied embed code of the Google Form to the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;. Then save the file as index.html in an empty folder.&lt;/li&gt;
&lt;li&gt;Visit Netlify.com and log in with your preferred login service.&lt;/li&gt;
&lt;li&gt;After that, go visit &lt;a href="https://app.netlify.com/drop"&gt;Netlify Drop&lt;/a&gt; and drag the folder with the index.html file into the drag &amp;amp; drop area.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W-fAI3lL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/ed5112c1bcec308779208f038f41cefa/netlify-deply-after-drop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W-fAI3lL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/ed5112c1bcec308779208f038f41cefa/netlify-deply-after-drop.png" alt="Netlify deployment after upload" title="Screenshot after you uploaded the folder with the index.html file to Netlify. The page is already hosted and online!" width="700" height="327"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pXpJn4NP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/a3e32deaee79911b5598cdabc296b95f/netlify-live-example.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pXpJn4NP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/a3e32deaee79911b5598cdabc296b95f/netlify-live-example.png" alt="Example of the page hosted on Netlify" title="Example of the page online, hosted by Netlify in just seconds" width="700" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Test if everything works
&lt;/h3&gt;

&lt;p&gt;To test GA4 tracking you can simply visit the real-time report. On the events widget you can click the &lt;code&gt;page_view&lt;/code&gt; event and then select the &lt;code&gt;page_location&lt;/code&gt; parameter. This will show you all web addresses of the last minutes.&lt;/p&gt;

&lt;p&gt;There you should see the URL to the page with the Google Form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VGoaEJpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/fb2b4f67248fd57773f5081e07683a5f/Validation-Google-Form-with-Google-Analytics-4-real-time-report.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VGoaEJpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/fb2b4f67248fd57773f5081e07683a5f/Validation-Google-Form-with-Google-Analytics-4-real-time-report.png" alt="Validation of the Google Form with real-time report in Google Analytics 4" title="When you access the real-time report in GA4, you will notice that each pageview with the Google Form is now being tracked." width="700" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Analysis of form views in GA4
&lt;/h2&gt;

&lt;p&gt;GA4 tracks engagement metrics like &lt;a href="https://support.google.com/analytics/answer/13391283?visit_id=638167351549791683-3231046854&amp;amp;rd=1&amp;amp;hl=en"&gt;average engagement time&lt;/a&gt; by default.&lt;/p&gt;

&lt;p&gt;When the form is called, the engagement tracking starts automatically, so you can look at the average engagement time (time tracking) of the visitors with the form later in Google Analytics.&lt;/p&gt;

&lt;p&gt;To create a time tracking report you then build e.g. an &lt;em&gt;Exploration Report&lt;/em&gt; with the values &lt;strong&gt;User Engagement&lt;/strong&gt; and as dimension for the rows the &lt;strong&gt;Page Path&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Also add &lt;strong&gt;views&lt;/strong&gt; to the values to show the total number of form visits (form attendance).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QqMCU126--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/210400c6a05ceaac2ff35bf93a01e0cb/GA4-page-view-analysis-and-engagement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QqMCU126--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/210400c6a05ceaac2ff35bf93a01e0cb/GA4-page-view-analysis-and-engagement.png" alt="Analysis of Google Form pageviews and engagement in Google Analytics 4" title="In the analysis of GA4 data, we can see how often the Google Form was accessed and with engagement tracking, how much time users spent on the form." width="700" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Track Google Form Visits with the Facebook Pixel and other Marketing Pixels (Twitter, Linkedin etc.)
&lt;/h2&gt;

&lt;p&gt;Also, you can insert all sorts of marketing tracking pixels on the page as well. See here an example for the Facebook Pixel. The FB snippet is simply inserted after the GA4 snippet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bjmf7b4x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/6a86ce1c73557e612c6b876c4e4d2f62/google-forms-embed-code-on-glitch-with-ga4-and-facebook.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bjmf7b4x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/6a86ce1c73557e612c6b876c4e4d2f62/google-forms-embed-code-on-glitch-with-ga4-and-facebook.png" alt="Facebook Pixel and GA4 snippet embedded in Google Form" title="Facebook Pixel and GA4 snippet embedded in Google Form" width="700" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you have implemented the Facebook, Twitter, Pinterest, Linkedin or any other pixel, you need to test if the implementation worked.&lt;/p&gt;

&lt;p&gt;The easiest solution is to log in to the respective platform of the marketing pixel. After 24 hours at the latest you should see traffic there.&lt;/p&gt;

&lt;p&gt;If you don't want to wait that long, there are extensions for most tracking pixel browsers that show information about the pixel when it is working.&lt;/p&gt;

&lt;p&gt;For Facebook there is the &lt;a href="https://chrome.google.com/webstore/detail/meta-pixel-helper/fdgfkebogiimcoedlicjlajpkdmockpc"&gt;Meta Pixel Helper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After the extension is installed in the browser and we call the Google Form with the implemented FB Pixel, the Pixel Helper confirms that the tracking is working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JisAVEYK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/e48200a616f7fa0ec946ff416629efa3/Validation-Google-Form-with-Facebook-Pixel-Debugger.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JisAVEYK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://bluerivermountains.com/static/e48200a616f7fa0ec946ff416629efa3/Validation-Google-Form-with-Facebook-Pixel-Debugger.png" alt="Check Facebook Pixel Tracking in Google Form" title="Check Facebook Pixel Tracking in Google Form" width="700" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are also similar Pixel Helper extensions for &lt;a href="https://chrome.google.com/webstore/detail/Linkedin-insight-tag-chec/feeednoflloccfhgoiiohjammanphoef"&gt;Linkedin&lt;/a&gt; and &lt;a href="https://chrome.google.com/webstore/detail/twitter-pixel-helper/jepminnlebllinfmkhfbkpckogoiefpd"&gt;Twitter&lt;/a&gt; to check the functionality of the pixel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope I could convince you of the importance of embedding the forms, so that you take the extra effort in the future instead of sharing the direct link.&lt;/p&gt;

&lt;p&gt;Especially for YouTube or email campaigns, this way of quickly creating a landing page that is visually the same but offers many advantages in terms of marketing is a good idea.&lt;/p&gt;

&lt;p&gt;We also looked at how to co-implement other tracking tools on Google Forms so that you have more metrics available for data analysis 😎.&lt;/p&gt;

&lt;p&gt;References&lt;br&gt;
&lt;a href="https://twitter.com/mattzipan/status/1646412222778732544"&gt;Twitter post&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.facebook.com/bluerivermountains/posts/pfbid0wNnygred1CczJ5EuwRL53Up7Pf2NGD22DH9jbQsGY1XApT2LanCDyq6iztkJk23jl"&gt;Facebook post&lt;/a&gt;&lt;br&gt;
&lt;a href="https://masto.measure.chat/@arcticHunter/110190377481828437"&gt;Mastodon post&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.patreon.com/posts/google-forms-81452891"&gt;Patreon post&lt;/a&gt; &lt;/p&gt;

</description>
      <category>googleanalytics</category>
      <category>ga4</category>
      <category>googleform</category>
    </item>
    <item>
      <title>How to outline a blog post fast</title>
      <dc:creator>Matthias Kupperschmidt</dc:creator>
      <pubDate>Tue, 15 Dec 2020 19:42:35 +0000</pubDate>
      <link>https://dev.to/arctic_hunter/how-to-outline-a-blog-post-fast-12b1</link>
      <guid>https://dev.to/arctic_hunter/how-to-outline-a-blog-post-fast-12b1</guid>
      <description>&lt;p&gt;To write a blog post outline you need to determine all &lt;strong&gt;relevant subtopics&lt;/strong&gt; that cover your main-topic thoroughly. &lt;/p&gt;

&lt;p&gt;For each subtopic you then note down a headline until all important aspects for your target audience are covered. So the &lt;strong&gt;outline structure will only contain headlines&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This is an example of a draft outline: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YVgUdcj5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/0553d95c1610afdb7ccdc1077f3e5fe9/outline-example.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YVgUdcj5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/0553d95c1610afdb7ccdc1077f3e5fe9/outline-example.png" alt="Base structure of outline"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you like though, add a few content notes for a paragraph neatly indented under a heading with bullet points to give each section more depth:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zWc-Rund--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/7f7d22ce7c4153552d89f5118fa63690/outline-example-with-notes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zWc-Rund--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/7f7d22ce7c4153552d89f5118fa63690/outline-example-with-notes.png" alt="Base structure of outline including notes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But there is still one step missing during this process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep search engine optimization in mind
&lt;/h3&gt;

&lt;p&gt;You probably want your article to rank for a certain target keyword that is close to your main topic. &lt;br&gt;
&lt;strong&gt;Headlines&lt;/strong&gt; are critical for search engines to understand what a blog post is about.&lt;/p&gt;

&lt;p&gt;So when writing headlines during your outlining process, you want to strike a balance between making them engaging and descriptive, so search engines understand them and deem the topic relevant to the article. &lt;/p&gt;

&lt;p&gt;If you neglect this step you risk not showing up in your keywords' search results at all.&lt;/p&gt;

&lt;p&gt;But how can you make a high quality, topically relevant blog post that is SEO friendly without spending too much time?&lt;/p&gt;
&lt;h2&gt;
  
  
  Write a Great Blogging Outline very fast
&lt;/h2&gt;

&lt;p&gt;A nifty way to determine what information to include in your blog outline is looking at the subtopics of articles that are already ranking for your keyword.&lt;/p&gt;

&lt;p&gt;Following this approach, you save time planning subtopics and researching which to include in the article. Plus, you leverage your competitors header optimization. &lt;/p&gt;

&lt;p&gt;If those competing articles are ranking at the top, clearly they must be doing something right about their headlines, so it makes sense to leverage their optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-step&lt;/strong&gt; the process goes like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Search for your target keyword&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the best ranking results&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compare their subheading structure with each other&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Draft your blog outline based on their headings&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give it your personal twist and add value with your own ideas&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you compare the subheaders side-by-side in Google Sheets or Excel, you can scan them at once and determine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;common subtopics across all blog posts&lt;/li&gt;
&lt;li&gt;special topics that are only covered few times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The general rule to follow is, take what's commonly covered by others and choose from the special topics if you consider them to be valuable.&lt;/p&gt;

&lt;p&gt;This is how it looks like when you put all headlines of the top-ranking blog posts for the keyword “best backlink tool” next to each other for comparison: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nR7e29M---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/2a8fb23d394e23de275ab470eef101d9/best-backlink-tool-sheet-with-headlines.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nR7e29M---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/2a8fb23d394e23de275ab470eef101d9/best-backlink-tool-sheet-with-headlines.png" alt="Comparing subheadlines of competitors in a sheet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You see how much more structured this approach is, than visiting each piece of content yourself (and maybe getting distracted by videos, images and advertising 😂)?&lt;/p&gt;
&lt;h3&gt;
  
  
  Create summarizing headings
&lt;/h3&gt;

&lt;p&gt;To create your own article outline, tint subheaders that cover the same information with one color and work your way through all of them. &lt;/p&gt;

&lt;p&gt;At the end, the colors represent potential topics for the blog content and you can simply add a heading to as a section to your draft by choosing from the same color together.&lt;/p&gt;

&lt;p&gt;This is how it looks like when I'm putting it together: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--icCIOrpv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/d831479874e944cdf81014914f7aceaa/topic-grouping-with-colors-sheet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--icCIOrpv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/d831479874e944cdf81014914f7aceaa/topic-grouping-with-colors-sheet.png" alt="grouping sections for topical relevance"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So by scraping the headings from the top of the search results and comparing them in a spreadsheet, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;plan your blog post outline FAST&lt;/li&gt;
&lt;li&gt;make sure you cover the most important subtopics&lt;/li&gt;
&lt;li&gt;ensure headlines are topically relevant (SEO)&lt;/li&gt;
&lt;li&gt;find opportunities for insights others don't cover yet (since you now have an easy overview)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is all great - except it’s a pain to manually extract subheadlines from the top search results and put them in a spreadsheet.&lt;/p&gt;

&lt;p&gt;Since I started freelance consulting with &lt;a href="https://bluerivermountains.com"&gt;Blue River Mountains&lt;/a&gt;, I automated as much as I could, since it is one of the few ways to scale as a freelancer. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s why I automated the process and below I’m sharing my head ripper tool with you so you can extract all subheaders in just seconds.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Competitor headline extractor tool for batch-analysis in Google sheets
&lt;/h2&gt;

&lt;p&gt;Here is the link to the &lt;a href="https://colab.research.google.com/drive/1heAzS1MR71SBYOlwWaW7dSP8bsWtl44D?usp=sharing"&gt;head ripper tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The tool runs in Google Colab, so let me quickly show you how it works:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6VVRkXDg2Xc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This is what you need to run it: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google account&lt;/li&gt;
&lt;li&gt;URL's of competing pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step-by-Step guide to run the Python script
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;First, &lt;a href="https://colab.research.google.com/drive/1heAzS1MR71SBYOlwWaW7dSP8bsWtl44D?usp=sharing"&gt;go to the head ripper tool&lt;/a&gt; in Google Colab and &lt;strong&gt;Save a copy in Drive&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3bvecUaV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/35e3aafbf323a0ecd6975be4c7bc0e4c/head-ripper-save-copy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3bvecUaV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/35e3aafbf323a0ecd6975be4c7bc0e4c/head-ripper-save-copy.png" alt="Save a copy of the Python tool in Google Colab"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute the &lt;strong&gt;first code block&lt;/strong&gt; by pressing the play button.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LblPBm1l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/b248e054a439c993eae301170c33c50c/head-ripper-play-first-block.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LblPBm1l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/b248e054a439c993eae301170c33c50c/head-ripper-play-first-block.png" alt="Play first code block in Google Colab"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;link in the output&lt;/strong&gt; to get the authentication key, then paste it into the empty field and &lt;strong&gt;press enter&lt;/strong&gt;. This allows Google Colab to create a Google sheet.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UBkGl2xl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1607962804303/Mb4IELgQn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UBkGl2xl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1607962804303/Mb4IELgQn.gif" alt="authenticate-google-sheets-api.gif"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for your target keyword on Google, then &lt;strong&gt;copy and paste the URLs&lt;/strong&gt; of the search result pages into the form.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rm9dEmMV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/ba5d2c76e70c0b21838e17cf693fb85a/head-ripper-copy-paste-urls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rm9dEmMV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/ba5d2c76e70c0b21838e17cf693fb85a/head-ripper-copy-paste-urls.png" alt="Copy-paste SERP URL's into input form"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give the Google Sheet a &lt;strong&gt;name&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CIf4hpvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/1b1a2e2cc8cdd484ef95711b698f57ea/head-ripper-copy-sheet-name.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CIf4hpvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/1b1a2e2cc8cdd484ef95711b698f57ea/head-ripper-copy-sheet-name.png" alt="Add a name for the Google Sheet"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute the second code block by pressing the play button.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cJiKmQhE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/1fafb97bc7cf167e43a45adcfa5613a3/head-ripper-play-second-block.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cJiKmQhE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/1fafb97bc7cf167e43a45adcfa5613a3/head-ripper-play-second-block.png" alt="Execute next Python code block in Google Colab"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute the third code block by pressing the play button.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lyzlgtmi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/c6d8cd36d124b53931eaa6a6e7e4b404/head-ripper-play-third-block.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lyzlgtmi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/c6d8cd36d124b53931eaa6a6e7e4b404/head-ripper-play-third-block.png" alt="execute third code block in Google Colab"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Done. Go to &lt;a href="https://sheets.google.com"&gt;Google Sheets&lt;/a&gt; and open your newly created sheet holding all of your competitor's headlines.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nR7e29M---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/2a8fb23d394e23de275ab470eef101d9/best-backlink-tool-sheet-with-headlines.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nR7e29M---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/2a8fb23d394e23de275ab470eef101d9/best-backlink-tool-sheet-with-headlines.png" alt="Comparing subtopics for topical relevance"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nice. Now that you have all blog sections in a spreadsheet, you can easily find commonalities and start building your own outline. &lt;/p&gt;

&lt;p&gt;Afterwards you can get into the details and start the actual writing process.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many subtopics should you include in the content for SEO
&lt;/h2&gt;

&lt;p&gt;Group the sections of your competitors by tinting them with a color in the Google sheet. Once you did that with all of them, you know what they most-commonly talk about.&lt;/p&gt;

&lt;p&gt;Then add the most common blocks to your own content outline to create the basic structure.&lt;/p&gt;

&lt;p&gt;To exceed competing content, &lt;strong&gt;add 1-2 additional subtopics&lt;/strong&gt; that you find relevant to add.&lt;/p&gt;

&lt;h3&gt;
  
  
  But how can I find additional relevant points that nobody is talking about yet?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://simpletools.io/"&gt;Simpletools.io&lt;/a&gt;. helps you find related questions to your keyword. Answer them the ones you deem most relevant to your visitor.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fe6w5tVJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/a369285c31247db5a02cf4fd5e38d0a1/head-ripper-simpletools.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fe6w5tVJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/a369285c31247db5a02cf4fd5e38d0a1/head-ripper-simpletools.png" alt="topically relevant questions on Simpletools.io"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another method is to look at what Google deems highly relevant to your topic. &lt;a href="https://streamsuggest.herokuapp.com/"&gt;StreamSuggest&lt;/a&gt; scrapes all auto-suggest keywords for you and enters each one into another Google search to scrape all of their keyword suggestions again. You get all related auto-suggestions in seconds.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h-H07hyy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/2b1e99dacc5f04498ff5f5256eff16fc/head-ripper-streamsuggest.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h-H07hyy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://bluerivermountains.com/static/2b1e99dacc5f04498ff5f5256eff16fc/head-ripper-streamsuggest.png" alt="keyword suggestions from Streamsuggest"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s wrap this up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Let's take a step back a second, ignore the tool and dissect all important details to learn what the key message is.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You can achieve topical relevance often by just analyzing the sections (H1, H2, H3...) of top-ranking search result pages.&lt;/li&gt;
&lt;li&gt;My tool allows you to scan and create a content outline fast, because you get all important subsections distraction-free to start your analysis by grouping and selecting them.&lt;/li&gt;
&lt;li&gt;To exceed competitors blog posts, &lt;strong&gt;add 1-2 additional points&lt;/strong&gt; based on your own expert advice, e.g. answer a relevant question from your personal perspective or explain another point that Google finds relevant.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. Let me know on &lt;a href="https://twitter.com/mattzipan/status/1328370542466961408"&gt;Twitter&lt;/a&gt; if you liked this and if it helped you to plan SEO-friendly content. ✌️&lt;/p&gt;

</description>
      <category>writing</category>
      <category>python</category>
      <category>seo</category>
      <category>googlecolab</category>
    </item>
    <item>
      <title>How to log all JavaScript events to the console for debugging</title>
      <dc:creator>Matthias Kupperschmidt</dc:creator>
      <pubDate>Fri, 25 Sep 2020 10:57:29 +0000</pubDate>
      <link>https://dev.to/arctic_hunter/how-to-log-all-javascript-events-to-the-console-for-debugging-279m</link>
      <guid>https://dev.to/arctic_hunter/how-to-log-all-javascript-events-to-the-console-for-debugging-279m</guid>
      <description>&lt;p&gt;Let's look at how to debug all JavaScript events and log them to the console with a nifty trick.&lt;/p&gt;

&lt;p&gt;It's for example important when debugging a web page to see how many submit events a form element sends out.&lt;/p&gt;

&lt;p&gt;With this debugging method you prevent sending and tracking  &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Events" rel="noopener noreferrer"&gt;browser events&lt;/a&gt;  multiple times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Listen for all events in JavaScript
&lt;/h2&gt;

&lt;p&gt;There is a handy API in  &lt;strong&gt;Chrome developer tools&lt;/strong&gt;  that makes this easy.&lt;/p&gt;

&lt;p&gt;The  &lt;a href="https://developers.google.com/web/updates/2015/05/quickly-monitor-events-from-the-console-panel" rel="noopener noreferrer"&gt;monitorEvents&lt;/a&gt;  API allows you to log any occuring JavaScript event to the console in Chrome. You just have to give it an element and optionally the event you want to listen to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;monitorEvents(element[,event])&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you want to stop listening for events again, you simply use:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;unmonitorEvents(element[,event])&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Log all  &lt;strong&gt;click events&lt;/strong&gt;  of the  &lt;strong&gt;window object&lt;/strong&gt;  to the console&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1601446727799%2FnlSxdS8fC.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1601446727799%2FnlSxdS8fC.gif" alt="monitorEvents api in chrome"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now with this helpful debugging tool in our toolbox, we can for example select a form element in Chrome developer tools to start monitoring  &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event" rel="noopener noreferrer"&gt;submit events&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After you select the element in the elements tab, Chrome Dev Tools will show a little  &lt;code&gt;$0&lt;/code&gt;  sign next to it.&lt;/p&gt;

&lt;p&gt;If you keep the HTML-Element selected, you can now use the  &lt;code&gt;$0&lt;/code&gt;  to quickly reference the element in the console - without needing a CSS selector. Now together with the  &lt;code&gt;monitorEvents&lt;/code&gt;  API you can quickly and easily listen to all ongoing JavaScript events and print them to the console for debugging:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1601446856657%2F5ErTC1Epi.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1601446856657%2F5ErTC1Epi.gif" alt="monitor form submit javascript events and log to console"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is helpful for all kinds of  &lt;a href="https://bluerivermountains.com/en/event-tracking" rel="noopener noreferrer"&gt;event tracking&lt;/a&gt;  because you can debug every JavaScript event in the console without having to run the  &lt;a href="https://www.analyticsmania.com/post/google-tag-manager-debug-mode/" rel="noopener noreferrer"&gt;GTM Debugger&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So there you have it. By using Chrome Dev Tools' API, it is the quickest way to monitor all JavaScript events that I know of.&lt;/p&gt;

&lt;p&gt;Let me know on Twitter if it worked for you and if you liked this. ✌️&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>chrome</category>
      <category>events</category>
      <category>analytics</category>
    </item>
  </channel>
</rss>
