Recherche avancée

Médias (0)

Mot : - Tags -/publication

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (70)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Contribute to documentation

    13 avril 2011

    Documentation is vital to the development of improved technical capabilities.
    MediaSPIP welcomes documentation by users as well as developers - including : critique of existing features and functions articles contributed by developers, administrators, content producers and editors screenshots to illustrate the above translations of existing documentation into other languages
    To contribute, register to the project users’ mailing (...)

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (5786)

  • How to Choose the Optimal Multi-Touch Attribution Model for Your Organisation

    13 mars 2023, par Erin — Analytics Tips

    If you struggle to connect the dots on your customer journeys, you are researching the correct solution. 

    Multi-channel attribution models allow you to better understand the users’ paths to conversion and identify key channels and marketing assets that assist them.

    That said, each attribution model has inherent limitations, which make the selection process even harder.

    This guide explains how to choose the optimal multi-touch attribution model. We cover the pros and cons of popular attribution models, main evaluation criteria and how-to instructions for model implementation. 

    Pros and Cons of Different Attribution Models 

    Types of Attribution Models

    First Interaction 

    First Interaction attribution model (also known as first touch) assigns full credit to the conversion to the first channel, which brought in a lead. However, it doesn’t report other interactions the visitor had before converting.

    Marketers, who are primarily focused on demand generation and user acquisition, find the first touch attribution model useful to evaluate and optimise top-of-the-funnel (ToFU). 

    Pros 

    • Reflects the start of the customer journey
    • Shows channels that bring in the best-qualified leads 
    • Helps track brand awareness campaigns

    Cons 

    • Ignores the impact of later interactions at the middle and bottom of the funnel 
    • Doesn’t provide a full picture of users’ decision-making process 

    Last Interaction 

    Last Interaction attribution model (also known as last touch) shifts the entire credit allocation to the last channel before conversion. But it doesn’t account for the contribution of all other channels. 

    If your focus is conversion optimization, the last-touch model helps you determine which channels, assets or campaigns seal the deal for the prospect. 

    Pros 

    • Reports bottom-of-the-funnel events
    • Requires minimal data and configurations 
    • Helps estimate cost-per-lead or cost-per-acquisition

    Cons 

    • No visibility into assisted conversions and prior visitor interactions 
    • Overemphasise the importance of the last channel (which can often be direct traffic) 

    Last Non-Direct Interaction 

    Last Non-Direct attribution excludes direct traffic from the calculation and assigns the full conversion credit to the preceding channel. For example, a paid ad will receive 100% of credit for conversion if a visitor goes directly to your website to buy a product. 

    Last Non-Direct attribution provides greater clarity into the bottom-of-the-funnel (BoFU). events. Yet, it still under-reports the role other channels played in conversion. 

    Pros 

    • Improved channel visibility, compared to Last-Touch 
    • Avoids over-valuing direct visits
    • Reports on lead-generation efforts

    Cons 

    • Doesn’t work for account-based marketing (ABM) 
    • Devalues the quality over quantity of leads 

    Linear Model

    Linear attribution model assigns equal credit for a conversion to all tracked touchpoints, regardless of their impact on the visitor’s decision to convert.

    It helps you understand the full conversion path. But this model doesn’t distinguish between the importance of lead generation activities versus nurturing touches.

    Pros 

    • Focuses on all touch points associated with a conversion 
    • Reflects more steps in the customer journey 
    • Helps analyse longer sales cycles

    Cons 

    • Doesn’t accurately reflect the varying roles of each touchpoint 
    • Can dilute the credit if too many touchpoints are involved 

    Time Decay Model 

    Time decay models assumes that the closer a touchpoint is to the conversion, the greater its influence. Pre-conversion touchpoints get the highest credit, while the first ones are ranked lower (5%-5%-10%-15%-25%-30%).

    This model better reflects real-life customer journeys. However, it devalues the impact of brand awareness and demand-generation campaigns. 

    Pros 

    • Helps track longer sales cycles and reports on each touchpoint involved 
    • Allows customising the half-life of decay to improve reporting 
    • Promotes conversion optimization at BoFu stages

    Cons 

    • Can prompt marketers to curtail ToFU spending, which would translate to fewer qualified leads at lower stages
    • Doesn’t reflect highly-influential events at earlier stages (e.g., a product demo request or free account registration, which didn’t immediately lead to conversion)

    Position-Based Model 

    Position-Based attribution model (also known as the U-shaped model) allocates the biggest credit to the first and the last interaction (40% each). Then distributes the remaining 20% across other touches. 

    For many marketers, that’s the preferred multi-touch attribution model as it allows optimising both ToFU and BoFU channels. 

    Pros 

    • Helps establish the main channels for lead generation and conversion
    • Adds extra layers of visibility, compared to first- and last-touch attribution models 
    • Promotes budget allocation toward the most strategic touchpoints

    Cons 

    • Diminishes the importance of lead nurturing activities as more credit gets assigned to demand-gen and conversion-generation channels
    • Limited flexibility since it always assigns a fixed amount of credit to the first and last touchpoints, and the remaining credit is divided evenly among the other touchpoints

    How to Choose the Right Multi-Touch Attribution Model For Your Business 

    If you’re deciding which attribution model is best for your business, prepare for a heated discussion. Each one has its trade-offs as it emphasises or devalues the role of different channels and marketing activities.

    To reach a consensus, the best strategy is to evaluate each model against three criteria : Your marketing objectives, sales cycle length and data availability. 

    Marketing Objectives 

    Businesses generate revenue in many ways : Through direct sales, subscriptions, referral fees, licensing agreements, one-off or retainer services. Or any combination of these activities. 

    In each case, your marketing strategy will look different. For example, SaaS and direct-to-consumer (DTC) eCommerce brands have to maximise both demand generation and conversion rates. In contrast, a B2B cybersecurity consulting firm is more interested in attracting qualified leads (as opposed to any type of traffic) and progressively nurturing them towards a big-ticket purchase. 

    When selecting a multi-touch attribution model, prioritise your objectives first. Create a simple scoreboard, where your team ranks various channels and campaign types you rely on to close sales. 

    Alternatively, you can survey your customers to learn how they first heard about your company and what eventually triggered their conversion. Having data from both sides can help you cross-validate your assumptions and eliminate some biases. 

    Then consider which model would best reflect the role and importance of different channels in your sales cycle. Speaking of which….

    Sales Cycle Length 

    As shoppers, we spend less time deciding on a new toothpaste brand versus contemplating a new IT system purchase. Factors like industry, business model (B2C, DTC, B2B, B2BC), and deal size determine the average cycle length in your industry. 

    Statistically, low-ticket B2C sales can happen within just several interactions. The average B2B decision-making process can have over 15 steps, spread over several months. 

    That’s why not all multi-touch attribution models work equally well for each business. Time-decay suits better B2B companies, while B2C usually go for position-based or linear attribution. 

    Data Availability 

    Businesses struggle with multi-touch attribution model implementation due to incomplete analytics data. 

    Our web analytics tool captures more data than Google Analytics. That’s because we rely on a privacy-focused tracking mechanism, which allows you to collect analytics without showing a cookie consent banner in markets outside of Germany and the UK. 

    Cookie consent banners are mandatory with Google Analytics. Yet, almost 40% of global consumers reject it. This results in gaps in your analytics and subsequent inconsistencies in multi-touch attribution reports. With Matomo, you can compliantly collect more data for accurate reporting. 

    Some companies also struggle to connect collected insights to individual shoppers. With Matomo, you can cross-attribute users across browning sessions, using our visitors’ tracking feature

    When you already know a user’s identifier (e.g., full name or email address), you can track their on-site behaviours over time to better understand how they interact with your content and complete their purchases. Quick disclaimer, though, visitors’ tracking may not be considered compliant with certain data privacy laws. Please consult with a local authority if you have doubts. 

    How to Implement Multi-Touch Attribution

    Multi-touch attribution modelling implementation is like a “seek and find” game. You have to identify all significant touchpoints in your customers’ journeys. And sometimes also brainstorm new ways to uncover the missing parts. Then figure out the best way to track users’ actions at those stages (aka do conversion and events tracking). 

    Here’s a step-by-step walkthrough to help you get started. 

    Select a Multi-Touch Attribution Tool 

    The global marketing attribution software is worth $3.1 billion. Meaning there are plenty of tools, differing in terms of accuracy, sophistication and price.

    To make the right call prioritise five factors :

    • Available models : Look for a solution that offers multiple options and allows you to experiment with different modelling techniques or develop custom models. 
    • Implementation complexity : Some providers offer advanced data modelling tools for creating custom multi-touch attribution models, but offer few out-of-the-box modelling options. 
    • Accuracy : Check if the shortlisted tool collects the type of data you need. Prioritise providers who are less dependent on third-party cookies and allow you to identify repeat users. 
    • Your marketing stack : Some marketing attribution tools come with useful add-ons such as tag manager, heatmaps, form analytics, user session recordings and A/B testing tools. This means you can collect more data for multi-channel modelling with them instead of investing in extra software. 
    • Compliance : Ensure that the selected multi-attribution analytics software wouldn’t put you at risk of GDPR non-compliance when it comes to user privacy and consent to tracking/analysis. 

    Finally, evaluate the adoption costs. Free multi-channel analytics tools come with data quality and consistency trade-offs. Premium attribution tools may have “hidden” licensing costs and bill you for extra data integrations. 

    Look for a tool that offers a good price-to-value ratio (i.e., one that offers extra perks for a transparent price). 

    Set Up Proper Data Collection 

    Multi-touch attribution requires ample user data. To collect the right type of insights you need to set up : 

    • Website analytics : Ensure that you have all tracking codes installed (and working correctly !) to capture pageviews, on-site actions, referral sources and other data points around what users do on page. 
    • Tags : Add tracking parameters to monitor different referral channels (e.g., “facebook”), campaign types (e.g., ”final-sale”), and creative assets (e.g., “banner-1”). Tags help you get a clearer picture of different touchpoints. 
    • Integrations : To better identify on-site users and track their actions, you can also populate your attribution tool with data from your other tools – CRM system, A/B testing app, etc. 

    Finally, think about the ideal lookback window — a bounded time frame you’ll use to calculate conversions. For example, Matomo has a default windows of 7, 30 or 90 days. But you can configure a custom period to better reflect your average sales cycle. For instance, if you’re selling makeup, a shorter window could yield better results. But if you’re selling CRM software for the manufacturing industry, consider extending it.

    Configure Goals and Events 

    Goals indicate your main marketing objectives — more traffic, conversions and sales. In web analytics tools, you can measure these by tracking specific user behaviours. 

    For example : If your goal is lead generation, you can track :

    • Newsletter sign ups 
    • Product demo requests 
    • Gated content downloads 
    • Free trial account registration 
    • Contact form submission 
    • On-site call bookings 

    In each case, you can set up a unique tag to monitor these types of requests. Then analyse conversion rates — the percentage of users who have successfully completed the action. 

    To collect sufficient data for multi-channel attribution modelling, set up Goal Tracking for different types of touchpoints (MoFU & BoFU) and asset types (contact forms, downloadable assets, etc). 

    Your next task is to figure out how users interact with different on-site assets. That’s when Event Tracking comes in handy. 

    Event Tracking reports notify you about specific actions users take on your website. With Matomo Event Tracking, you can monitor where people click on your website, on which pages they click newsletter subscription links, or when they try to interact with static content elements (e.g., a non-clickable banner). 

    Using in-depth user behavioural reports, you can better understand which assets play a key role in the average customer journey. Using this data, you can localise “leaks” in your sales funnel and fix them to increase conversion rates.

    Test and Validated the Selected Model 

    A common challenge of multi-channel attribution modelling is determining the correct correlation and causality between exposure to touchpoints and purchases. 

    For example, a user who bought a discounted product from a Facebook ad would act differently than someone who purchased a full-priced product via a newsletter link. Their rate of pre- and post-sales exposure will also differ a lot — and your attribution model may not always accurately capture that. 

    That’s why you have to continuously test and tweak the selected model type. The best approach for that is lift analysis. 

    Lift analysis means comparing how your key metrics (e.g., revenue or conversion rates) change among users who were exposed to a certain campaign versus a control group. 

    In the case of multi-touch attribution modelling, you have to monitor how your metrics change after you’ve acted on the model recommendations (e.g., invested more in a well-performing referral channel or tried a new brand awareness Twitter ad). Compare the before and after ROI. If you see a positive dynamic, your model works great. 

    The downside of this approach is that you have to invest a lot upfront. But if your goal is to create a trustworthy attribution model, the best way to validate is to act on its suggestions and then test them against past results. 

    Conclusion

    A multi-touch attribution model helps you measure the impact of different channels, campaign types, and marketing assets on metrics that matter — conversion rate, sales volumes and ROI. 

    Using this data, you can invest budgets into the best-performing channels and confidently experiment with new campaign types. 

    As a Matomo user, you also get to do so without breaching customers’ privacy or compromising on analytics accuracy.

    Start using accurate multi-channel attribution in Matomo. Get your free 21-day trial now. No credit card required.

  • A systematic approach to making Web Applications accessible

    22 février 2012, par silvia

    With the latest developments in HTML5 and the still fairly new ARIA (Accessible Rich Interface Applications) attributes introduced by the W3C WAI (Web Accessibility Initiative), browsers have now implemented many features that allow you to make your JavaScript-heavy Web applications accessible.

    Since I began working on making a complex web application accessible just over a year ago, I discovered that there was no step-by-step guide to approaching the changes necessary for creating an accessible Web application. Therefore, many people believe that it is still hard, if not impossible, to make Web applications accessible. In fact, it can be approached systematically, as this article will describe.

    This post is based on a talk that Alice Boxhall and I gave at the recent Linux.conf.au titled “Developing accessible Web apps – how hard can it be ?” (slides, video), which in turn was based on a Google Developer Day talk by Rachel Shearer (slides).

    These talks, and this article, introduce a process that you can follow to make your Web applications accessible : each step will take you closer to having an application that can be accessed using a keyboard alone, and by users of screenreaders and other accessibility technology (AT).

    The recommendations here only roughly conform to the requirements of WCAG (Web Content Accessibility Guidelines), which is the basis of legal accessibility requirements in many jurisdictions. The steps in this article may or may not be sufficient to meet a legal requirement. It is focused on the practical outcome of ensuring users with disabilities can use your Web application.

    Step-by-step Approach

    The steps to follow to make your Web apps accessible are as follows :

    1. Use native HTML tags wherever possible
    2. Make interactive elements keyboard accessible
    3. Provide extra markup for AT (accessibility technology)

    If you are a total newcomer to accessibility, I highly recommend installing a screenreader and just trying to read/navigate some Web pages. On Windows you can install the free NVDA screenreader, on Mac you can activate the pre-installed VoiceOver screenreader, on Linux you can use Orca, and if you just want a browser plugin for Chrome try installing ChromeVox.

    1. Use native HTML tags

    As you implement your Web application with interactive controls, try to use as many native HTML tags as possible.

    HTML5 provides a rich set of elements which can be used to both add functionality and provide semantic context to your page. HTML4 already included many useful interactive controls, like <a>, <button>, <input> and <select>, and semantic landmark elements like <h1>. HTML5 adds richer <input> controls, and a more sophisticated set of semantic markup elements like such as <time>, <progress>, <meter>, <nav>, <header>, <article> and <aside>. (Note : check browser support for browser support of the new tags).

    Using as much of the rich HTML5 markup as possible means that you get all of the accessibility features which have been implemented in the browser for those elements, such as keyboard support, short-cut keys and accessibility metadata, for free. For generic tags you have to implement them completely from scratch.

    What exactly do you miss out on when you use a generic tag such as <div> over a specific semantic one such as <button> ?

    1. Generic tags are not focusable. That means you cannot reach them through using the [tab] on the keyboard.
    2. You cannot activate them with the space bar or enter key or perform any other keyboard interaction that would be regarded as typical with such a control.
    3. Since the role that the control represents is not specified in code but is only exposed through your custom visual styling, screenreaders cannot express to their users what type of control it is, e.g. button or link.
    4. Neither can screenreaders add the control to the list of controls on the page that are of a certain type, e.g. to navigate to all headers of a certain level on the page.
    5. And finally you need to manually style the element in order for it to look distinctive compared to other elements on the page ; using a default control will allow the browser to provide the default style for the platform, which you can still override using CSS if you want.

    Example :

    Compare these two buttons. The first one is implemented using a <div> tag, the second one using a <button> tag. Try using a screenreader to experience the difference.

    Send
    <style>
     .custombutton 
      cursor : pointer ;
      border : 1px solid #000 ;
      background-color : #F6F6F6 ;
      display : inline-block ;
      padding : 2px 5px ;
    
    </style>
    <div class="custombutton" onclick="alert(’sent !’)">
      Send
    </div>
    
    <button onclick="alert(’sent !’)">
    Send
    </button>

    2. Make interactive elements keyboard accessible

    Many sophisticated web applications have some interactive controls that just have no appropriate HTML tag equivalent. In this case, you will have had to build an interactive element with JavaScript and <div> and/or <span> tags and lots of custom styling. The good news is, it’s possible to make even these custom controls accessible, and as a side benefit you will also make your application smoother to use for power users.

    The first thing you can do to test usability of your control, or your Web app, is to unplug the mouse and try to use only the [TAB] and [ENTER] keys to interact with your application.

    the tab key on the keyboardthe enter key on the keyboard

    Try the following :

    • Can you reach all interactive elements with [TAB] ?
    • Can you activate interactive elements with [ENTER] (or [SPACE]) ?
    • Are the elements in the right tab order ?
    • After interaction : is the right element in focus ?
    • Is there a keyboard shortcut that activates the element (accesskey) ?

    No ? Let’s fix it.

    2.1. Reaching interactive elements

    If you have an element on your page that cannot be reached with [TAB], put a @tabindex attribute on it.

    Example :

    Here we have a <span> tag that works as a link (don’t do this – it’s just a simple example). The first one cannot be reached using [TAB] but the second one has a tabindex and is thus part of the tab order of the HTML page.

    (Note : since we experiment lots with the tabindex in this article, to avoid confusion, click on some text in this paragraph and then hit the [TAB] key to see where it goes next. The click will set your keyboard focus in the DOM.)

    Click

    <style>
    .customlink 
      text-decoration : underline ;
      cursor : pointer ;
    
    </style>
    <span class="customlink" onclick="alert(’activated !’)">
    Click
    </span>
    
    Click
    <style>
    .customlink 
      text-decoration : underline ;
      cursor : pointer ;
    
    </style>
    <span class="customlink" onclick="alert(’activated !’)" tabindex="0">
    Click
    </span>
    

    You set @tabindex=0 to add an element into the native tab order of the page, which is the DOM order.

    2.2. Activating interactive elements

    Next, you typically want to be able to use the [ENTER] and [SPACE] keys to activate your custom control. To do so, you will need to implement an onkeydown event handler. Note that the keyCode for [ENTER] is 13 and for [SPACE] is 32.

    Example :

    Let’s add this functionality to the <span> tag from before. Try tabbing to it and hit the [ENTER] or [SPACE] key.

    Click
    <span class="customlink" onclick="alert(’activated !’)" tabindex="0">
    Click
    </span>
    
    &lt;script&gt;<br />
    function handlekey(event) {<br />
    var target = event.target || event.srcElement;<br />
    if (event.keyCode == 13 || event.keyCode == 32) { target.onclick(); }<br />
    }<br />
    &lt;/script&gt;


    Click

    <span class="customlink" onclick="alert(’activated !’)" tabindex="0"
          onkeydown="handlekey(event) ;">
    Click
    </span>
    <script>
    function handlekey(event) 
      var target = event.target || event.srcElement ;
      if (event.keyCode == 13 || event.keyCode == 32) 
        target.onclick() ;
      
    
    </script>

    Note that there are some controls that might need support for keys other than [tab] or [enter] to be able to use them from the keyboard alone, for example a custom list box, menu or slider should respond to arrow keys.

    2.3. Elements in the right tab order

    Have you tried tabbing to all the elements on your page that you care about ? If so, check if the order of tab stops seems right. The default order is given by the order in which interactive elements appear in the DOM. For example, if your page’s code has a right column that is coded before the main article, then the links in the right column will receive tab focus first before the links in the main article.

    You could change this by re-ordering your DOM, but oftentimes this is not possible. So, instead give the elements that should be the first ones to receive tab focus a positive @tabindex. The tab access will start at the smallest non-zero @tabindex value. If multiple elements share the same @tabindex value, these controls receive tab focus in DOM order. After that, interactive elements and those with @tabindex=0 will receive tab focus in DOM order.

    Example :

    The one thing that always annoys me the most is if the tab order in forms that I am supposed to fill in is illogical. Here is an example where the first and last name are separated by the address because they are in a table. We could fix it by moving to a <div> based layout, but let’s use @tabindex to demonstrate the change.

    Firstname :
    Address :
    Lastname :
    City :
    <table class="customtabs">
      <tr>
        <td>Firstname :
          <input type="text" id="firstname">
        </td>
        <td>Address :
          <input type="text" id="address">
        </td>
      </tr>
      <tr>
        <td>Lastname :
          <input type="text" id="lastname">
        </td>
        <td>City :
          <input type="text" id="city">
        </td>
      </tr>
    </table>
    
    Click here to test this form,
    then [TAB] :
    Firstname :
    Address :
    Lastname :
    City :
    <table class="customtabs">
      <tr>
        <td>Firstname :
          <input type="text" id="firstname" tabindex="10">
        </td>
        <td>Address :
          <input type="text" id="address" tabindex="30">
        </td>
      </tr>
      <tr>
        <td>Lastname :
          <input type="text" id="lastname" tabindex="20">
        </td>
        <td>City :
          <input type="text" id="city" tabindex="40">
        </td>
      </tr>
    </table>

    Be very careful with using non-zero tabindex values. Since they change the tab order on the page, you may get side effects that you might not have intended, such as having to give other elements on the page a non-zero tabindex value to avoid skipping too many other elements as I would need to do here.

    2.4. Focus on the right element

    Some of the controls that you create may be rather complex and open elements on the page that were previously hidden. This is particularly the case for drop-downs, pop-ups, and menus in general. Oftentimes the hidden element is not defined in the DOM right after the interactive control, such that a [TAB] will not put your keyboard focus on the next element that you are interacting with.

    The solution is to manage your keyboard focus from JavaScript using the .focus() method.

    Example :

    Here is a menu that is declared ahead of the menu button. If you tab onto the button and hit enter, the menu is revealed. But your tab focus is still on the menu button, so your next [TAB] will take you somewhere else. We fix it by setting the focus on the first menu item after opening the menu.

    &lt;script&gt;<br />
    function displayMenu(value) {<br />
    document.getElementById(&quot;custommenu&quot;).style.display=value;<br />
    }<br />
    &lt;/script&gt;
    <div id="custommenu" style="display:none ;">
      <button id="item1" onclick="displayMenu(’none’) ;">Menu item1</button>
      <button id="item2" onclick="displayMenu(’none’) ;">Menu item2</button>
    </div>
    <button onclick="displayMenu(’block’) ;">Menu</button>
    <script>
    function displayMenu(value) 
     document.getElementById("custommenu").style.display=value ;
    
    </script>
    
    &lt;script&gt;<br />
    function displayMenu2(value) {<br />
    document.getElementById(&quot;custommenu2&quot;).style.display=value;<br />
    document.getElementById(&quot;item1&quot;).focus();<br />
    }<br />
    &lt;/script&gt;
    <div id="custommenu" style="display:none ;">
      <button id="item1" onclick="displayMenu(’none’) ;">Menu item1</button>
      <button id="item2" onclick="displayMenu(’none’) ;">Menu item2</button>
    </div>
    <button onclick="displayMenu(’block’) ;">Menu</button>
    <script>
    function displayMenu(value) 
     document.getElementById("custommenu").style.display=value ;
     document.getElementById("item1").focus() ;
    
    </script>

    You will notice that there are still some things you can improve on here. For example, after you close the menu again with one of the menu items, the focus does not move back onto the menu button.

    Also, after opening the menu, you may prefer not to move the focus onto the first menu item but rather just onto the menu <div>. You can do so by giving that div a @tabindex and then calling .focus() on it. If you do not want to make the div part of the normal tabbing order, just give it a @tabindex=-1 value. This will allow your div to receive focus from script, but be exempt from accidental tabbing onto (though usually you just want to use @tabindex=0).

    Bonus : If you want to help keyboard users even more, you can also put outlines on the element that is currently in focus using CSS”s outline property. If you want to avoid the outlines for mouse users, you can dynamically add a class that removes the outline in mouseover events but leaves it for :focus.

    2.5. Provide sensible keyboard shortcuts

    At this stage your application is actually keyboard accessible. Congratulations !

    However, it’s still not very efficient : like power-users, screenreader users love keyboard shortcuts : can you imagine if you were forced to tab through an entire page, or navigate back to a menu tree at the top of the page, to reach each control you were interested in ? And, obviously, anything which makes navigating the app via the keyboard more efficient for screenreader users will benefit all power users as well, like the ubiquitous keyboard shortcuts for cut, copy and paste.

    HTML4 introduced so-called accesskeys for this. In HTML5 @accesskey is now allowed on all elements.

    The @accesskey attribute takes the value of a keyboard key (e.g. @accesskey="x") and is activated through platform- and browser-specific activation keys. For example, on the Mac it’s generally the [Ctrl] key, in IE it’ the [Alt] key, in Firefox on Windows [Shift]-[Alt], and in Opera on Windows [Shift]-[ESC]. You press the activation key and the accesskey together which either activates or focuses the element with the @accesskey attribute.

    Example :


    &lt;script&gt;<br />
    var button = document.getElementById('accessbutton');<br />
    if (button.accessKeyLabel) {<br />
     button.innerHTML += ' (' + button.accessKeyLabel + ')';<br />
    }<br />
    &lt;/script&gt;
    <button id="accessbutton" onclick="alert(’sent !’)" accesskey="e">
    Send
    </button>
    <script>
      var button = document.getElementById(’accessbutton’) ;
      if (button.accessKeyLabel) 
        button.innerHTML += ’ (’ + button.accessKeyLabel + ’)’ ;
      
    </script>

    Now, the idea behind this is clever, but the execution is pretty poor. Firstly, the different activation keys between different platforms and browsers make it really hard for people to get used to the accesskeys. Secondly, the key combinations can conflict with browser and screenreader shortcut keys, the first of which will render browser shortcuts unusable and the second will effectively remove the accesskeys.

    In the end it is up to the Web application developer whether to use the accesskey attribute or whether to implement explicit shortcut keys for the application through key event handlers on the window object. In either case, make sure to provide a help list for your shortcut keys.

    Also note that a page with a really good hierarchical heading layout and use of ARIA landmarks can help to eliminate the need for accesskeys to jump around the page, since there are typically default navigations available in screen readers to jump directly to headings, hyperlinks, and ARIA landmarks.

    3. Provide markup for AT

    Having made the application keyboard accessible also has advantages for screenreaders, since they can now reach the controls individually and activate them. So, next we will use a screenreader and close our eyes to find out where we only provide visual cues to understand the necessary interaction.

    Here are some of the issues to consider :

    • Role may need to get identified
    • States may need to be kept track of
    • Properties may need to be made explicit
    • Labels may need to be provided for elements

    This is where the W3C’s ARIA (Accessible Rich Internet Applications) standard comes in. ARIA attributes provide semantic information to screen readers and other AT that is otherwise conveyed only visually.

    Note that using ARIA does not automatically implement the standard widget behavior – you’ll still need to add focus management, keyboard navigation, and change aria attribute values in script.

    3.1. ARIA roles

    After implementing a custom interactive widget, you need to add a @role attribute to indicate what type of controls it is, e.g. that it is playing the role of a standard tag such as a button.

    Example :

    This menu button is implemented as a <div>, but with a role of “button” it is announced as a button by a screenreader.

    Menu
    <div tabindex="0" role="button">Menu</div>
    

    ARIA roles also describe composite controls that do not have a native HTML equivalent.

    Example :

    This menu with menu items is implemented as a set of <div> tags, but with a role of “menu” and “menuitem” items.

    <div role="menu">
      <div tabindex="0" role="menuitem">Cut</div>
      <div tabindex="0" role="menuitem">Copy</div>
      <div tabindex="0" role="menuitem">Paste</div>
    </div>
    

    3.2. ARIA states

    Some interactive controls represent different states, e.g. a checkbox can be checked or unchecked, or a menu can be expanded or collapsed.

    Example :

    The following menu has states on the menu items, which are here not just used to give an aural indication through the screenreader, but also a visual one through CSS.

    <style>
    .custombutton[aria-checked=true]:before 
       content :  "\2713 " ;
    
    </style>
    <div role="menu">
      <div tabindex="0" role="menuitem" aria-checked="true">Left</div>
      <div tabindex="0" role="menuitem" aria-checked="false">Center</div>
      <div tabindex="0" role="menuitem" aria-checked="false">Right</div>
    </div>
    

    3.3. ARIA properties

    Some of the functionality of interactive controls cannot be captured by the role attribute alone. We have ARIA properties to add features that the screenreader needs to announce, such as aria-label, aria-haspopup, aria-activedescendant, or aria-live.

    Example :

    The following drop-down menu uses aria-haspopup to tell the screenreader that there is a popup hidden behind the menu button together with an ARIA state of aria-expanded to track whether it’s open or closed.

    Justify
    &lt;script&gt;<br />
    var button = document.getElementById(&quot;button&quot;);<br />
    var menu = document.getElementById(&quot;menu&quot;);<br />
    var items = document.getElementsByClassName(&quot;menuitem&quot;);<br />
    var focused = 0;<br />
    function showMenu(evt) {<br />
       evt.stopPropagation();<br />
       menu.style.visibility = 'visible';<br />
       button.setAttribute('aria-expanded','true');<br />
       focused = getSelected();<br />
       items[focused].focus();<br />
     }<br />
     function hideMenu(evt) {<br />
       evt.stopPropagation();<br />
       menu.style.visibility = 'hidden';<br />
       button.setAttribute('aria-expanded','false');<br />
       button.focus();<br />
     }<br />
     function getSelected() {<br />
       for (var i=0; i &lt; items.length; i++) {<br />
         if (items[i].getAttribute('aria-checked') == 'true') {<br />
           return i;<br />
         }<br />
       }<br />
     }<br />
     function setSelected(elem) {<br />
       var curSelected = getSelected();<br />
       items[curSelected].setAttribute('aria-checked', 'false');<br />
       elem.setAttribute('aria-checked', 'true');<br />
     }<br />
     function selectItem(evt) {<br />
       setSelected(evt.target);<br />
       hideMenu(evt);<br />
     }<br />
    function getPrevItem(index) {<br />
       var prev = index - 1;<br />
       if (prev &lt; 0) {<br />
         prev = items.length - 1;<br />
       }<br />
       return prev;<br />
     }<br />
     function getNextItem(index) {<br />
       var next = index + 1;<br />
       if (next == items.length) {<br />
         next = 0;<br />
       }<br />
       return next;<br />
     }<br />
    function handleButtonKeys(evt) {<br />
       evt.stopPropagation();<br />
       var key = evt.keyCode;<br />
       switch(key) {<br />
         case (13): /* ENTER */<br />
         case (32): /* SPACE */<br />
           showMenu(evt);<br />
         default:<br />
       }<br />
     }<br />
     function handleMenuKeys(evt) {<br />
       evt.stopPropagation();<br />
       var key = evt.keyCode;<br />
       switch(key) {<br />
         case (38): /* UP */<br />
           focused = getPrevItem(focused);<br />
           items[focused].focus();<br />
           break;<br />
         case (40): /* DOWN */<br />
           focused = getNextItem(focused);<br />
           items[focused].focus();<br />
           break;<br />
         case (13): /* ENTER */<br />
         case (32): /* SPACE */<br />
           setSelected(evt.target);<br />
             hideMenu(evt);<br />
             break;<br />
         case (27): /* ESC */<br />
           hideMenu(evt);<br />
            break;<br />
         default:<br />
       }<br />
     }<br />
     button.addEventListener('click', showMenu, false);<br />
     button.addEventListener('keydown', handleButtonKeys, false);<br />
     for (var i = 0;  i &lt; items.length; i++) {<br />
       items[i].addEventListener('click', selectItem, false);<br />
       items[i].addEventListener('keydown', handleMenuKeys, false);<br />
     }<br />
    &lt;/script&gt;
    <div class="custombutton" id="button" tabindex="0" role="button"
       aria-expanded="false" aria-haspopup="true">
        <span>Justify</span>
    </div>
    <div role="menu"  class="menu" id="menu" style="display : none ;">
      <div tabindex="0" role="menuitem" class="menuitem" aria-checked="true">
        Left
      </div>
      <div tabindex="0" role="menuitem" class="menuitem" aria-checked="false">
        Center
      </div>
      <div tabindex="0" role="menuitem" class="menuitem" aria-checked="false">
        Right
      </div>
    </div>
    [CSS and JavaScript for example omitted]

    3.4. Labelling

    The main issue that people know about accessibility seems to be that they have to put alt text onto images. This is only one means to provide labels to screenreaders for page content. Labels are short informative pieces of text that provide a name to a control.

    There are actually several ways of providing labels for controls :

    • on img elements use @alt
    • on input elements use the label element
    • use @aria-labelledby if there is another element that contains the label
    • use @title if you also want a label to be used as a tooltip
    • otherwise use @aria-label

    I’ll provide examples for the first two use cases - the other use cases are simple to deduce.

    Example :

    The following two images show the rough concept for providing alt text for images : images that provide information should be transcribed, images that are just decorative should receive an empty @alt attribute.

    shocked lolcat titled 'HTML cannot do that!
    Image by Noah Sussman
    <img src="texture.jpg" alt="">
    <img src="lolcat.jpg"
    alt="shocked lolcat titled ’HTML cannot do that !">
    <img src="texture.jpg" alt="">
    

    When marking up decorative images with an empty @alt attribute, the image is actually completely removed from the accessibility tree and does not confuse the blind user. This is a desired effect, so do remember to mark up all your images with @alt attributes, even those that don’t contain anything of interest to AT.

    Example :

    In the example form above in Section 2.3, when tabbing directly on the input elements, the screen reader will only say "edit text" without announcing what meaning that text has. That’s not very useful. So let’s introduce a label element for the input elements. We’ll also add checkboxes with a label.






    <label>Doctor title :</label>
      <input type="checkbox" id="doctor"/>
    <label>Firstname :</label>
      <input type="text" id="firstname2"/>
    

    <label for="lastname2">Lastname :</label>
    <input type="text" id="lastname2"/>

    <label>Address :
    <input type="text" id="address2">
    </label>
    <label for="city2">City :
    <input type="text" id="city2">
    </label>
    <label for="remember">Remember me :</label>
    <input type="checkbox" id="remember">

    In this example we use several different approaches to show what a different it makes to use the <label> element to mark up input boxes.

    The first two fields just have a <label> element next to a <input> element. When using a screenreader you will not notice a difference between this and not using the <label> element because there is no connection between the <label> and the <input> element.

    In the third field we use the @for attribute to create that link. Now the input field isn’t just announced as "edit text", but rather as "Lastname edit text", which is much more useful. Also, the screenreader can now skip the labels and get straight on the input element.

    In the fourth and fifth field we actually encapsulate the <input> element inside the <label> element, thus avoiding the need for a @for attribute, though it doesn’t hurt to explicity add it.

    Finally we look at the checkbox. By including a referenced <label> element with the checkbox, we change the screenreaders announcement from just "checkbox not checked" to "Remember me checkbox not checked". Also notice that the click target now includes the label, making the checkbox not only more usable to screenreaders, but also for mouse users.

    4. Conclusions

    This article introduced a process that you can follow to make your Web applications accessible. As you do that, you will noticed that there are other things that you may need to do in order to give the best experience to a power user on a keyboard, a blind user using a screenreader, or a vision-impaired user using a screen magnifier. But once you’ve made a start, you will notice that it’s not all black magic and a lot can be achieved with just a little markup.

    You will find more markup in the WAI ARIA specification and many more resources at Mozilla’s ARIA portal. Now go and change the world !

    Many thanks to Alice Boxhall and Dominic Mazzoni for their proof-reading and suggested changes that really helped improve the article !

  • 7 Ecommerce Metrics to Track and Improve in 2024

    12 avril 2024, par Erin

    You can invest hours into market research, create the best ads you’ve ever seen and fine-tune your budgets. But the only way to really know if your digital marketing campaigns move the needle is to track ecommerce metrics.

    It’s time to put your hopes and gut feelings aside and focus on the data. Ecommerce metrics are key performance indicators that can tell you a lot about the performance of a single campaign, a traffic source or your entire marketing efforts. 

    That’s why it’s essential to understand what ecommerce metrics are, key metrics to track and how to improve them. 

    Ready to do all of the above ? Then, let’s get started.

    What are ecommerce metrics ? 

    An ecommerce metric is any metric that helps you understand the effectiveness of your digital marketing efforts and the extent to which users are taking a desired action. Most ecommerce metrics focus on conversions, which could be anything from making a purchase to subscribing to your email list.

    You need to track ecommerce metrics to understand how well your marketing efforts are working. They are essential to helping you run a cost-effective marketing campaign that delivers a return on investment. 

    For example, tracking ecommerce metrics will help you identify whether your digital marketing campaigns are generating a return on investment or whether they are actually losing money. They also help you identify your most effective campaigns and traffic sources. 

    Ecommerce metrics also help you spot opportunities for improvement both in terms of your marketing campaigns and your site’s UX. 

    For instance, you can use ecommerce metrics to track the impact on revenue of A/B tests on your marketing campaigns. Or you can use them to understand how users interact with your website and what, if anything, you can do to make it more engaging.

    What’s the difference between conversion rate and conversion value ?

    The difference between a conversion rate and a conversion value is that the former is a percentage while the latter is a monetary value. 

    There can be confusion between the terms conversion rate and conversion value. Since conversions are core metrics in ecommerce, it’s worth taking a minute to clarify. 

    Conversion rates measure the percentage of people who take a desired action on your website compared to the total number of visitors. If you have 100 visitors and one of them converts, then your conversion rate is 1%. 

    Here’s the formula for calculating your conversion rate :

    Conversion Rate (%) = (Number of conversions / Total number of visitors) × 100

    Conversion rate formula

    Using the example above :

    Conversion Rate = (1 / 100) × 100 = 1%

    Conversion value is a monetary amount you assign to each conversion. In some cases, this is the price of the product a user purchases. In other conversion events, such as signing up for a free trial, you may wish to assign a hypothetical conversion value. 

    To calculate a hypothetical conversion value, let’s consider that you have estimated the average revenue generated from a paying customer is $300. If the conversion rate from free trial to paying customer is 20%, then the hypothetical conversion value for each free trial signup would be $300 multiplied by 20%, which equals $60. This takes into account the number of free trial users who eventually become paying customers.

    So the formula for hypothetical conversion value looks like this :

    Hypothetical conversion value formula

    Hypothetical conversion value = (Average revenue per paying customer) × (Conversion rate)

    Using the values from our example :

    Hypothetical conversion value = $300 × 20% = $60

    The most important ecommerce metrics and how to track them

    There are dozens of ecommerce metrics you could track, but here are seven of the most important. 

    Conversion rate

    Conversion rate is the percentage of visitors who take a desired action. It is arguably one of the most important ecommerce metrics and a great top-level indicator of the success of your marketing efforts. 

    You can measure the conversion rate of anything, including newsletter signups, ebook downloads, and product purchases, using the following formula :

    Conversion rate

    Conversion rate = (Number of people who took action / Total number of visitors) × 100

    You usually won’t have to manually calculate your conversion rate, though. Almost every web analytics or ad platform will track the conversion rate automatically.

    Matomo, for instance, automatically tracks any conversion you set in the Goals report.

    A screenshot of Matomo's Goals report

    As you can see in the screenshot, your site’s conversions are plotted over a period of time and the conversion rate is tracked below the graph. You can change the time period to see how your conversion rate fluctuates.

    If you want to go even further, track your new visitor conversion rate to see how engaging your site is to first-time visitors. 

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    Cost per acquisition

    Cost per acquisition (CPA) is the average cost of acquiring a new user. You can calculate your overall CPA or you can break CPA down by email campaign, traffic source, or any other criteria. 

    Calculate CPA by dividing your total marketing cost by the number of new users you acquire.

    Cost per acquisition = Total marketing cost / Number of customers acquired

    CPA = Total marketing cost​ / Number of new users acquired 

    So if your Google Ads campaign costs €1,000 and you acquire 100 new users, your CPA is €10 (1000/100=10).

    It’s important to note that CPA is not the same as customer acquisition cost. Customer acquisition cost considers the number of paying customers. CPA looks at the number of users taking a certain action, like subscribing to a newsletter, making a purchase, or signing up for a free trial.

    Cost per acquisition is a direct measure of your marketing efforts’ effectiveness, especially when comparing CPA to average customer spend and return on ad spend. 

    If your CPA is higher than the average customer spend, your marketing campaign is profitable. If not, then you can look at ways to either increase customer spend or decrease your cost per acquisition.

    Customer lifetime value

    Customer lifetime value (CLV) is the average amount of money a customer will spend with your ecommerce brand over their lifetime. 

    Customer value is the total worth of a customer to your brand based on their purchasing behaviour. To calculate it, multiply the average purchase value by the average number of purchases. For instance, if the average purchase value is €50 and customers make 5 purchases on average, the customer value would be €250.

    Use this formula to calculate customer value :

    Customer value = Average purchase value × Average number of purchases

    Customer value = Average purchase value × Average number of purchases

    Then you can calculate customer lifetime value using the following formula :

    Customer lifetime value = Customer value * Average customer lifespan

    CLV = Customer value × Average customer lifespan

    In another example, let’s say you have a software company and customers pay you €500 per year for an annual subscription. If the average customer lifespan is 5 years, then the Customer Lifetime Value (CLV) would be €2,500.

    Customer lifetime value = €500 × 5 = €2,500

    Knowing how much potential customers are likely to spend helps you set accurate marketing budgets and optimise the price of your products. 

    Return on investment

    Return on investment (ROI) is the amount of revenue your marketing efforts generate compared to total spend. 

    It’s usually calculated as a percentage using the following formula :

    Return On Investment = (Revenue / Total Spend) x 100

    ROI = (Revenue / Total spend) × 100

    If you spend €1,000 on a paid ad campaign and your efforts bring in €5,000, then your ROI is 500% (5,000/1,000 × 100).

    With a web analytics tool like Matomo, you can quickly see the revenue generated from each traffic source and you can drill down further to compare different social media channels, search engines, referral websites and campaigns to get more granular view. 

    Revenue by channel in Matomo

    In the example above in Matomo’s Marketing Attribution feature, we can see that social networks are generating the highest amount of revenue in the year. To calculate ROI, we would need to compare the amount of investment to each channel. 

    Let’s say we invested $1,000 per year in search engine optimisation and content marketing, the return on investment (ROI) stands at approximately 2576%, based on a revenue of $26,763.48 per year. 

    Conversely, for organic social media campaigns, where $5,000 was invested and revenue amounted to $71,180.22 per year, the ROI is approximately 1323%. 

    Despite differences in revenue generation, both channels exhibit significant returns on investment, with SEO and content marketing demonstrating a much higher ROI compared to organic social media campaigns. 

    With that in mind, we might want to consider shifting our marketing budget to focus more on search engine optimisation and content marketing as it’s a greater return on investment.

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    Return on ad spend

    Return on ad spend (ROAS) is similar to return on investment, but it measures the profitability of a specific ad or campaign.

    Calculate ROAS using the following formula :

    Return on ad Spend = revenue / ad cost

    ROAS = Revenue / Ad cost 

    A positive ROAS means you are making money. If you generate €3 for every €1 you spend on advertising, for example, there’s no reason to turn off that campaign. If you only make €1 for every €2 you spend, however, then you need to shut down the campaign or optimise it. 

    Bounce rate

    Bounce rate is the percentage of visitors who leave your site without taking another action. Calculate it using the following formula :

    Bounce rate = (Number of visitors who bounce / Total number of visitors) * 100

    Bounce rate = (Number of visitors who bounce / Total number of visitors) × 100

    Some portion of users will always leave your site immediately, but you should aim to make your bounce rate as low as possible. After all, every customer that bounces is a missed opportunity that you may never get again. 

    You can check the bounce rate for each one of your site’s pages using Matomo’s page analytics report. Web analytics tools like Google Analytics can track bounce rates for online stores also. 

    A screenshot of Matomo's page view report A screenshot of Matomo's page view report

    Bounce rate is calculated automatically. You can sort the list of pages by bounce rate allowing you to prioritise your optimisation efforts. 

    Don’t stop there, though. Explore bounce rate further by comparing your mobile bounce rate vs. desktop bounce rate by segmenting your traffic. This will highlight whether your mobile site needs improving. 

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.

    No credit card required

    Click-through rate

    Your clickthrough rate (CTR) tells you the number of people who click on your ads as a percentage of total impressions. You can calculate it by dividing the number of clicks your ad gets by the total number of times people see it. 

    So the formula looks like this :

    Click-through Rate = (Number of clicks / Total impressions) × 100

    CTR (%) = (Number of clicks / Total impressions​) × 100

    If an ad gets 1,000 impressions and 10 people click on it, then the CTR will be 10/1,000 × 100 = 1%

    You don’t usually need to calculate your clickthrough rate manually, however. Most ad platforms like Google Ads will automatically calculate CTR.

    What is considered a good ecommerce sales conversion rate ?

    This question is so broad it’s almost impossible to answer. The thing is, sales conversion rates vary massively depending on the conversion event and the industry. A good conversion rate in one industry might be terrible in another. 

    That being said, research shows that the average website conversion rate across all industries is 2.35%. Of course, some websites convert much better than this. The same study found that the top 25% of websites across all industries have a conversion rate of 5.31% or higher. 

    How can you improve your conversion rate ?

    Ecommerce metrics don’t just let you track your campaign’s ROI, they help you identify ways to improve your campaign. 

    Use these five tips to start improving your marketing campaign’s conversion rates today :

    Run A/B tests

    The most effective way to improve almost all of the ecommerce metrics you track is to test, test, and test again.

    A/B testing or multivariate testing compares two different versions of the same content, such as a landing page or blog post. Seeing which version performs better can help you squeeze as many conversions as possible from your website and ad campaigns. But only if you test as many things as possible. This should include :

    • Ad placement
    • Ad copy
    • CTAs
    • Headlines
    • Straplines
    • Colours
    • Design

    To create and analyse tests and their results effectively, you’ll need either an A/B testing platform or a web analytics solution like Matomo, which offers one out of the box.

    A/B testing in Matomo analytics

    Matomo’s A/B Testing feature makes it easy to create and track tests over time, breaking down each test’s variations by the metrics that matter. It automatically calculates statistical significance, too, meaning you can be sure you’re making a change for the better. 

    Try Matomo for Free

    Get the web insights you need, without compromising data accuracy.