Recherche avancée

Médias (0)

Mot : - Tags -/serveur

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

Autres articles (37)

  • La file d’attente de SPIPmotion

    28 novembre 2010, par

    Une file d’attente stockée dans la base de donnée
    Lors de son installation, SPIPmotion crée une nouvelle table dans la base de donnée intitulée spip_spipmotion_attentes.
    Cette nouvelle table est constituée des champs suivants : id_spipmotion_attente, l’identifiant numérique unique de la tâche à traiter ; id_document, l’identifiant numérique du document original à encoder ; id_objet l’identifiant unique de l’objet auquel le document encodé devra être attaché automatiquement ; objet, le type d’objet auquel (...)

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

Sur d’autres sites (6012)

  • Benefits and Shortcomings of Multi-Touch Attribution

    13 mars 2023, par Erin — Analytics Tips

    Few sales happen instantly. Consumers take their time to discover, evaluate and become convinced to go with your offer. 

    Multi-channel attribution (also known as multi-touch attribution or MTA) helps businesses better understand which marketing tactics impact consumers’ decisions at different stages of their buying journey. Then double down on what’s working to secure more sales. 

    Unlike standard analytics, multi-channel modelling combines data from various channels to determine their cumulative and independent impact on your conversion rates. 

    The main benefit of multi-touch attribution is obvious : See top-performing channels, as well as those involved in assisted conversions. The drawback of multi-touch attribution : It comes with a more complex setup process. 

    If you’re on the fence about getting started with multi-touch attribution, here’s a summary of the main arguments for and against it. 

    What Are the Benefits of Multi-Touch Attribution ?

    Remember an old parable of blind men and an elephant ?

    Each one touched the elephant and drew conclusions about how it might look. The group ended up with different perceptions of the animal and thought the others were lying…until they decided to work together on establishing the truth.

    Multi-channel analytics works in a similar way : It reconciles data from various channels and campaign types into one complete picture. So that you can get aligned on the efficacy of different campaign types and gain some other benefits too. 

    Better Understanding of Customer Journeys 

    On average, it takes 8 interactions with a prospect to generate a conversion. These interactions happen in three stages : 

    • Awareness : You need to introduce your company to the target buyers and pique their interest in your solution (top-of-the-funnel). 
    • Consideration : The next step is to channel this casual interest into deliberate research and evaluation of your offer (middle-of-the-funnel). 
    • Decision : Finally, you need to get the buyer to commit to your offer and close the deal (bottom-of-the-funnel). 

    You can analyse funnels using various attribution models — last-click, fist-click, position-based attribution, etc. Each model, however, will spotlight the different element(s) of your sales funnel. 

    For example, a single-touch attribution model like last-click zooms in on the bottom-of-the-funnel stage. You can evaluate which channels (or on-site elements) sealed the deal for the prospect. For example, a site visitor arrived from an affiliate link and started a free trial. In this case, the affiliate (referral traffic) gets 100% credit for the conversion. 

    This measurement tactic, however, doesn’t show which channels brought the customer to the very bottom of your funnel. For instance, they may have interacted with a social media post, your landing pages or a banner ad before that. 

    Multi-touch attribution modelling takes funnel analysis a notch further. In this case, you map more steps in the customer journey — actions, events, and pages that triggered a visitor’s decision to convert — in your website analytics tool.

    Funnels Report Matomo

    Then, select a multi-touch attribution model, which provides more backward visibility aka allows you to track more than one channel, preceding the conversion. 

    For example, a Position Based attribution model reports back on all interactions a site visitor had between their first visit and conversion. 

    A prospect first lands at your website via search results (Search traffic), which gets a 40% credit in this model. Two days later, the same person discovers a mention of your website on another blog and visits again (Referral traffic). This time, they save the page as a bookmark and revisit it again in two more days (Direct traffic). Each of these channels will get a 10% credit. A week later, the prospect lands again on your site via Twitter (Social) and makes a request for a demo. Social would then receive a 40% credit for this conversion. Last-click would have only credited social media and first-click — search engines. 

    The bottom line : Multi-channel attribution models show how different channels (and marketing tactics) contribute to conversions at different stages of the customer journey. Without it, you get an incomplete picture.

    Improved Budget Allocation 

    Understanding causal relationships between marketing activities and conversion rates can help you optimise your budgets.

    First-click/last-click attribution models emphasise the role of one channel. This can prompt you toward the wrong conclusions. 

    For instance, your Facebook ads campaigns do great according to a first-touch model. So you decide to increase the budget. What you might be missing though is that you could have an even higher conversion rate and revenue if you fix “funnel leaks” — address high drop-off rates during checkout, improve page layout and address other possible reasons for exiting the page.

    Matomo Customisable Goal Funnels
    Funnel reports at Matomo allow you to see how many people proceed to the next conversion stage and investigate why they drop off.

    By knowing when and why people abandon their purchase journey, you can improve your marketing velocity (aka the speed of seeing the campaign results) and your marketing costs (aka the budgets you allocate toward different assets, touchpoints and campaign types). 

    Or as one of the godfathers of marketing technology, Dan McGaw, explained in a webinar :

    “Once you have a multi-touch attribution model, you [can] actually know the return on ad spend on a per-campaign basis. Sometimes, you can get it down to keywords. Sometimes, you can get down to all kinds of other information, but you start to realise, “Oh, this campaign sucks. I should shut this off.” And then really, that’s what it’s about. It’s seeing those campaigns that suck and turning them off and then taking that budget and putting it into the campaigns that are working”.

    More Accurate Measurements 

    The big boon of multi-channel marketing attribution is that you can zoom in on various elements of your funnel and gain granular data on the asset’s performance. 

    In other words : You get more accurate insights into the different elements involved in customer journeys. But for accurate analytics measurements, you must configure accurate tracking. 

    Define your objectives first : How do you want a multi-touch attribution tool to help you ? Multi-channel attribution analysis helps you answer important questions such as :

    • How many touchpoints are involved in the conversions ? 
    • How long does it take for a lead to convert on average ? 
    • When and where do different audience groups convert ? 
    • What is your average win rate for different types of campaigns ?

    Your objectives will dictate which multi-channel modelling approach will work best for your business — as well as the data you’ll need to collect. 

    At the highest level, you need to collect two data points :

    • Conversions : Desired actions from your prospects — a sale, a newsletter subscription, a form submission, etc. Record them as tracked Goals
    • Touchpoints : Specific interactions between your brand and targets — specific page visits, referral traffic from a particular marketing channel, etc. Record them as tracked Events

    Your attribution modelling software will then establish correlation patterns between actions (conversions) and assets (touchpoints), which triggered them. 

    The accuracy of these measurements, however, will depend on the quality of data and the type of attribution modelling used. 

    Data quality stands for your ability to procure accurate, complete and comprehensive information from various touchpoints. For instance, some data won’t be available if the user rejected a cookie consent banner (unless you’re using a privacy-focused web analytics tool like Matomo). 

    Different attribution modelling techniques come with inherent shortcomings too as they don’t accurately represent the average sales cycle length or track visitor-level data, which allows you to understand which customer segments convert best.

    Learn more about selecting the optimal multi-channel attribution model for your business.

    What Are the Limitations of Multi-Touch Attribution ?

    Overall, multi-touch attribution offers a more comprehensive view of the conversion paths. However, each attribution model (except for custom ones) comes with inherent assumptions about the contribution of different channels (e.g,. 25%-25%-25%-25% in linear attribution or 40%-10%-10%-40% in position-based attribution). These conversion credit allocations may not accurately represent the realities of your industry. 

    Also, most attribution models don’t reflect incremental revenue you gain from existing customers, which aren’t converting through analysed channels. For example, account upgrades to a higher tier, triggered via an in-app offer. Or warranty upsell, made via a marketing email. 

    In addition, you should keep in mind several other limitations of multi-touch attribution software.

    Limited Marketing Mix Analysis 

    Multi-touch attribution tools work in conjunction with your website analytics app (as they draw most data from it). Because of that, such models inherit the same visibility into your marketing mix — a combo of tactics you use to influence consumer decisions.

    Multi-touch attribution tools cannot evaluate the impact of :

    • Dark social channels 
    • Word-of-mouth 
    • Offline promotional events
    • TV or out-of-home ad campaigns 

    If you want to incorporate this data into your multi-attribution reporting, you’ll have to procure extra data from other systems — CRM, ad measurement partners, etc, — and create complex custom analytics models for its evaluation.

    Time-Based Constraints 

    Most analytics apps provide a maximum 90-day lookback window for attribution. This can be short for companies with longer sales cycles. 

    Source : Marketing Charts

    Marketing channels can be overlooked or underappreciated when your attribution window is too short. Because of that, you may curtail spending on brand awareness campaigns, which, in turn, will reduce the number of people entering the later stages of your funnel. 

    At the same time, many businesses would also want to track a look-forward window — the revenue you’ll get from one customer over their lifetime. In this case, not all tools may allow you to capture accurate information on repeat conversions — through re-purchases, account tier updates, add-ons, upsells, etc. 

    Again, to get an accurate picture you’ll need to understand how far into the future you should track conversions. Will you only record your first sales as a revenue number or monitor customer lifetime value (CLV) over 3, 6 or 12 months ? 

    The latter is more challenging to do. But CLV data can add another depth of dimension to your modelling accuracy. With Matomo, you set up this type of tracking by using our visitors’ tracking feature. We can help you track select visitors with known identifiers (e.g. name or email address) to discover their visiting patterns over time. 

    Visitor User IDs in Matomo

    Limited Access to Raw Data 

    In web analytics, raw data stands for unprocessed website visitor information, stripped from any filters, segmentation or sampling applied. 

    Data sampling is a practice of analysing data subsets (instead of complete records) to extrapolate findings towards the entire data set. Google Analytics 4 applies data sampling once you hit over 500k sessions at the property level. So instead of accurate, real-life reporting, you receive approximations, generated by machine learning models. Data sampling is one of the main reasons behind Google Analytics’ accuracy issues

    In multi-channel attribution modelling, usage of sampled data creates further inconsistencies between the reports and the actual state of affairs. For instance, if your website generates 5 million page views, GA multi-touch analytical reports are based on the 500K sample size aka only 90% of the collected information. This hardly represents the real effect of all marketing channels and can lead to subpar decision-making. 

    With Matomo, the above is never an issue. We don’t apply data sampling to any websites (no matter the volume of traffic) and generate all the reports, including multi-channel attribution ones, based on 100% real user data. 

    AI Application 

    On the other hand, websites with smaller traffic volumes often have limited sampling datasets for building attribution models. Some tracking data may also be not available because the visitor rejected a cookie banner, for instance. On average, less than 50% of users in Australia, France, Germany, Denmark and the US among other countries always consent to all cookies. 

    To compensate for such scenarios, some multi-touch attribution solutions apply AI algorithms to “fill in the blanks”, which impacts the reporting accuracy. Once again, you get approximate data of what probably happened. However, Matomo is legally exempt from showing a cookie consent banner in most EU markets. Meaning you can collect 100% accurate data to make data-driven decisions.

    Difficult Technical Implementation 

    Ever since attribution modelling got traction in digital marketing, more and more tools started to emerge.

    Most web analytics apps include multi-touch attribution reports. Then there are standalone multi-channel attribution platforms, offering extra features for conversion rate optimization, offline channel tracking, data-driven custom modelling, etc. 

    Most advanced solutions aren’t available out of the box. Instead, you have to install several applications, configure integrations with requested data sources, and then use the provided interfaces to code together custom data models. Such solutions are great if you have a technical marketer or a data science team. But a steep learning curve and high setup costs make them less attractive for smaller teams. 

    Conclusion 

    Multi-touch attribution modelling lifts the curtain in more steps, involved in various customer journeys. By understanding which touchpoints contribute to conversions, you can better plan your campaign types and budget allocations. 

    That said, to benefit from multi-touch attribution modelling, marketers also need to do the preliminary work : Determine the key goals, set up event and conversion tracking, and then — select the optimal attribution model type and tool. 

    Matomo combines simplicity with sophistication. We provide marketers with familiar, intuitive interfaces for setting up conversion tracking across the funnel. Then generate attribution reports, based on 100% accurate data (without any sampling or “guesstimation” applied). You can also get access to raw analytics data to create custom attribution models or plug it into another tool ! 

    Start using accurate, easy-to-use multi-channel attribution with Matomo. Start your free 21-day trial now. No credit card requried. 

  • Strategies for Reducing Bank Customer Acquisition Cost [2024]

    24 septembre 2024, par Daniel Crough — Banking and Financial Services

    Acquiring new customers is no small feat — regardless of the size of your team. The expenses of various marketing efforts tend to pile up fast, even more so when your business operates in a highly competitive industry like banking. At the same time, marketing budgets continue to decrease — dropping from an average of 9.1% of total company revenue in 2023 down to 7.7% in 2024 — prompting businesses in the financial services industry to figure out how they can do more with less.

    That brings us to bank customer acquisition cost (CAC) — a key business metric that can reveal quite a bit about your bank’s long-term profitability and potential for achieving sustainable growth. 

    This article will cover the ins and outs of bank customer acquisition costs and share actionable tips and strategies you can implement to reduce CAC.

    What is customer acquisition cost in banking ? 

    List of customer acquisition cost components

    The global market volume of neobanks — fintech companies and digital banking platforms, often referred to as “challenger banks” — was estimated at $4.96 trillion in 2023. It’s expected to continue growing at a compound annual growth rate (CAGR) of 13.15% in the coming years, potentially reaching $10.44 trillion by 2028.

    That’s enough of an indicator that the financial services industry is now a highly competitive landscape where companies are often competing for the attention of a relatively limited audience. 

    Plus, several app-only banks based in Europe have made significant progress in attracting new customers to their financial products : 

    Unsurprisingly, this flurry of competition is putting upward pressure on customer acquisition and retention costs across the banking sector.

    Customer acquisition cost (CAC) — the sum of all costs and resources related to acquiring an additional customer — is one of the key business metrics to keep an eye on when trying to maximise your return on investment (ROI) and profitability, especially if your company operates in the banking industry.

    Here’s the basic formula you can use to calculate the cost of acquisition in banking : 

    Customer Acquisition Cost (CAC) = Total Amount Spent (TS) / Total New Customers Acquired (TNC)

    In essence, it requires you to divide the total cost of acquiring consumers — including sales and marketing expenses — by the total number of new customers your company has gained within a specific timeframe.

    There’s one thing you need to keep in mind : 

    The customer acquisition process involves more than just your marketing and sales departments. 

    While marketing and sales channels play a crucial role in this process, the list of expenses that may contribute to customer acquisition costs in banking goes well beyond that. 

    Here’s a quick breakdown of the customer acquisition cost formula to show you which costs make up the total amount spent : 

    • All advertising and marketing costs, including traditional (direct mail, billboards, TV and print advertising) and digital channels (email, Google ads, social media and influencer marketing)
    • Cost of outsourced marketing services, including any independent contractors involved in the process 
    • Salaries and commissions for the marketing team and sales representatives
    • Software subscriptions, including marketing software and web analytics tools 
    • Other overhead and operational costs 

    And until you’ve taken all these expenses into account, you won’t be able to accurately estimate how much it actually costs you to attract potential customers.

    Another thing to keep in mind is that there’s no universal definition of “good CAC.” 

    The average customer acquisition cost varies across different industries and business models. That said, you can generally expect a higher-than-average CAC in highly competitive sectors — namely, the financial, manufacturing and real estate industries. 

    Importance of tracking customer acquisition cost in banking 

    Illustration of customer acquisition concept

    Customer acquisition costs are an important indicator of a banking business’s potential growth and profitability. Monitoring this fundamental business metric can provide data-driven insights about your current bank customer acquisition strategy — and offers a few notable benefits : 

    • Measuring the performance and effectiveness of different channels and campaigns and making data-driven decisions regarding future marketing efforts
    • Improving return on investment (ROI) by determining the most effective strategies for acquiring new customers 
    • Improving profitability by assessing the value per customer and improving profit margins 
    • Benchmarking against industry competitors to see where your business’s CAC stands compared to the banking industry average

    At the risk of stating the obvious, acquiring new customers isn’t always easy. That’s true for many highly competitive industries — especially the banking sector, which is currently witnessing the rapid rise of digital disruptors. 

    Case in point, the fintech market alone is currently valued at $312.98 billion and is expected to reach $556.70 billion by 2030, following a CAGR of 14%.

    However, strong competition is only one of the challenges banks face throughout the process of attracting potential customers. 

    Here are a few other things to keep in mind : 

    • Ethical business practices and strict compliance requirements when it comes to the privacy and security of customer data, including meeting data protection standards and ensuring regulatory compliance
    • Lack of personalisation throughout the customer journey, which today’s customers view as a lack of understanding of — and even interest in — their needs and preferences 
    • Limited mobile banking capabilities, which further points to a failure to innovate and adapt — one of the leading risks that financial services may face 

    7 strategies for reducing bank customer acquisition costs 

    Illustration of CAC and business growth concepts

    When working on optimising your banking customer acquisition strategy, the key thing to keep in mind is that there are two sides to improving CAC : 

    On the one hand, you have efforts to decrease the costs associated with acquiring a new customer — and on the other, you have the importance of attracting high-value customers. 

    1. Eliminate friction points in the customer onboarding process

    One of the first things financial institutions should do is examine their existing digital onboarding process and look for friction points that might cause potential customers to drop off. After all, a streamlined onboarding process will minimise barriers to conversion, increasing the number of new customers acquired and improving overall customer satisfaction. 

    Keep in mind that, at the 30-day mark, finance mobile apps have an average user retention rate of 3% : 

    That says a lot about the importance of providing a frictionless onboarding experience as a retail bank or any other financial institution. 

    Granted, a single point of friction is rarely enough to cause customers to churn. It’s typically a combination of several factors — a lengthy sign-up process with complicated password requirements and time-consuming customer identification or poor customer service, for example — that occur during the key moments of the customer journey.

    In order to keep tabs on customer experiences across different touchpoints and spot potential barriers in their journey, you’ll need a reliable source of data. Matomo’s Funnels report can show you exactly where your website visitors are dropping off. 

    2. Get more personalised with your marketing efforts 

    Generic experiences are rarely the way to go — especially when you’re contending for the attention of prospective customers in such a competitive sector. 

    Besides, 62% of people who made an online purchase within the last six months have said that brands would lose their loyalty following a non-personalised experience. 

    What’s more shocking is that only a year earlier, that number stood at 45%.

    When it comes to improving marketing efficiency and sales strategies, 94% of marketers agree that personalisation is key : 

    It’s evident that personalised marketing supported by behavioural segmentation can significantly improve conversion rates — and, most importantly, reduce acquisition costs. 

    Of course, it’s virtually impossible to deliver targeted, personalised marketing messaging without creating audience segments and detailed buyer personas. Matomo’s Segmentation feature can help by allowing you to split website visitors into smaller groups and get much-needed insights for behavioural segmentation. 

    3. Build an omnichannel marketing strategy 

    Customer expectations, behaviours and preferences are constantly evolving, making it crucial for financial services to adapt their customer acquisition strategies accordingly. Meeting prospective customers on their preferred channels is a big part of that. 

    The issue is that modern banking customers tend to move across different channels. That’s one of the reasons why it’s becoming increasingly more difficult to deliver a unified experience throughout the entire customer journey and close the gap between digital and in-person customer interactions. 

    Omnichannel marketing gives you a way to keep up with customers’ ever-evolving expectations :

    Adopting this marketing strategy will allow you to meet customers where they are and deliver a seamless experience across a wide range of digital channels and touchpoints, leading to more exposure — and, ultimately, increasing the number of acquired customers.

    Matomo can support your omnichannel efforts by providing accurate, unsampled data needed for cross-channel analytics and marketing attribution

    4. Work on your social media presence 

    Social networks are among the most popular — and successful — digital marketing channels, with millions (even billions, depending on the platform) of active users. 

    In fact, 89% of marketers report using Facebook as their main platform for social media marketing, while another 80% use Instagram to reach their target audience and promote their business. 

    And according to The State of Social Media in Banking 2023 report, nine out of ten banks (89%) consider social media is important, while another 88% are active on their social media accounts. 

    That is to say, even traditionally conservative industries — like banking and finance — realise the crucial role of social media in promoting their services and engaging with customers on their preferred channels : 

    It’s an excellent way for businesses in the financial sector to gain exposure, drive traffic to their website and acquire new customers. 

    If you’re ready to improve social media visibility as part of your multichannel efforts, Matomo can help you track social media activity across 70 different platforms. 

    5. Shift the focus on customer loyalty and retention 

    Up until this point, the focus has mainly been on building new business relationships. However, one thing to keep in mind is that retaining existing customers is generally cheaper than investing in customer acquisition activities to attract new ones. 

    Of course, customer retention won’t directly impact your CAC. But what it can do is increase customer lifetime value, contributing to your company’s revenue and profits — which, in turn, can “balance out” your acquisition costs in the long run.

    That’s not to say that you should stop trying to bring in new clients ; far from it. 

    However, focusing on increasing customer loyalty — namely, delivering excellent customer service and building lasting business relationships — could motivate satisfied customers to become brand advocates. 

    As this survey of customer satisfaction for leading banks in the UK has shown, when clients are satisfied with a bank’s products and services, they’re more likely to recommend it. 

    Positive word-of-mouth recommendations can be a powerful way to drive customer acquisition. You can leverage that by launching a customer referral program and incentivising loyal customers to refer new ones to your business. 

    6. A/B test different elements to find ones that work 

    We’ve already underlined the importance of understanding your audience ; it’s the foundation for optimising the customer journey and delivering targeted marketing efforts that will attract more customers. 

    Another proven method that can be used to refine your customer acquisition strategy is A/B or split testing

    It involves testing different versions of specific elements of your marketing content — such as language, CTAs and visuals — to determine the most effective combinations that resonate with your target audience. 

    Besides your marketing campaigns, you can also split test different variants of your website or mobile app to see which version gets them to convert. 

    Matomo’s A/B Testing feature can be of huge help here : 

    7. Track other relevant customer acquisition metrics 

    To better assess your company’s profitability, you’ll have to go beyond CAC and factor in other critical metrics — namely, customer lifetime value (CLTV), churn rate and return on investment (ROI). 

    Here are the most important KPIs you should monitor in addition to CAC : 

    • Customer lifetime value (CLTV), which represents the revenue generated by a single customer throughout the duration of their relationship with your company and is another crucial indicator of customer profitability 
    • Churn rate — the rate at which your company loses clients within a given timeframe — can indicate how well you’re retaining customers 
    • Return on investment (ROI) — the revenue generated by new clients compared to the initial costs of acquiring them — can help you identify the most effective customer acquisition channels 

    These metrics work hand in hand. There needs to be a balance between the revenue the customer generates over their lifetime and the costs related to attracting them.

    Ideally, you should be aiming for lower CAC and customer churn and higher CLTV ; that’s usually a solid indicator of financial health and sustainable growth. 

    Lower bank customer acquisition costs with Matomo 

    Acquiring new customers will require a lot of time and resources, regardless of the industry you’re working in — but can be even more challenging in the financial sector, where you have to adapt to the ever-changing customer expectations and demands. 

    The strategies outlined above — combined with a thorough understanding of your customer’s behaviours and preferences — can help you lower the cost of bank customer acquisition.

    On that note, you can learn a lot about your customers through web analytics — and use those insights to support your customer acquisition process and ensure you’re delivering a seamless online banking experience. 

    If you need an alternative to Google Analytics that doesn’t rely on data sampling and ensures compliance with the strictest privacy regulations, all while being easy to use, choose Matomo — the go-to web analytics platform for more than 1 million websites around the globe. 

    CTA : Start your 21-day free trial today to see how Matomo’s all-in-one solution can help you understand and attract new customers — all while respecting their privacy. 

  • Matomo analytics for wordpress

    15 octobre 2019, par Matomo Core Team — Community

    Self-hosting web analytics got a whole lot easier ! Introducing Matomo for WordPress

    Be the first to try it out ! Your feedback is much needed and appreciated

    Get a fully functioning Matomo (which is comparable to Google Analytics) in seconds ! How ? With the new Matomo Analytics for WordPress plugin. 

    Web analytics in WordPress has never been easier to get, or more powerful. Matomo Analytics for WordPress is the one-stop problem solver. It’ll save you time, money and give you the insights to help your website or business succeed. 

    Best of all, we get to further the goal of decentralising the internet. Our hope is for Matomo Analytics for WordPress to spread far and wide. We’re so excited that more and more people can now get their hands on this powerful, free, open-source analytics platform, in a few clicks !

    Download now and check it out !

    What do you get ?

    • No more signing up to third party analytics service (like Google)
    • No more sending away your valuable data to a third party service (like Google)
    • Easy setup – install with a few clicks, no tracking code installation or developer knowledge needed
    • 100% accurate data – no data sampling and no data limits 
    • Full data ownership – all data is stored on your servers and no one else can see your data
    • Privacy protection / GDPR compliance
    • Ecommerce tracking out-of-the-box (Woocommerce, Easy Digital Downloads, and MemberPress) and we’re keen to add many more over time
    • Powerful features – segmenting, comparing reports, different visualisations, real-time reports, visit logs and visitor profiles, Matomo Tag Manager, dashboards, data export, APIs, and many more
    • Compared to other WordPress solutions we don’t charge you extra for basic features that should work out-of-the-box
    • Just like Matomo On-Premise, Matomo Analytics for WordPress is free

    We need your feedback !

    We all know and love the versatility of WordPress – with over 55,000 plugins and all the different ways of hosting it. However, with this great versatility comes the potential for things to be missed, so we’re keen to hear your feedback.

    Thank you ! We really appreciate your help on this ❤️

    How do you get Matomo Analytics for WordPress ?

    You can then upload it in your WordPress by going to “Plugins => Add New”. During the upload, if you get an error like “Are you sure you want to do this ?”, we recommend you upload the extracted zip file on to your server and into your ‘wp-content/plugins’ folder manually using ftp or ssh. Make sure the plugin name is ‘matomo’.

    All you need is at least WordPress 4.8 and PHP 7.0 or later. MySQL 5.1+ is recommended. 

    The source code is available at : https://github.com/matomo-org/wp-matomo/

    In perfect harmony : Matomo and WordPress

    Matomo Analytics for WordPress

    The idea for this started two years ago when we realised the similarities between the Matomo and WordPress project. 

    Not only from a technological point of view – where both are based on PHP and MySQL and can be extended using plugins – but also from a philosophical, license and values point of view. We both believe in privacy, security, data ownership, openness, transparency, having things working out-of-the-box, simplicity etc. 

    WordPress is currently used on approximately 30% of all websites. Many of them use the self-hosted open-source WordPress version. Giving everyone in this market the opportunity to easily get a powerful web analytics platform for free, means a lot to us. We believe WordPress users get a real choice besides the standard solution of Google Analytics, and it furthers our effort and goal of decentralising the internet. 

    We’re hoping more people will be empowered to protect user privacy, have access to a great free and open-source tool, and keep control of data in their own hands.

    We hope you feel the same. Help us spread the word to your friends and get them in on this awesome new project !

    Share on facebook
    Share on twitter
    Share on linkedin

    FAQs

    Isn’t there already a WP-Matomo plugin for WordPress available ?

    Yes, the existing WP-Matomo (WP-Piwik) plugin is an awesome plugin to connect your existing Matomo On-Premise or Matomo Cloud account with WordPress. The difference is that this new plugin installs Matomo Analytics fully in your WordPress. So you get the convenience of having a powerful analytics platform within your WordPress.

    We highly recommend you install this new plugin if you use WordPress and are not running Matomo yet. 

    If you are already using Matomo on our Cloud or On-Premise, we’d still highly recommend you use WP-Matomo (WP-Piwik). So that you get an easier way of inserting the tracking code into your WordPress site and get insights faster.

    I have a high traffic website, will it be an issue ?

    If you have a lot of traffic, we’d advise you to install Matomo On-Premise separately. There’s no specific traffic threshold we can give you on when it’s better to use Matomo On-Premise. It really depends on your server. 

    We reckon if you have more than 500,000 page views a month, you may want to think about using Matomo On-Premise with WP-Matomo instead, but this is just an estimate. In general, if the load on your server is already quite high, then it might be better to install Matomo on a separate server. See also recommended server sizing for running Matomo.

    How do I report a bug or request a new feature in Matomo for WordPress ?

    Please create an issue, on our repository whenever you find a bug or if you have any suggestion or ideas of improvement. We want to build an outstanding analytics experience for WordPress !

    Have another question you’re dying to ask ? The Matomo for WordPress FAQ page might have the answer you need. 

    Matomo Analytics for WordPress newsletter

    Get ahead of the crowd – signup to our exclusive Matomo for WordPress newsletter to get the latest updates on this exciting new project.

    &lt;script type=&quot;text/javascript&quot;&gt;<br />
    (function(global) {<br />
     function serialize(form){if(!form||form.nodeName!==&quot;FORM&quot;){return }var i,j,q=[];for(i=form.elements.length-1;i&gt;=0;i=i-1){if(form.elements[i].name===&quot;&quot;){continue}switch(form.elements[i].nodeName){case&quot;INPUT&quot;:switch(form.elements[i].type){case&quot;text&quot;:case&quot;hidden&quot;:case&quot;password&quot;:case&quot;button&quot;:case&quot;reset&quot;:case&quot;submit&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;checkbox&quot;:case&quot;radio&quot;:if(form.elements[i].checked){q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value))}break;case&quot;file&quot;:break}break;case&quot;TEXTAREA&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;SELECT&quot;:switch(form.elements[i].type){case&quot;select-one&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break;case&quot;select-multiple&quot;:for(j=form.elements[i].options.length-1;j&gt;=0;j=j-1){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case&quot;BUTTON&quot;:switch(form.elements[i].type){case&quot;reset&quot;:case&quot;submit&quot;:case&quot;button&quot;:q.push(form.elements[i].name+&quot;=&quot;+encodeURIComponent(form.elements[i].value));break}break}}return q.join(&quot;&amp;&quot;)};<br />
    <br />
    <br />
     function extend(destination, source) {<br />
       for (var prop in source) {<br />
         destination[prop] = source[prop];<br />
       }<br />
     }<br />
    <br />
     if (!Mimi) var Mimi = {};<br />
     if (!Mimi.Signups) Mimi.Signups = {};<br />
    <br />
     Mimi.Signups.EmbedValidation = function() {<br />
       this.initialize();<br />
    <br />
       var _this = this;<br />
       if (document.addEventListener) {<br />
         this.form.addEventListener('submit', function(e){<br />
           _this.onFormSubmit(e);<br />
         });<br />
       } else {<br />
         this.form.attachEvent('onsubmit', function(e){<br />
           _this.onFormSubmit(e);<br />
         });<br />
       }<br />
     };<br />
    <br />
     extend(Mimi.Signups.EmbedValidation.prototype, {<br />
       initialize: function() {<br />
         this.form         = document.getElementById('ema_signup_form');<br />
         this.submit       = document.getElementById('webform_submit_button');<br />
         this.callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());<br />
         this.validEmail   = /.+@.+\..+/<br />
       },<br />
    <br />
       onFormSubmit: function(e) {<br />
         e.preventDefault();<br />
    <br />
         this.validate();<br />
         if (this.isValid) {<br />
           this.submitForm();<br />
         } else {<br />
           this.revalidateOnChange();<br />
         }<br />
       },<br />
    <br />
       validate: function() {<br />
         this.isValid = true;<br />
         this.emailValidation();<br />
         this.fieldAndListValidation();<br />
         this.updateFormAfterValidation();<br />
       },<br />
    <br />
       emailValidation: function() {<br />
         var email = document.getElementById('signup_email');<br />
    <br />
         if (this.validEmail.test(email.value)) {<br />
           this.removeTextFieldError(email);<br />
         } else {<br />
           this.textFieldError(email);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       fieldAndListValidation: function() {<br />
         var fields = this.form.querySelectorAll('.mimi_field.required');<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           var field = fields[i],<br />
               type  = this.fieldType(field);<br />
           if (type === 'checkboxes' || type === 'radio_buttons' || type === 'age_check') {<br />
             this.checkboxAndRadioValidation(field);<br />
           } else {<br />
             this.textAndDropdownValidation(field, type);<br />
           }<br />
         }<br />
       },<br />
    <br />
       fieldType: function(field) {<br />
         var type = field.querySelectorAll('.field_type');<br />
    <br />
         if (type.length) {<br />
           return type[0].getAttribute('data-field-type');<br />
         } else if (field.className.indexOf('checkgroup') &gt;= 0) {<br />
           return 'checkboxes';<br />
         } else {<br />
           return 'text_field';<br />
         }<br />
       },<br />
    <br />
       checkboxAndRadioValidation: function(field) {<br />
         var inputs   = field.getElementsByTagName('input'),<br />
             selected = false;<br />
    <br />
         for (var i = 0; i &lt; inputs.length; ++i) {<br />
           var input = inputs[i];<br />
           if((input.type === 'checkbox' || input.type === 'radio') &amp;&amp; input.checked) {<br />
             selected = true;<br />
           }<br />
         }<br />
    <br />
         if (selected) {<br />
           field.className = field.className.replace(/ invalid/g, '');<br />
         } else {<br />
           if (field.className.indexOf('invalid') === -1) {<br />
             field.className += ' invalid';<br />
           }<br />
    <br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       textAndDropdownValidation: function(field, type) {<br />
         var inputs = field.getElementsByTagName('input');<br />
    <br />
         for (var i = 0; i &lt; inputs.length; ++i) {<br />
           var input = inputs[i];<br />
           if (input.name.indexOf('signup') &gt;= 0) {<br />
             if (type === 'text_field') {<br />
               this.textValidation(input);<br />
             } else {<br />
               this.dropdownValidation(field, input);<br />
             }<br />
           }<br />
         }<br />
         this.htmlEmbedDropdownValidation(field);<br />
       },<br />
    <br />
       textValidation: function(input) {<br />
         if (input.id === 'signup_email') return;<br />
    <br />
         if (input.value) {<br />
           this.removeTextFieldError(input);<br />
         } else {<br />
           this.textFieldError(input);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       dropdownValidation: function(field, input) {<br />
         if (input.value) {<br />
           field.className = field.className.replace(/ invalid/g, '');<br />
         } else {<br />
           if (field.className.indexOf('invalid') === -1) field.className += ' invalid';<br />
           this.onSelectCallback(input);<br />
           this.isValid = false;<br />
         }<br />
       },<br />
    <br />
       htmlEmbedDropdownValidation: function(field) {<br />
         var dropdowns = field.querySelectorAll('.mimi_html_dropdown');<br />
         var _this = this;<br />
    <br />
         for (var i = 0; i &lt; dropdowns.length; ++i) {<br />
           var dropdown = dropdowns[i];<br />
    <br />
           if (dropdown.value) {<br />
             field.className = field.className.replace(/ invalid/g, '');<br />
           } else {<br />
             if (field.className.indexOf('invalid') === -1) field.className += ' invalid';<br />
             this.isValid = false;<br />
             dropdown.onchange = (function(){ _this.validate(); });<br />
           }<br />
         }<br />
       },<br />
    <br />
       textFieldError: function(input) {<br />
         input.className   = 'required invalid';<br />
         input.placeholder = input.getAttribute('data-required-field');<br />
       },<br />
    <br />
       removeTextFieldError: function(input) {<br />
         input.className   = 'required';<br />
         input.placeholder = '';<br />
       },<br />
    <br />
       onSelectCallback: function(input) {<br />
         if (typeof Widget === 'undefined' || !Widget.BasicDropdown) return;<br />
    <br />
         var dropdownEl = input.parentNode,<br />
             instances  = Widget.BasicDropdown.instances,<br />
             _this = this;<br />
    <br />
         for (var i = 0; i &lt; instances.length; ++i) {<br />
           var instance = instances[i];<br />
           if (instance.wrapperEl === dropdownEl) {<br />
             instance.onSelect = function(){ _this.validate() };<br />
           }<br />
         }<br />
       },<br />
    <br />
       updateFormAfterValidation: function() {<br />
         this.form.className   = this.setFormClassName();<br />
         this.submit.value     = this.submitButtonText();<br />
         this.submit.disabled  = !this.isValid;<br />
         this.submit.className = this.isValid ? 'submit' : 'disabled';<br />
       },<br />
    <br />
       setFormClassName: function() {<br />
         var name = this.form.className;<br />
    <br />
         if (this.isValid) {<br />
           return name.replace(/\s?mimi_invalid/, '');<br />
         } else {<br />
           if (name.indexOf('mimi_invalid') === -1) {<br />
             return name += ' mimi_invalid';<br />
           } else {<br />
             return name;<br />
           }<br />
         }<br />
       },<br />
    <br />
       submitButtonText: function() {<br />
         var invalidFields = document.querySelectorAll('.invalid'),<br />
             text;<br />
    <br />
         if (this.isValid || !invalidFields) {<br />
           text = this.submit.getAttribute('data-default-text');<br />
         } else {<br />
           if (invalidFields.length || invalidFields[0].className.indexOf('checkgroup') === -1) {<br />
             text = this.submit.getAttribute('data-invalid-text');<br />
           } else {<br />
             text = this.submit.getAttribute('data-choose-list');<br />
           }<br />
         }<br />
         return text;<br />
       },<br />
    <br />
       submitForm: function() {<br />
         this.formSubmitting();<br />
    <br />
         var _this = this;<br />
         window[this.callbackName] = function(response) {<br />
           delete window[this.callbackName];<br />
           document.body.removeChild(script);<br />
           _this.onSubmitCallback(response);<br />
         };<br />
    <br />
         var script = document.createElement('script');<br />
         script.src = this.formUrl('json');<br />
         document.body.appendChild(script);<br />
       },<br />
    <br />
       formUrl: function(format) {<br />
         var action  = this.form.action;<br />
         if (format === 'json') action += '.json';<br />
         return action + '?callback=' + this.callbackName + '&amp;' + serialize(this.form);<br />
       },<br />
    <br />
       formSubmitting: function() {<br />
         this.form.className  += ' mimi_submitting';<br />
         this.submit.value     = this.submit.getAttribute('data-submitting-text');<br />
         this.submit.disabled  = true;<br />
         this.submit.className = 'disabled';<br />
       },<br />
    <br />
       onSubmitCallback: function(response) {<br />
         if (response.success) {<br />
           this.onSubmitSuccess(response.result);<br />
         } else {<br />
           top.location.href = this.formUrl('html');<br />
         }<br />
       },<br />
    <br />
       onSubmitSuccess: function(result) {<br />
         if (result.has_redirect) {<br />
           top.location.href = result.redirect;<br />
         } else if(result.single_opt_in || !result.confirmation_html) {<br />
           this.disableForm();<br />
           this.updateSubmitButtonText(this.submit.getAttribute('data-thanks'));<br />
         } else {<br />
           this.showConfirmationText(result.confirmation_html);<br />
         }<br />
       },<br />
    <br />
       showConfirmationText: function(html) {<br />
         var fields = this.form.querySelectorAll('.mimi_field');<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           fields[i].style['display'] = 'none';<br />
         }<br />
    <br />
         (this.form.querySelectorAll('fieldset')[0] || this.form).innerHTML = html;<br />
       },<br />
    <br />
       disableForm: function() {<br />
         var elements = this.form.elements;<br />
         for (var i = 0; i &lt; elements.length; ++i) {<br />
           elements[i].disabled = true;<br />
         }<br />
       },<br />
    <br />
       updateSubmitButtonText: function(text) {<br />
         this.submit.value = text;<br />
       },<br />
    <br />
       revalidateOnChange: function() {<br />
         var fields = this.form.querySelectorAll(&quot;.mimi_field.required&quot;),<br />
             _this = this;<br />
    <br />
         var onTextFieldChange = function() {<br />
           if (this.getAttribute('name') === 'signup[email]') {<br />
             if (_this.validEmail.test(this.value)) _this.validate();<br />
           } else {<br />
             if (this.value.length === 1) _this.validate();<br />
           }<br />
         }<br />
    <br />
         for (var i = 0; i &lt; fields.length; ++i) {<br />
           var inputs = fields[i].getElementsByTagName('input');<br />
           for (var j = 0; j &lt; inputs.length; ++j) {<br />
             if (this.fieldType(fields[i]) === 'text_field') {<br />
               inputs[j].onkeyup = onTextFieldChange;<br />
               inputs[j].onchange = onTextFieldChange; <br />
             } else {<br />
               inputs[j].onchange = function(){ _this.validate() };<br />
             }<br />
           }<br />
         }<br />
       }<br />
     });<br />
    <br />
     if (document.addEventListener) {<br />
       document.addEventListener(&quot;DOMContentLoaded&quot;, function() {<br />
         new Mimi.Signups.EmbedValidation();<br />
       });<br />
     }<br />
     else {<br />
       window.attachEvent('onload', function() {<br />
         new Mimi.Signups.EmbedValidation();<br />
       });<br />
     }<br />
    })(this);<br />
    &lt;/script&gt;