Tag Archives: data


Are People Watching Your Landing Page Videos? Here’s How to use Google Tag Manager to Check

In 2018, video marketing has become ubiquitous in news feeds and it’s one of the best tools for persuasion you have available to you. In fact, 72% of businesses say video has improved their conversion rates. Naturally, because your landing pages are designed to persuade and convert, it makes total sense you’d want to use videos to boost the power of your offer.

But how do you know if visitors are actually interacting with your landing page videos? If you’re spending money on producing video content (especially if it’s offer-specific), you’ll want to know if your target audience is engaging.

While some of you may have access to a video marketing platform and resulting analytics, this post is going to share how you can get view information for YouTube video players using the free tool Google Tag Manager.

Once you follow the steps below for your Unbounce pages, you’ll be able to see:

  • If visitors are actually watching the videos on your landing pages
  • The duration of how long visitors are watching for, and
  • Where visitors are dropping off (this can help you understand what content to modify to keep visitors engaged).

First up: Add Google Tag Manager to Track Your Landing Page Videos

This is really easy to do in Unbounce. First:

  1. Head to the Script Manager under your Settings tab.
  2. Then, click the green “Add a Script” button.
  3. Next, select the Google Tag Manager option.
  4. Assuming you’ve already signed up for Google Tag Manager, you can add your Container ID.

Set up of Google Tag Manager

Lastly, attach your domain to the script, and you’re all set!

Once you have the script saved, use Google Tag Assistant to confirm the tag is working. After setting up this Tag Manager, next we’ll want to define how we want to track user interactions with our YouTube embeds, which brings us to…

Create Tags to Track Video Engagement

On September 12, 2017, Google Tag Manager released the YouTube Video Trigger which finally gave marketers the opportunity to track engagement from embedded YouTube videos within Google Analytics. Tag Manager added built-in video variables, and we want to confirm they are selected before creating any tags or triggers.

When you get to the Variables page in Google Tag Manager:

  • click on the red Configure button, and simply check the boxes for all the video variables, as seen in the image below:

Configuring Built in Variables

Next, we can create our trigger. Triggers control how the tag will be fired. The only option we need is the YouTube Video trigger type.

From here you can select the specific information you want to capture. These actions include when a user starts a video, completes a video, pause/seeking/buffering, and the duration of how much of the content they actually watch.

See how people are engaging (or not) with landing page videos

In the image above, we see just one option of a trigger you can create. If you choose to select ‘Progress’, you have to choose either Percentages or Time Thresholds. It has to be one or the other. You can’t do both. Using Percentages, you can add any number you like (i.e. it doesn’t have to be the numbers I used in the example above). Tag Manager will automatically add 100 for a completion.

On the other hand, if you choose ‘Time thresholds’, you will add the numbers (in seconds) you’d like to have recorded in Google Analytics. If your campaign focus is on views, I’d stick with Percentages. But, if you want to see where users are dropping off to help you improve the content of your videos, Time Thresholds is a good choice.

Lastly, choose when the trigger will fire. By default Tag Manager will fire the trigger on all videos, but you can choose to fire on only some videos.

You can also make your video triggers a lot more specific. The image below shows several options you have to fire the tag on a variety of custom variables for your YouTube videos. If you only want to track videos on certain landing pages, you can do that, but if you only want to track certain videos no matter what the landing page is, you have that option too. Create the trigger which will give you the data you need to make better decisions about the videos on your landing pages.

Now let’s set up the tag!

The image below is just one example of a completed tag set up. Here, you can change the Category, Action, and Label to capture the appropriate video data you want to collect. You can also research and find some cool custom versions of these tags like Simo Ahava’s YouTube Video Trigger. There are many options out there, so find the tag which works best for you.

Now that we can track the YouTube video interactions, let’s view the data.

View the Events Report in Google Analytics

In Google Analytics, head over to Behavior > Events. In the Overview or Top Events sections, you can see the Event Category lists of whatever you are tracking. While Event Category is the default view, you can switch to Event Action or Event Label to get deeper data depending on how you set up your tag.

So, how do you relate YouTube video tracking with our landing pages? Easy. Click on Secondary dimension, search for “landing pages” and select it. From here you’ll be able to see the page URL path alongside the current view you have pulled up.

We now have the data in Google Analytics to view which videos users interact with the most, how long are users watching the embedded YouTube videos, and which landing pages are actually seeing video engagement.

Now You Have Data to Improve the Videos on Your Landing Pages

If you find visitors barely watch your videos (think viewing less than 30% of the content), you now have data to push your team to modify the length of the videos, for example, or get to your key message differently (perhaps you have a really long intro?).

If the data shows users aren’t watching your videos at all, you may want to replace the video on your landing page with other, more customized options, or even text that sums up the value props presented. Finally, if you identify really popular videos, it could be a great opportunity to determine if there are opportunities for reuse on other relevant pages, too.

Overall, you won’t know whether page visitors resonate with the videos on your landing pages unless you track this. Let me know in the comments below if you have any questions on the setup above – happy to jump in with answers.

Taken from: 

Are People Watching Your Landing Page Videos? Here’s How to use Google Tag Manager to Check

Hit The Ground Running With Vue.js And Firestore

Hit The Ground Running With Vue.js And Firestore

Lukas van Driel

Google Firebase has a new data storage possibility called ‘Firestore’ (currently in beta stage) which builds on the success of the Firebase Realtime Database but adds some nifty features. In this article, we’ll set up the basics of a web app using Vue.js and Firestore.

Let’s say you have this great idea for a new product (e.g. the next Twitter, Facebook, or Instagram, because we can never have too much social, right?). To start off, you want to make a prototype or Minimum Viable Product (MVP) of this product. The goal is to build the core of the app as fast as possible so you can show it to users and get feedback and analyze usage. The emphasis is heavily on development speed and quick iterating.

But before we start building, our amazing product needs a name. Let’s call it “Amazeballs.” It’s going to be legen — wait for it — dary!

Here’s a shot of how I envision it:

Screenshot of Amazeballs app

The legendary Amazeballs app

Our Amazeballs app is — of course — all about sharing cheesy tidbits of your personal life with friends, in so-called Balls. At the top is a form for posting Balls, below that are your friends’ Balls.

When building an MVP, you’ll need tooling that gives you the power to quickly implement the key features as well as the flexibility to quickly add and change features later on. My choice falls on Vue.js as it’s a Javascript-rendering framework, backed by the Firebase suite (by Google) and its new real-time database called Firestore.

Firestore can directly be accessed using normal HTTP methods which makes it a full backend-as-a-service solution in which you don’t have to manage any of your own servers but still store data online.

Sounds powerful and daunting, but no sweat, I’ll guide you through the steps of creating and hosting this new web app. Notice how big the scrollbar is on this page; there’s not a huge amount of steps to it. Also, if you want to know where to put each of the code snippets in a code repository, you can see a fully running version of Amazeballs on github.

Let’s Start

We’re starting out with Vue.js. It’s great for Javascript beginners, as you start out with HTML and gradually add logic to it. But don’t underestimate; it packs a lot of powerful features. This combination makes it my first choice for a front-end framework.

Vue.js has a command-line interface (CLI) for scaffolding projects. We’ll use that to get the bare-bones set-up quickly. First, install the CLI, then use it to create a new project based on the “webpack-simple” template.

npm install -g vue-cli

vue init webpack-simple amazeballs

If you follow the steps on the screen (npm install and npm run dev) a browser will open with a big Vue.js logo.

Congrats! That was easy.

Next up, we need to create a Firebase project. Head on over to https://console.firebase.google.com/ and create a project. A project starts out in the free Spark plan, which gives you a limited database (1 GB data, 50K reads per day) and 1 GB of hosting. This is more than enough for our MVP, and easily upgradable when the app gains traction.

Click on the ‘Add Firebase to your web app’ to display the config that you need. We’ll use this config in our application, but in a nice Vue.js manner using shared state.

First npm install firebase, then create a file called src/store.js. This is the spot that we’re going to put the shared state in so that each Vue.js component can access it independently of the component tree. Below is the content of the file. The state only contains some placeholders for now.

import Vue from 'vue';
import firebase from 'firebase/app';
import 'firebase/firestore';

// Initialize Firebase, copy this from the cloud console
// Or use mine :)
var config = 
  apiKey: "AIzaSyDlRxHKYbuCOW25uCEN2mnAAgnholag8tU",
  authDomain: "amazeballs-by-q42.firebaseapp.com",
  databaseURL: "https://amazeballs-by-q42.firebaseio.com",
  projectId: "amazeballs-by-q42",
  storageBucket: "amazeballs-by-q42.appspot.com",
  messagingSenderId: "972553621573"

// The shared state object that any vue component can get access to. 
// Has some placeholders that we’ll use further on!
export const store = 
  ballsInFeed: null,
  currentUser: null,
  writeBall: (message) => console.log(message)

Now we’ll add the Firebase parts. One piece of code to get the data from the Firestore:

// a reference to the Balls collection
const ballsCollection = firebase.firestore()

// onSnapshot is executed every time the data
// in the underlying firestore collection changes
// It will get passed an array of references to 
// the documents that match your query
  .onSnapshot((ballsRef) => 
    const balls = [];
    ballsRef.forEach((doc) => 
      const ball = doc.data();
      ball.id = doc.id;
    store.ballsInFeed = balls;

And then replace the writeBall function with one that actually executes a write:

writeBall: (message) => ballsCollection.add(
  createdOn: new Date(),
  author: store.currentUser,

Notice how the two are completely decoupled. When you insert into a collection, the onSnapshot is triggered because you’ve inserted an item. This makes state management a lot easier.

Now you have a shared state object that any Vue.js component can easily get access to. Let’s put it to good use.

Post Stuff!

First, let’s find out who the current user is.

Firebase has authentication APIs that help you with the grunt of the work of getting to know your user. Enable the appropriate ones on the Firebase Console in AuthenticationSign In Method. For now, I’m going to use Google Login — with a very non-fancy button.

Screenshot of login page with Google authentication

Authentication with Google Login

Firebase doesn’t give you any interface help, so you’ll have to create your own “Login with Google/Facebook/Twitter” buttons, and/or username/password input fields. Your login component will probably look a bit like this:

    <button @click.prevent="signInWithGoogle">Log in with Google</button>

import firebase from 'firebase/app';
import 'firebase/auth';

export default 
      var provider = new firebase.auth.GoogleAuthProvider();

Now there’s one more piece of the login puzzle, and that’s getting the currentUser variable in the store. Add these lines to your store.js:

// When a user logs in or out, save that in the store
firebase.auth().onAuthStateChanged((user) => 
  store.currentUser = user;

Due to these three lines, every time the currently-logged-in user changes (logs in or out), store.currentUser also changes. Let’s post some Balls!

Screenshot of logout option

Login state is stored in the store.js file

The input form is a separate Vue.js component that is hooked up to the writeBall function in our store, like this:

  <form @submit.prevent="formPost">
    <textarea v-model="message" />
    <input type="submit" value="DUNK!" />

import  store  from './store';

export default 
      message: null,

Awesome! Now people can log in and start posting Balls. But wait, we’re missing authorization. We want you to only be able to post Balls yourself, and that’s where Firestore Rules come in. They’re made up of Javascript-ish code that defines access privileges to the database. You can enter them via the Firestore console, but you can also use the Firebase CLI to install them from a file on disk. Install and run it like this:

npm install -g firebase-tools
firebase login
firebase init firestore

You’ll get a file named firestore.rules where you can add authorization for your app. We want every user to be able to insert their own balls, but not to insert or edit someone else’s. The below example do nicely. It allows everyone to read all documents in the database, but you can only insert if you’re logged in, and the inserted resource has a field “author” that is the same as the currently logged in user.

service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read: if true;
      allow create: if request.auth.uid != null && request.auth.uid == request.resource.data.author;

It looks like just a few lines of code, but it’s very powerful and can get complex very quickly. Firebase is working on better tooling around this part, but for now, it’s trial-and-error until it behaves the way you want.

If you run firebase deploy, the Firestore rules will be deployed and securing your production data in seconds.

Adding Server Logic

On your homepage, you want to see a timeline with your friends’ Balls. Depending on how you want to determine which Balls a user sees, performing this query directly on the database could be a performance bottleneck. An alternative is to create a Firebase Cloud Function that activates on every posted Ball and appends it to the walls of all the author’s friends. This way it’s asynchronous, non-blocking and eventually consistent. Or in other words, it’ll get there.

To keep the examples simple, I’ll do a small demo of listening to created Balls and modifying their message. Not because this is particularly useful, but to show you how easy it is to get cloud functions up-and-running.

const functions = require('firebase-functions');

exports.createBall = functions.firestore
  .onCreate(event => 
    var createdMessage = event.data.get('message');
    return event.data.ref.set(
      message: createdMessage + ', yo!'
    , merge: true);

Oh, wait, I forgot to tell you where to write this code.

firebase init functions

This creates the functions directory with an index.js. That’s the file you can write your own Cloud Functions in. Or copy-paste mine if you’re very impressed by it.

Cloud Functions give you a nice spot to decouple different parts of your application and have them asynchronously communicate. Or, in architectural drawing style:

Server logic architectural diagram of Cloud Functions

Asynchronous communication between the different components of your application

Last Step: Deployment

Firebase has its Hosting option available for this, and you can use it via the Firebase CLI.

firebase init hosting

Choose distas a public directory, and then ‘Yes’ to rewrite all URLs to index.html. This last option allows you to use vue-router to manage pretty URLs within your app.

Now there’s a small hurdle: the dist folder doesn’t contain an index.html file that points to the right build of your code. To fix this, add an npm script to your package.json:

    "deploy": "npm run build && mkdir dist/dist && mv dist/*.* dist/dist/ && cp index.html dist/ && firebase deploy"

Now just run npm deploy, and the Firebase CLI will show you the URL of your hosted code!

When To Use This Architecture

This setup is perfect for an MVP. By the third time you’ve done this, you’ll have a working web app in minutes — backed by a scalable database that is hosted for free. You can immediately start building features.

Also, there’s a lot of space to grow. If Cloud Functions aren’t powerful enough, you can fall back to a traditional API running on docker in Google Cloud for instance. Also, you can upgrade your Vue.js architecture with vue-router and vuex, and use the power of webpack that’s included in the vue-cli template.

It’s not all rainbows and unicorns, though. The most notorious caveat is the fact that your clients are immediately talking to your database. There’s no middleware layer that you can use to transform the raw data into a format that’s easier for the client. So, you have to store it in a client-friendly way. Whenever your clients request change, you’re going to find it pretty difficult to run data migrations on Firebase. For that, you’ll need to write a custom Firestore client that reads every record, transforms it, and writes it back.

Take time to decide on your data model. If you need to change your data model later on, data migration is your only option.

So what are examples of projects using these tools? Amongst the big names that use Vue.js are Laravel, GitLab and (for the Dutch) nu.nl. Firestore is still in beta, so not a lot of active users there yet, but the Firebase suite is already being used by National Public Radio, Shazam, and others. I’ve seen colleagues implement Firebase for the Unity-based game Road Warriors that was downloaded over a million times in the first five days. It can take quite some load, and it’s very versatile with clients for web, native mobile, Unity, and so on.

Where Do I Sign Up?!

If you want to learn more, consider the following resources:

Happy coding!

Smashing Editorial
(da, ra, hj, il)


Hit The Ground Running With Vue.js And Firestore

Why Is Google Analytics Inaccurate?

You may have noticed that some of your Google Analytics data isn’t entirely accurate. Whether you saw a sudden, unwarranted change in user behavior, picked up on major differences after a redesign, or found some unexplainable information within a report, there are many things that can indicate issues with your data. And that’s completely normal. Google Analytics is one of the most popular (if not the most popular) platforms for monitoring site performance. It can provide tons of valuable insight and is considered by many SEOs and site owners to be an indispensable tool. But it isn’t perfect. In fact,…

The post Why Is Google Analytics Inaccurate? appeared first on The Daily Egg.

Visit link – 

Why Is Google Analytics Inaccurate?

How to Improve Your Content Marketing Using Digital Analytics

How do you know your content marketing is effective? It’s not a rhetorical question, though it may seem like it. While it’s difficult to measure the success and return on investment of content purely quantitatively, you can absolutely use digital analytics to get some directional insights as well as insights that help you improve your approach. The good thing: there are no shortage of tools and guides to help you do that nowadays. The bad thing: it can be a bit overwhelming when you think about how to get started with digital analytics, especially if you’ve got a content calendar…

The post How to Improve Your Content Marketing Using Digital Analytics appeared first on The Daily Egg.

Original article: 

How to Improve Your Content Marketing Using Digital Analytics

Learning Framer By Creating A Mobile App Prototype

The time of static user interfaces is long gone. Designing interactive prototypes is the best approach to expressing your ideas and explaining them to clients and stakeholders. Or, as Jerry Cao of UXPin puts it: “Nothing brings you closer to the functionality of the final product than prototyping. It is the prototype that brings to life the experience behind user experience.”
Prototyping is an important part of the modern UX design process.

Visit site: 

Learning Framer By Creating A Mobile App Prototype

Using SSE Instead Of WebSockets For Unidirectional Data Flow Over HTTP/2

When building a web application, one must consider what kind of delivery mechanism they are going to use. Let’s say we have a cross-platform application that works with real-time data; a stock market application providing ability to buy or sell stock in real time. This application is composed of widgets that bring different value to the different users.
When it comes to data delivery from the server to the client, we are limited to two general approaches: client pull or server push.

See original article – 

Using SSE Instead Of WebSockets For Unidirectional Data Flow Over HTTP/2

Respect Always Comes First

The past years have been remarkable for web technologies. Our code has become modular, clean and well-defined. Our tooling for build processes and audits and testing and maintenance has never been so powerful. Our design process is systematic and efficient. Our interfaces are smooth and responsive, with a sprinkle of beautiful transitions and animations here and there. And after so many years, accessibility and performance have finally become established, well-recognized pillars of user experience.

Originally from: 

Respect Always Comes First

How to Build a Sticky SaaS Product

It’s Day 4 of Product Marketing Month. Today’s post examines churn, and accelerating your customer’s Time to Value. — Unbounce co-founder Oli Gardner

What’s The Easiest Way to Make a Sticky Product?

Build a product and call it a Sticky Bar. Look over there >>

With that dad joke out of the way, I want to talk about some important SaaS metrics, that will help product marketers understand what is or isn’t sticky about the products you’re building. I’m also going to talk about how to find some clues in your data, and finally how we’ve been working on fixing our own stickiness problems at Unbounce.

What makes a SaaS product sticky?

In short, it’s a product that becomes part of someone’s daily routine. Something they can’t do as good or enjoyable a job without. It’s something they need. But even more than that, it’s something they love. And that love comes from two main places; either it’s a one-of-a-kind solution that’s simply awesome, or it’s a many-of-a-kind solution that includes a superior customer experience.

Unless you’re selling frying pans, having a product that isn’t sticky just means that you have a churn problem.

Why do people churn from a SaaS product?

There are many reasons why someone would decide to stop paying you money every month, and a great way to find out what they are is simply to ask. At Unbounce we have an in-app cancellation survey that gets seen by anyone who downgrades to free from a paid plan. It’s a single open-ended question: “What is your reason for downgrading?

On average, about 27% of people answer the question. Here’s a pie chart showing the breakdown of responses over a 6-month period.

There are some fascinating responses in there, but the one that stands out the most is the “Under-Utilized” (31.40%) category. This is the response you don’t want to hear. They were using it, and probably deriving value from it, but they weren’t using it enough to warrant an ongoing subscription.

We noticed that certain cohorts of customers were more likely to see fluctuating value from using landing pages. This could be due to an irregular number or timing of campaigns, so when there’s nothing going on, they cancel or downgrade their plan. They may come back again, many do, but the inconsistent behavior – known as flapping – can be a symptom of a product that isn’t fully sticky.

It could also be because they were not able to effectively calculate or realize the ROI of our solution properly, which can happen when customers are running campaigns not directly tied to paid spend. When there is money involved, it’s easier to calculate your returns, speeding up the time to value (TTV).

Increase Stickiness by Reducing Time to Value (TTV)

Time to Value (TTV) is the velocity of a customer seeing the value from your product – how long does it take them to get to those ah-ha moments that make them see the benefit?

It’s a great way to think from the customer’s perspective. The tough part is discovering what those ah-ha moments are. But when you do, product marketing has its mission.

When your TTV goes down, your stickiness and your LTV (Lifetime Value) goes up.

One of the ah-ha moments we’ve identified for Unbounce is when people get inside the builder, and they see how easy, yet how powerful and customizable it is. The problem is, they don’t get to see that until they slap down a credit card.

To amplify this, we just released a preview mode of our builder, designed specifically to help shorten the TTV.

You can check it out at preview.unbounce.com.

If you click the image, you’ll notice that upon arrival, you see a popup with a welcome message and a bit of contextual information about where you are and what you can do.

Speaking of popups, I’ve heard this question a lot in the past 6 months:

“Why did you choose popups and sticky bars as your next products?”

Why did we choose popups and sticky bars?

With the landing page product, we knew we’d solved the pain of customers increasing conversions for their paid traffic, but those same customers (and their teams) also need ways to optimize the organic traffic they already have.

Popups and sticky bars are both tools that have a short time to value, for three reasons:

  1. They are less complex than a landing page (to build and to understand)
  2. Most businesses get more traffic to their website than they do to their landing pages, so they’ll see conversions coming in more quickly
  3. After installing a single line of Javascript, you can place them anywhere on your site without technical help.

If you remember back to the chart at the beginning, 4.45% of canceling customers said they had “poor campaign performance”. This is important to note because getting something up and running quickly and easily is one thing, but being successful – especially as a marketer – is another thing altogether.

Which is why our job as product marketers doesn’t stop until the customer is being successful using your software.

The other way to increase product stickiness

I mentioned earlier about needing to provide a superior customer experience, especially in a crowded competitive landscape. You need to have a company people trust more than the competition, and trust comes from transparency, security, reliability, and just giving a human shit about your customers.

I love how Andy Raskin puts it in his recent post about “The greatest sales pitch I’ve seen all year, it’s Drift’s and it’s brilliant”:

Product differentiation, by itself, has become indefensible because today’s competitors can copy your better, faster, cheaper features virtually instantly. Now, the only thing they can’t replicate is the trust that customers feel for you and your team. Ultimately, that’s born not of a self-centered mission statement like “We want to be best-in-class X” or “to disrupt Y,” but of a culture whose beating heart is a strategic story that casts your customer as the world-changing hero.

How are you reducing your time to value (TTV)?

I’d love to know the techniques you’re using to discover your ah-ha moments, and what you’re doing to accelerate your customers’ access to them. Lemme know in the comments.

Oli Gardner


How to Build a Sticky SaaS Product

10,000 Hours of Practice Won’t Increase Conversions (But This Will)

It’s a maxim we’ve all heard and one we’re likely just as sick of. A saying which, if you spend any time on LinkedIn or other self-promotional platforms, you’ll find adorning countless updates, “motivational” images, and influencing all kinds of statuses. A belief so ingrained in the modern business psyche that it’s become almost synonymous with success. What’s the belief I’m referring to? Malcolm Gladwell’s idea that with 10,000 hours of practice, you can become an expert at anything. It’s an approach almost every successful person recommends. Countless hours of hustle will have you mastering your craft and reaching some…

The post 10,000 Hours of Practice Won’t Increase Conversions (But This Will) appeared first on The Daily Egg.

View article:

10,000 Hours of Practice Won’t Increase Conversions (But This Will)


How To Avoid Web Analytics ‘Analysis Paralysis’ & Spend More Time Making Optimization Wins

Visualizations are the best place to start It’s much easier to start your website optimization journey from a visual perspective than a strictly numerical one. When you can immediately see where visitors and users are clicking and where they’re not, you’re instantly clued into obvious bottlenecks, blockers, and regions that are completely ignored. Take this Google Analytics data for example… When you start digging through your typical analytics packages, you’ll end up several pages deep, looking at listed data like what is shown above. Not always helpful, right? What happens when I look at visual website analytics? This is a…

The post How To Avoid Web Analytics ‘Analysis Paralysis’ & Spend More Time Making Optimization Wins appeared first on The Daily Egg.

View article: 

How To Avoid Web Analytics ‘Analysis Paralysis’ & Spend More Time Making Optimization Wins