Thought Leadership Blog

by Keith Sibson Keith Sibson

Consumer Conversion

Online marketing is dominated by anecdotes. This worked in my last job, so let’s do it. Or I read about this technique on LinkedIn from someone I admire.

There’s nothing necessarily wrong with this; in online marketing and especially consumer marketing, testing, learning, and failing fast is essential. However, for any marketing initiative it’s important to understand context – what needle, specifically, is this initiative trying to move? Conversion Rate is the obvious one, but can be misleading. Not all conversions are “good” and, in fact, you can often improve marketing performance with a reduction in conversion rate. Let’s try to break down consumer conversion to understand what is going on; I’ll be focusing on website conversion for now, not apps. Here are some core concepts:

  • Site Traffic: visitors coming to your website and being exposed to your attempts to convert them into a customer
  • Conversion Rate: of all unique site visitors, the percentage that turn into paying customers.
  • Lifetime Value (LTV): your expected total revenue from a customer; easy to calculate for one-time purchases, but more nuanced for SaaS.
  • Channel: how the customer originally came to your site, e.g. direct, paid or organic search, referral, etc.
  • Pay-Per-Click (PPC) Cost: paid marketing where you pay for each click on your ads.
  • Cost-Per-Action (CPA) Cost: paid marketing where you typically pay only for converted customers; common with affiliate marketing.
  • Cost to Acquire a Customer (CAC): often thought of as only paid marketing costs (e.g. Google, Facebook, affiliates), but there is more…
  • Cost to Onboard a Customer (COB): this cost is usually in employee time, often hidden in the Customer Success or Integration departments.
  • Sales Costs: if you have a sales team, their salaries and commissions are indirectly part of your CAC.

And now let’s introduce our final concept, the highest level and most strategic metric for your business.

  • Total Sales, Marketing, and Onboarding ROI: the sum of LTV relative to total sales and marketing costs, plus COB.

We want to maximize total LTV while minimizing total marketing costs, and to the extent possible also sales and onboarding costs.

Now that we have some definitions to work with, let’s dive into some tactical conversion concepts and think about how they are related.


This is a technique for “filtering” site traffic before or immediately after it reaches your site, to encourage conversions only for visitors that actually want your product and are therefore most likely to buy. If you incur significant marketing or onboarding costs before the customer actually commits to paying you, qualification is useful as a way to limit these “tire kickers”. Using CAPTCHA to ensure your visitors are human is an obvious one. Displaying up-front fees is also an effective way to qualify site traffic. The tactical approach to this depends on the channel.

  • For CPC channels like paid search, you can add “starting at $100/mo” to the search listing itself. Prospects that that would never pay this much will never click, so no CPC cost is incurred, and your conversion rate increases, because unqualifieds never enter your funnel.
  • For affiliate marketing channels based on CPA, disclose pricing on your landing page. This will lower conversion rate but also your costs for sales, marketing, and onboarding.
  • Do more qualification for products with high onboarding cost and/or risk of onboarding failure. 


Hurdles are artificial barriers to conversion that filter unqualified traffic by requiring some determination and legitimacy on the part of the customer. Hurdles can be a means to qualify customers. For example, requiring the user to provide and verify their work email address makes it much more likely that the customer is legitimate and serious about wanting the product. Hurdles reduce conversion rate due to higher abandons, but can also reduce marketing costs. The tradeoff is in how many legitimate customers abandon due to problems in the process. For example, requiring that prospects scan and email their ID is a significant hurdle likely to cause abandonment.

  • Use hurdles in high cost CPA channels where it makes sense to aggressively filter out the least likely to convert to avoiding the marketing cost.
  • Avoid artificial hurdles in PPC channels, because the traffic is already paid for.


Enticement is the use of an offer or some sort of reward to increase conversion, e.g. a free iPad or free credit report. While this can increase conversion, the problem is that customers may be more interested in the enticement than your actual product. They may not completely convert to a paying customer, so when used in conjunction with paid marketing, enticement will grow your top of funnel and associated marketing costs but bring lower quality customers. Enticement is essentially the opposite of qualification, so it’s important to balance the two and in analyzing marketing channel performance, treat any channel with traffic exposed to enticement as its own separate channel. 

  • Remember to add the cost of your enticement to CAC for the relevant channel, even a product discount is a cost.
  • Try to use an enticement that is somehow relevant to your product – even the least qualified visitor will fill out a form for a free iPad.
  • The best channel for enticements is organic search: the traffic is essentially free, and the visitor is already somewhat qualified through the act of searching so using enticements on a landing page can drive impulse.


Facilitation is optimization of the conversion process by removing barriers to conversion. For example, removing unnecessary data collection, limiting the number of signup steps required, and addressing common error cases are all good optimizations. These can be additive too, for example requiring SSL and showing a privacy disclosure to reduce data security fears as a possible abandonment reason. Facilitation is a no-brainer in terms of marketing economics, because it increases both conversion rate and total conversions. On the downside, you may be missing out of data that you really need. For example, if you need Social Security Number for compliance reasons, you have to collect it at some point, but it is better to push that collection step down the conversion funnel rather than try to collect up front. In general, for everything you ask of your visitor, think carefully about how much you really need it at that point. Do you really need their phone number? Only if you absolutely need to call the prospect to convert them, otherwise you can push it down to the onboarding phase. And instead of asking for address information, use geo-location tools that can detect this automatically behind the scenes. Finally, always try to prioritize email address over other data points. Email address is strategic in that once you have it, you can reach the prospect with lifecycle marketing even if they don’t complete the process, days, weeks, or perhaps even months later.

  • Conversion should be “frustration free” regardless of channel.
  • Always streamline your conversion process as much as possible to avoid giving the prospect reasons to abandon.
  • Don’t require a complex password unless the information it secures is actually sensitive.
  • Provide a suggested username if not available, or let them use the email address you have already collected.


Verification ensures that customer provided information is accurate and so minimizes problems during the acquisition process. Strong verification reduces the number of data input errors that result in invalid conversions, thereby reducing marketing expense and COB. The trade-off is in how much the verification acts as an unnecessary hurdle, which could affect legitimate conversions. An example of effective verification is real-time email address deliverability validation, as opposed to requiring an email receipt and click. Verification also acts as a form of qualification, filtering out bogus customers who deliberately enter fake information.

  • Behind-the-scenes verification should be “always on” regardless of channel.
  • Push complicated verification steps down funnel to onboarding if possible, unless they are critically important to qualification.
  • Add verification costs to your CAC.

Analyzing and Optimizing – The Importance of Channel

The success of your overall marketing effort distills down to your Total Sales, Marketing, and Onboarding ROI, but it’s impossible to analyze and optimize against that metric alone. There is no one size fits all approach to conversion analysis and optimization, it’s important to view each acquisition channel as its own entity with its own metrics, and potentially sub-channels thereof. Conversion rates and CAC vary by channel, and different optimization techniques are appropriate depending on their cost and how that cost is incurred. Your per customer COB will generally not be affected by channel, but customer quality is. Low quality conversions can result in failed onboarding and zero return on that COB, you should explicitly track failed onboarding (and early cancellations or product returns) to ensure it is accounted for in the applicable channel.

by Keith Sibson Keith Sibson

Getting Audiences To Pay

There is a macro-trend in publishing towards Pay Walls, which are a fundamental departure from the advertising business model in that audiences pay directly for the content. This model won’t work for every publisher, and the rule of thumb is that your content must be differentiated and high quality for it to work. So when the quality is mostly behind the paywall, how do you actually get readers to convert? There’s a chicken and egg problem here: users won’t convert without seeing the value, but the value is behind the paywall. I addressed this topic in my first guest post at Martech Series.

Getting Audiences to Pay When Everyone’s Behind the Paywall

by Keith Sibson Keith Sibson

jQuery Selectors in a Nutshell

What is a jQuery Selector?

jQuery is a query syntax that finds HTML page elements matching specific criteria. It is analogous to the more complex SQL that queries databases, and conceptually similar to using filters in Excel. However, the specific data that jQuery operates over is the webpage Document Object Model (DOM), which is basically just a technical way of saying the structure of the webpage. The DOM is the set of all “nested” elements on the webpage. To understand jQuery selectors, we need a clear understanding of HTML. Don’t worry, it’s much simpler than it appears!

What is an element?

HTML elements have a well defined syntax and consistent, nested structure. The basic structure of an HTML element is like this:

<tagName attributeName=attributeValue(s) …> … elementContents … </tagName> 

</tagName> “closes” the element. An HTML “tag” is just the opening or closing entity. For example: <p> and </p> are called HTML tags

An HTML element encompasses the opening tag, optional content, and the closing tag:

<p>This is the content</p> : This complete thing is called a HTML element

Attributes are properties of an element, they are name/value pairs specified in the opening tag. Elements can have any number of attributes including zero.

<article class=’category-food’ id=’the_article’ data-source=’wordpress’>

elementContents can be anything, including more elements. Elements are nested inside other elements as part of a hierarchy. Example:

<body><article class=’category-food’>…</article></body>

If you understand this, then you already know pretty much everything you need to know about HTML to effectively use jQuery, but you can find more detail about HTML elements here.

Basic jQuery

Learning about jQuery online is made more difficult by the fact that it is primarily used as an API within JavaScript, so examples tend to use JavaScript syntax which makes them more cluttered with practical programming language concepts like function calls and parameters, etc. However, the core of jQuery is its Selector syntax, which in its pure form is much easier to understand.

The most basic Selector is a simple tag name:


This is basically saying “select (find and return) all elements on the page with tag name p”. P tags happen to be paragraphs, but it doesn’t matter to jQuery what the tag means in the context of an HTML page. These are all simple tag-based selectors:

divtablearticlebodysomethingsomething: Find elements with tag name somethingsomething

jQuery Selectors always return a list of 0, 1, or more elements. A typical use of a jQuery selector is essentially to ask “is there at least one element that matches the selector?”

jQuery and Element Attributes

Attributes are name/value pairs inside the opening tag of the HTML element. You can write jQuery selectors that find elements with a certain attribute and/or attribute value.

[data-category=’blogpost’]: Find all elements with attribute name data-category = blogpost[data-category]: Elements with data-category attribute of any valuediv[data-category]: Div elements with data-category attribute of any value[data-categories*=’ecom’]: Elements with data-categories containingcharacters ‘ecom’body[type~=’post’]: Body element with type attribute containing whole word ‘post’

Note that class and id attributes are considered special attributes in jQuery with their own syntax:

.bodytext: Find all elements of class bodytextarticle.diy_category: Find all article elements of class diy_category

Note the dot before the class name. This syntax is just shorthand equivalent to these selectors:

[class~=’bodytext’]: Find all elements with class attribute containing word ‘bodytext’article[class~=’diy_category’]: article tag elements with class attribute word ‘diy_category’

Similarly, # is used as jQuery shorthand for the id= attribute. These are equivalent: 

#email_form: Find the element with id=email_form[id=’email_form’]: Find the element with attribute name id and value ‘email_form’

Note that in HTML, element id values are supposed to be unique, so generally you don’t need to narrow the selector. For example, while div#email_form is perfectly valid jQuery, in practice it is probably redundant to include the div as there will only be 0 or 1 elements with id=email_form on the page. More detailed info on matching operators for attribute selectors is here.

jQuery and Element Hierarchy

Returning to and extending our previous example HTML:

<body><article class=’category-food’>…</article><div id=’recommended_articles’><article class=’category-drink’> …<article class=’category-food’> …

Here, the first article element is a direct child of the body element, and the other articles are direct children of div#recommended_articles. In Audience Development, we are often using jQuery to look for HTML that uniquely identifies a page as having some characteristic, for targeting specialized widgets. So in this example, the page’s main article has category food, and there are two articles (probably not full articles) in a recommended section, one food and one drink. 

If we wanted to target a Drinks category specific email capture widget to category-drink pages, we might write a simple jQuery selector as follows:


However, this is problematical, because in the example above it will match as TRUE (>0 elements) for the article in the recommended section, whereas the main article is category-food. 

What we really want to detect is when the main article is category-drink, and we can do this by requiring a specific hierarchy using “>”:

body > article.category-drink: Find child article elements of body with class category-drink

Or just:

body > .category-drink: Find any child elements of body with class category-drink

This will avoid matching articles in the recommended_articles div, and correctly be FALSE in the example above, because the recommended articles are not direct children of the body element. If you actually wanted to match a recommended article you could chain the child syntax:

body > div#recommended_articles > .category-drink

Or just:

body > div > .category-drink

In general, we want to be as specific as we need to be, but no more. Very long selectors give you more specific results, but are also more fragile: if the page structure or attributes change over time, very long selectors that require a specific hierarchy of elements and attributes are more likely to become invalid.

jQuery AND and OR logic

jQuery does have the concepts of logical AND and OR, but it is not very explicit. Essentially, you can specify AND logic by chaining together selector expressions without spaces. This is AND logic applied in the context of a single element. That is, to be returned, a single element must have all selector expressions be matches:

.category-drink.category-food: true if exists an element with both food AND drink class

You can mix and match selector types:

#the_article.category-food: true for element id=the_article AND class=category-food

You can chain attribute syntax:

[id=the_article][class~=category-food]: equivalent to above example

jQuery OR logic is significantly different from AND logic, note that it does not require the selector to match on the same element.

.category-drink, .category-food: true if exists drink element or food element

As an aside here, note that it is possible to implement OR logic matching on a single element, you just need to be more specific with your selector, narrowing it down to a single element while using OR. For example:

.category-drink, .category-food: will match the same or any two elements

If you wanted to match on food OR drink but only on a single element, you need to narrow down to that element on both sides of the OR expression, ideally using a unique element id, like this:

#the_article.category-drink, #the_article.category-food

jQuery Filters (Advanced)

We have seen how to select elements based on tags, attributes, and hierarchy. There is another useful aspect to jQuery called filters that goes beyond this. The way to think of filters is that they take a set of elements found by a selector, and further filter it down. There are many available filters, you can recognize them by their colon (:) syntax.

The most useful filter is contains:

<p>This is the content</p>p:contains(‘the content’): find p elements containing ‘the content’

jQuery in Practice

Remember: if the selector doesn’t work (select something) in Chrome Inspector, then it’s not going to work in your JavaScript. Do all of your jQuery discovery, prototyping, and testing in the Chrome inspector; don’t waste your time by starting work directly with JavaScript, it will take 10 times longer to test, find, and fix problems.

Chrome Inspector is the starting point for all jQuery work. On any web page, simply right click and choose “Inspect”. Inspector is a powerful and complicated tool for website developers, but for jQuery work we only need the Elements tab. 

jQuery selector in Chrome Inspector

In the Elements tab, hitting Ctrl+F it opens the find feature, where you can search for page elements that might be useful for jQuery rules. Note that the find feature supports jQuery syntax in addition to straight text search, to a point. Specifically, it does not support jQuery filters (:). 

Another useful tool for jQuery testing is SelectorGadget, a Chrome Extension available in the Chrome Web Store. SelectorGadget works even without Inspector Open, simply click the icon in the extensions tray (top right of Chrome) and the jQuery search box appears. 

jQuery selector with filter in SelectorGadget

It will highlight page elements on the page with colored overlays, and you can click to see a selector. Note that SelectorGadget is not good at suggesting unique selectors (a selector that will return exactly the one element you clicked on), in the example above there are 230 matching elements!

Use SelectorGadget in combination with the Inspector Elements panel, where you can right click and “Copy Selector”, which will be a unique selector.

Copy jQuery Selector from Chrome Inspector Elements Tab

SelectorGadget is better than the find elements feature for testing selectors because it supports filters like :contains(…).

jQuery Selector in SelectorGadget

jQuery Resources

As mentioned, jQuery was first and foremost created as a JavaScript library, used to both select and manipulate HTML elements. This tends to make documentation about selectors more obtuse. In general, when you see something like:


The $(“…”) is specific to JavaScript. Technically in JavaScript $ is the function name to apply a jQuery selector to the current page. The fact that it is a $ makes it confusing because it looks like special syntax, but it’s conceptually no different from:


The actual selector is the part in double quotes.

Links to useful resources for jQuery reference and learning:

Practice by going to any web page and picking an element at random. Then try to write a selector for it that will find that and only that element. Compare to the selector returned by right-click, Copy CSS Selector if you need help. 

by Keith Sibson Keith Sibson

Newsletters as a Business

I was quoted in Digiday for an interesting article about Morning Brew, a highly successful standalone newsletter-as-a-business. It’s a mystery to me why more publishers don’t wake up to the potential of high quality newsletter products. If Morning Brew, theSkimm, and theHustle can generate millions of dollars with just a handful of employees and a direct sold ad model, why is this opportunity commonly overlooked by larger publishers with vastly more resources?

Morning Brew claims 1 million subscribers, $3m in revenue — and a profitable business

by Keith Sibson Keith Sibson

B2B Marketing Trends

I was quoted extensively in an ANA article (Association of National Advertisers):

“I’ve seen many B2B marketers over-engineer around data and analytics, ending up with their shoelaces tied together,” Sibson says. “The best investment of time and energy for B2B marketers is a strong segmentation strategy, backed by rigorous qualitative research. Aim to have five to 10 clearly defined segments, or personas, for your prospects, and use data and analytics to bucket them as quickly as possible in order to get them into the right messaging stream.”

Read the full article here (registration wall):

5 Trends in B2B Email Marketing

by Keith Sibson Keith Sibson

Browser Push for Publishers

Browser Push hasn’t generated much hype recently, but given the now universal support across browsers and devices, it will. Publishers should be highly motivated to diversify their channels away from Google and especially Facebook, and browser push is a great complement to email. Browser Push is an additional direct channel that you own, can reach your audience at a time of your choosing, and literally buzz their pockets.

Browser Push can be highly effective if done right, but is easy to screw up. Read my article in Publishing Executive to learn more.

The Power and Pitfalls of Using Browser Push Notifications