Recherche avancée

Médias (1)

Mot : - Tags -/stallman

Autres articles (53)

  • MediaSPIP en mode privé (Intranet)

    17 septembre 2013, par

    À partir de la version 0.3, un canal de MediaSPIP peut devenir privé, bloqué à toute personne non identifiée grâce au plugin "Intranet/extranet".
    Le plugin Intranet/extranet, lorsqu’il est activé, permet de bloquer l’accès au canal à tout visiteur non identifié, l’empêchant d’accéder au contenu en le redirigeant systématiquement vers le formulaire d’identification.
    Ce système peut être particulièrement utile pour certaines utilisations comme : Atelier de travail avec des enfants dont le contenu ne doit pas (...)

  • 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

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

Sur d’autres sites (4161)

  • Reading in pydub AudioSegment from url. BytesIO returning "OSError [Errno 2] No such file or directory" on heroku only ; fine on localhost

    24 octobre 2014, par Mark

    EDIT 1 for anyone with the same error : installing ffmpeg did indeed solve that BytesIO error

    EDIT 1 for anyone still willing to help : my problem is now that when I AudioSegment.export("filename.mp3", format="mp3"), the file is made, but has size 0 bytes — details below (as "EDIT 1")


    EDIT 2 : All problems now solved.

    • Files can be read in as AudioSegment using BytesIO
    • I found buildpacks to ensure ffmpeg was installed correctly on my app, with lame support for exporting proper mp3 files

    Answer below


    Original question

    I have pydub working nicely locally to crop a particular mp3 file based on parameters in the url.
    (?start_time=3.8&end_time=5.1)

    When I run foreman start it all looks good on localhost. The html renders nicely.
    The key lines from the views.py include reading in a file from a url using

    url = "https://s3.amazonaws.com/shareducate02/The_giving_tree__by_Alex_Blumberg__sponsored_by_mailchimp-short.mp3"
    mp3 = urllib.urlopen(url).read() # inspired by http://nbviewer.ipython.org/github/ipython-books/cookbook-code/blob/master/notebooks/chapter11_image/06_speech.ipynb
    original=AudioSegment.from_mp3(BytesIO(mp3))  # AudioSegment.from_mp3 is a pydub command, see http://pydub.com
    section = original[start_time_ms:end_time_ms]

    That all works great... until I push to heroku (django app) and run it online.
    then when I load the same page now on the herokuapp.com, I get this error

    OSError at /path/to/page
    [Errno 2] No such file or directory
    Request Method: GET
    Request URL:    http://my.website.com/path/to/page?start_time=3.8&end_time=5
    Django Version: 1.6.5
    Exception Type: OSError
    Exception Value:    
    [Errno 2] No such file or directory
    Exception Location: /app/.heroku/python/lib/python2.7/subprocess.py in _execute_child, line 1327
    Python Executable:  /app/.heroku/python/bin/python
    Python Version: 2.7.8
    Python Path:    
    ['/app',
    '/app/.heroku/python/bin',
    '/app/.heroku/python/lib/python2.7/site-packages/setuptools-5.4.1-py2.7.egg',
    '/app/.heroku/python/lib/python2.7/site-packages/distribute-0.6.36-py2.7.egg',
    '/app/.heroku/python/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg',
    '/app',
    '/app/.heroku/python/lib/python27.zip',
    '/app/.heroku/python/lib/python2.7',
    '/app/.heroku/python/lib/python2.7/plat-linux2',
    '/app/.heroku/python/lib/python2.7/lib-tk',
    '/app/.heroku/python/lib/python2.7/lib-old',
    '/app/.heroku/python/lib/python2.7/lib-dynload',
    '/app/.heroku/python/lib/python2.7/site-packages',
    '/app/.heroku/python/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']


    Traceback:
    File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
     112.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "/app/evernote/views.py" in finalize
     105.       original=AudioSegment.from_mp3(BytesIO(mp3))
    File "/app/.heroku/python/lib/python2.7/site-packages/pydub/audio_segment.py" in from_mp3
     318.         return cls.from_file(file, 'mp3')
    File "/app/.heroku/python/lib/python2.7/site-packages/pydub/audio_segment.py" in from_file
     302.         retcode = subprocess.call(convertion_command, stderr=open(os.devnull))
    File "/app/.heroku/python/lib/python2.7/subprocess.py" in call
     522.     return Popen(*popenargs, **kwargs).wait()
    File "/app/.heroku/python/lib/python2.7/subprocess.py" in __init__
     710.                                 errread, errwrite)
    File "/app/.heroku/python/lib/python2.7/subprocess.py" in _execute_child
     1327.                 raise child_exception

    I have commented out some of the original to convince myself that sure enough the single line original=AudioSegment.from_mp3(BytesIO(mp3)) is where the problem kicks in... but this is not a problem locally

    The full function in views.py starts like this :

    from django.shortcuts import render, get_object_or_404
    from django.http import HttpResponseRedirect #, Http404, HttpResponse
    from django.core.urlresolvers import reverse
    from django.views import generic
    import pydub
    # Maybe only need:
    from pydub import AudioSegment # == see below
    from time import gmtime, strftime

    import boto
    from boto.s3.connection import S3Connection
    from boto.s3.key import Key

    # http://nbviewer.ipython.org/github/ipython-books/cookbook-code/blob/master/notebooks/chapter11_image/06_speech.ipynb
    import urllib
    from io import BytesIO
    # import numpy as np
    # import scipy.signal as sg
    # import pydub # mentioned above already
    # import matplotlib.pyplot as plt
    # from IPython.display import Audio, display
    # import matplotlib as mpl
    # %matplotlib inline

    import os
    # from settings import AWS_ACCESS_KEY, AWS_SECRET_KEY, AWS_BUCKET_NAME
    AWS_ACCESS_KEY = os.environ.get('AWS_ACCESS_KEY') # there must be a better way?
    AWS_SECRET_KEY = os.environ.get('AWS_SECRET_KEY')
    AWS_BUCKET_NAME = os.environ.get('S3_BUCKET_NAME')

    # http://stackoverflow.com/questions/415511/how-to-get-current-time-in-python

    boto_conn = S3Connection(AWS_ACCESS_KEY, AWS_SECRET_KEY)
    bucket = boto_conn.get_bucket(AWS_BUCKET_NAME)
    s3_url_format = 'https://s3.amazonaws.com/shareducate02/{end_path}'

    and specifically the view in views.py that’s called when I visit the page :

    def finalize(request):

       start_time = request.GET.get('start_time')

       end_time = request.GET.get('end_time')

       original_file = "https://s3.amazonaws.com/shareducate02/The_giving_tree__by_Alex_Blumberg__sponsored_by_mailchimp-short.mp3"


       if start_time:

         # original=AudioSegment.from_mp3(original_file)  #...that didn't work
         # but this works below:

         # next three uncommented lines from http://nbviewer.ipython.org/github/ipython-books/cookbook-code/blob/master/notebooks/chapter11_image/06_speech.ipynb
         # python 2.x
         url = original_file
         # req = urllib.Request(url, headers={'User-Agent': ''}) # Note: I commented out this because I got error that "Request" did not exist
         mp3 = urllib.urlopen(url).read()
         # That's for my 2.7

         # If I ever upgrade to python 3.x, would need to change it to:
         # req = urllib.request.Request(url, headers={'User-Agent': ''})
         # mp3 = urllib.request.urlopen(req).read()
         # as per instructions on http://nbviewer.ipython.org/github/ipython-books/cookbook-code/blob/master/notebooks/chapter11_image/06_speech.ipynb

         original=AudioSegment.from_mp3(BytesIO(mp3))
         # original=AudioSegment.from_mp3("static/givingtree.mp3") # alternative that works locally (on laptop) but no use for heroku

         start_time_ms = int(float(start_time) * 1000)
         if end_time:
           end_time_ms = int(float(end_time) * 1000)
         else:
           end_time_ms = int(float(original.duration_seconds) * 1000)
         duration_ms = end_time_ms - start_time_ms
         # duration = end_time - start_time
         duration = duration_ms/1000

      #   section = original[start_time_ms:end_time_ms]
      #   section_with_fading = section.fade_in(100).fade_out(100)

         clip = "demo-"
         number = strftime("%Y-%m-%d_%H-%M-%S", gmtime())
         clip += number
         clip += ".mp3"

         # DON'T BOTHER writing locally:
         # clip_with_path = "evernote/static/"+clip
         # section_with_fading.export(clip_with_path, format = "mp3")

      #   tempclip = section_with_fading.export(format = "mp3")

         # commented out while de-bugging, but was working earlier if run on localhost
         # c = boto.connect_s3()
         # b = c.get_bucket(S3_BUCKET_NAME)  # as defined above
         # k = Key(b)
         # k.key=clip
         # # k.set_contents_from_filename(clip_with_path)
         # k.set_contents_from_file(tempclip)
         # k.set_acl('public-read')
         clip_made = True
       else:
         duration = 0.0
         clip_made = False
         clip = ""
       context = {'original_file':original_file, 'new_file':clip, 'start_time': start_time, 'end_time':end_time, 'duration':duration, 'clip_made':clip_made}
       return render(request, 'finalize.html' , context)

    Any suggestions ?

    Potentially related :
    I have ffmpeg installed locally

    But have been unable to install it onto heroku, due to not understanding buildpacks. I tried just a moment ago (http://stackoverflow.com/questions/14407388/how-to-install-ffmpeg-for-a-django-app-on-heroku and https://github.com/shunjikonishi/heroku-buildpack-ffmpeg) but so far ffmpeg is not working on heroku (ffmpeg is not recognised when I do "heroku run ffmpeg —version")
    ...do you think this is the reason ?

    An answer like any of these would be much appreciated as I’m going round in circles here :

    1. "I think ffmpeg is indeed your problem. Try harder to sort that out, to get it installed on heroku"
    2. "Actually, I think this is why BytesIO is not working for you : ..."
    3. "Your approach is terrible anyway... if you want to read in an audio file to process using pydub, you should just do this instead : ..." (since I’m just hacking my way through pydub for my first time... my approach may be poor)

    EDIT 1

    ffmpeg is now installed (e.g., I can output wav files)

    However, I can’t create mp3 files, still... or more correctly, I can, but the filesize is zero

    (venv-app)moriartymacbookair13:getstartapp macuser$ heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
    Setting config vars and restarting awe01... done, v93
    BUILDPACK_URL: https://github.com/ddollar/heroku-buildpack-multi.git
    (venv-app)moriartymacbookair13:getstartapp macuser$ vim .buildpacks
    (venv-app)moriartymacbookair13:getstartapp macuser$ cat .buildpacks
    https://github.com/shunjikonishi/heroku-buildpack-ffmpeg.git
    https://github.com/heroku/heroku-buildpack-python.git
    (venv-app)moriartymacbookair13:getstartapp macuser$ git add --all
    (venv-app)moriartymacbookair13:getstartapp macuser$ git commit -m "need multi, not just ffmpeg, so adding back in multi + shun + heroku, with trailing .git in .buildpacks file"
    [master cd99fef] need multi, not just ffmpeg, so adding back in multi + shun + heroku, with trailing .git in .buildpacks file
    1 file changed, 2 insertions(+), 2 deletions(-)
    (venv-app)moriartymacbookair13:getstartapp macuser$ git push heroku master
    Fetching repository, done.
    Counting objects: 5, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 372 bytes | 0 bytes/s, done.
    Total 3 (delta 2), reused 0 (delta 0)

    -----> Fetching custom git buildpack... done
    -----> Multipack app detected
    =====> Downloading Buildpack: https://github.com/shunjikonishi/heroku-buildpack-ffmpeg.git
    =====> Detected Framework: ffmpeg
    -----> Install ffmpeg
          DOWNLOAD_URL =  http://flect.github.io/heroku-binaries/libs/ffmpeg.tar.gz
          exporting PATH and LIBRARY_PATH
    =====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-python.git
    =====> Detected Framework: Python
    -----> Installing dependencies with pip
          Cleaning up...

    -----> Preparing static assets
          Collectstatic configuration error. To debug, run:
          $ heroku run python ./example/manage.py collectstatic --noinput

    Using release configuration from last framework (Python).
    -----> Discovering process types
          Procfile declares types -> web

    -----> Compressing... done, 198.1MB
    -----> Launching... done, v94
          http://[redacted].herokuapp.com/ deployed to Heroku

    To git@heroku.com:awe01.git
      78d6b68..cd99fef  master -> master
    (venv-app)moriartymacbookair13:getstartapp macuser$ heroku run ffmpeg
    Running `ffmpeg` attached to terminal... up, run.6408
    ffmpeg version git-2013-06-02-5711e4f Copyright (c) 2000-2013 the FFmpeg developers
     built on Jun  2 2013 07:38:40 with gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
     configuration: --enable-shared --disable-asm --prefix=/app/vendor/ffmpeg
     libavutil      52. 34.100 / 52. 34.100
     libavcodec     55. 13.100 / 55. 13.100
     libavformat    55.  8.102 / 55.  8.102
     libavdevice    55.  2.100 / 55.  2.100
     libavfilter     3. 74.101 /  3. 74.101
     libswscale      2.  3.100 /  2.  3.100
     libswresample   0. 17.102 /  0. 17.102
    Hyper fast Audio and Video encoder
    usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

    Use -h to get full help or, even better, run 'man ffmpeg'
    (venv-app)moriartymacbookair13:getstartapp macuser$ heroku run bash
    Running `bash` attached to terminal... up, run.9660
    ~ $ python
    Python 2.7.8 (default, Jul  9 2014, 20:47:08)
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pydub
    >>> from pydub import AudioSegment
    >>> exit()
    ~ $ which ffmpeg
    /app/vendor/ffmpeg/bin/ffmpeg
    ~ $ python

    Python 2.7.8 (default, Jul  9 2014, 20:47:08)
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pydub
    >>> from pydub import AudioSegment
    >>> AudioSegment.silent(5000).export("/tmp/asdf.mp3", "mp3")
    <open file="file"></open>tmp/asdf.mp3', mode 'wb+' at 0x7f9a37d44780>
    >>> exit ()
    ~ $ cd /tmp/
    /tmp $ ls
    asdf.mp3
    /tmp $ open asdf.mp3
    bash: open: command not found
    /tmp $ ls -lah
    total 8.0K
    drwx------  2 u36483 36483 4.0K 2014-10-22 04:14 .
    drwxr-xr-x 14 root   root  4.0K 2014-09-26 07:08 ..
    -rw-------  1 u36483 36483    0 2014-10-22 04:14 asdf.mp3

    Note the file size of 0 above for the mp3 file... when I do the same thing on my macbook, the file size is never zero

    Back to the heroku shell :

    /tmp $ python
    Python 2.7.8 (default, Jul  9 2014, 20:47:08)
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pydub
    >>> from pydub import AudioSegment
    >>> pydub.AudioSegment.ffmpeg = "/app/vendor/ffmpeg/bin/ffmpeg"
    >>> AudioSegment.silence(1200).export("/tmp/herokuSilence.mp3", format="mp3")
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    AttributeError: type object 'AudioSegment' has no attribute 'silence'
    >>> AudioSegment.silent(1200).export("/tmp/herokuSilence.mp3", format="mp3")
    <open file="file"></open>tmp/herokuSilence.mp3', mode 'wb+' at 0x7fcc2017c780>
    >>> exit()
    /tmp $ ls
    asdf.mp3  herokuSilence.mp3
    /tmp $ ls -lah
    total 8.0K
    drwx------  2 u36483 36483 4.0K 2014-10-22 04:29 .
    drwxr-xr-x 14 root   root  4.0K 2014-09-26 07:08 ..
    -rw-------  1 u36483 36483    0 2014-10-22 04:14 asdf.mp3
    -rw-------  1 u36483 36483    0 2014-10-22 04:29 herokuSilence.mp3
    </module></stdin>

    I realised the first time that I had forgotten the pydub.AudioSegment.ffmpeg = "/app/vendor/ffmpeg/bin/ffmpeg" command, but as you can see above, the file is still zero size

    Out of desperation, I even tried adding the ".heroku" into the path to be as verbatim as your example, but that didn’t fix it :

    /tmp $ python
    Python 2.7.8 (default, Jul  9 2014, 20:47:08)
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pydub
    >>> from pydub import AudioSegment
    >>> pydub.AudioSegment.ffmpeg = "/app/.heroku/vendor/ffmpeg/bin/ffmpeg"
    >>> AudioSegment.silent(1200).export("/tmp/herokuSilence03.mp3", format="mp3")
    <open file="file"></open>tmp/herokuSilence03.mp3', mode 'wb+' at 0x7fc92aca7780>
    >>> exit()
    /tmp $ ls -lah
    total 8.0K
    drwx------  2 u36483 36483 4.0K 2014-10-22 04:31 .
    drwxr-xr-x 14 root   root  4.0K 2014-09-26 07:08 ..
    -rw-------  1 u36483 36483    0 2014-10-22 04:14 asdf.mp3
    -rw-------  1 u36483 36483    0 2014-10-22 04:31 herokuSilence03.mp3
    -rw-------  1 u36483 36483    0 2014-10-22 04:29 herokuSilence.mp3

    Finally, I tried exporting a .wav file to check pydub was at least working correctly

    /tmp $ python
    Python 2.7.8 (default, Jul  9 2014, 20:47:08)
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pydub
    >>> from pydub import AudioSegment
    >>> pydub.AudioSegment.ffmpeg = "/app/vendor/ffmpeg/bin/ffmpeg"
    >>> AudioSegment.silent(1300).export("/tmp/heroku_wav_silence01.wav", format="wav")
    <open file="file"></open>tmp/heroku_wav_silence01.wav', mode 'wb+' at 0x7fa33cbf3780>
    >>> exit()
    /tmp $ ls
    asdf.mp3  herokuSilence03.mp3  herokuSilence.mp3  heroku_wav_silence01.wav
    /tmp $ ls -lah
    total 40K
    drwx------  2 u36483 36483 4.0K 2014-10-22 04:42 .
    drwxr-xr-x 14 root   root  4.0K 2014-09-26 07:08 ..
    -rw-------  1 u36483 36483    0 2014-10-22 04:14 asdf.mp3
    -rw-------  1 u36483 36483    0 2014-10-22 04:31 herokuSilence03.mp3
    -rw-------  1 u36483 36483    0 2014-10-22 04:29 herokuSilence.mp3
    -rw-------  1 u36483 36483  29K 2014-10-22 04:42 heroku_wav_silence01.wav
    /tmp $

    At least that filesize for .wav is non-zero, so pydub is working

    My current theory is that either I’m still not using ffmpeg correctly, or it’s insufficient... maybe I need an mp3 additional install on top of basic ffmpeg.

    Several sites mention "libavcodec-extra-53" but I’m not sure how to install that on heroku, or to check if I have it ? https://github.com/jiaaro/pydub/issues/36
    Similarly tutorials on libmp3lame seem to be geared towards laptop installation rather than installation on heroku, so I’m at a loss http://superuser.com/questions/196857/how-to-install-libmp3lame-for-ffmpeg

    In case relevant, I also have youtube-dl in my requirements.txt... this also works locally on my macbook, but fails when I run it in the heroku shell :

    ~/ytdl $ youtube-dl --restrict-filenames -x --audio-format mp3 n2anDgdUHic
    [youtube] Setting language
    [youtube] Confirming age
    [youtube] n2anDgdUHic: Downloading webpage
    [youtube] n2anDgdUHic: Downloading video info webpage
    [youtube] n2anDgdUHic: Extracting video information
    [download] Destination: Boyce_Avenue_feat._Megan_Nicole_-_Skyscraper_Patrick_Ebert_Edit-n2anDgdUHic.m4a
    [download] 100% of 5.92MiB in 00:00
    [ffmpeg] Destination: Boyce_Avenue_feat._Megan_Nicole_-_Skyscraper_Patrick_Ebert_Edit-n2anDgdUHic.mp3
    ERROR: audio conversion failed: Unknown encoder 'libmp3lame'
    ~/ytdl $

    The informative link is that it too specificies an mp3 failure, so perhaps they two issues are related.


    EDIT 2

    See answer, all problems solved

  • Measuring success for your SEO content

    20 mars 2020, par Jake Thornton — Uncategorized

    With over a billion searches every day in search engines, it’s hard to underestimate the importance of having your business present on page one (ideally in positions 1 – 3) ranking for the keywords that impact your sales and conversions.

    "In 2019, Google received nearly 2.3 trillion searches and on page one alone, the first five organic results accounted for 67.60% of all the clicks."

    So how is your business performing when it comes to ranking in the crucial top three spots of search for your most important keywords ?

    Accurately measuring the success of your content

    Once you’ve done your keyword research, created compelling content, optimised it to be search-friendly, and hit ‘publish’, you then need to accurately measure the success of your efforts.

    4 tips for measuring the success of your SEO content

    1. Create a custom segment for "Visitors from Search Engines only"

    By creating this custom segment, you’ll be able to analyse the behavioural patterns of the visitors who found your website through a search engine. 

    This way you can use many of Matomo’s powerful features (Visitors, Behaviour, Acquisition, Ecommerce, Goals etc.) focused entirely on search engine visitors only.

    Once you’ve created this segment, you can begin to see key metrics like which entry pages are responsible for referring visitors to your website. For example : Visit Behaviour – Entry Pages, this is a great way to analyse your most effective SEO pages.You may be surprised at what pages currently bring in the most traffic.

    As well as discovering which content resonates with your search audience, you will also be able to create more content focused on your targeted audience. Do this by learning which locations your search visitors are from, which device they use, what time of the day they visited your website and much more.

    >> Learn more about creating custom segments

    2. Website visits, time on site, pages per session, and bounce rate.

    “The top four ranking factors are website visits, time on site, pages per session, and bounce rate.”

    These four metrics set the benchmark for your SEO success.

    First, you need to get as many of the ‘right’ users to see your content. If you feel you’ve exhausted channels such as social media, email and possibly paid posts ; think about who your ideal audience is. Where are they likely to hang out online ? Are there community groups or forum sites that are interested in what you’re writing about ? 

    Whatever the case, putting yourself out there and getting more traffic to your website will help show search engines that people are interested in your website. As a result, they’ll likely rank you higher for that.

    When we say getting more of the ‘right’ users, we mean users who are generally interested in the topic/subject you’re writing about and interested in the work you do. 

    This is important for the next three metrics – increasing users time on your website, increasing the amount of pages your users explore on your website, and reducing the overall bounce rate for users who leave your website in a matter of seconds.

    To evaluate these metrics, go to Behaviour Pages in your Matomo and see how these metrics vary on previous posts or pages you’ve created. Which pages are already showing you the best results ? Why do they get the results ? Can you focus on creating more content like this ?

    Understanding what content is resonating with your users through these metrics is easy and is the starting point for measuring the success of your SEO content strategy.

    >> Learn more about the Behaviour feature

    3. Row Evolution

    The Row Evolution feature embedded within the Search Engine Keywords Performance plugin lets you see how your ranking positions have changed over time for your important keywords. It also lets you see how the incoming traffic, related to your keywords, has changed over time.

    This is valuable when measuring the changes you’ve made to your landing pages to see if it has a positive or negative effect on your ranking efforts. 

    This also lets you see how search engine algorithm changes affect your search rankings over time, and to see if the effects of these algorithm updates are temporary or long lasting.

    Row evolution allows you to report on keyword performance with ease. If you only check your insights once a week or once a fortnight, you’ll see how ranking positions for your important keywords have changed daily (or even weekly, monthly or yearly however you prefer.)

    >> Learn more about Row Evolution

    4. What results are you getting from the lesser known search engines ?

    "In 2019 (to date), Google accounted for just over 75% of all global desktop search traffic, followed by Bing at 9.97%, Baidu at 9.34%, and Yahoo at 2.77%."

    For most of us, we want to be ranking in the top three spots in Google Search because that’s where the majority of search users are. However, don’t shy away from opportunities you could be missing with lesser known search engines.

    If you sell a product aimed at 55-65 year olds who use a PC computer, chances are they are using Bing. If you have customers in China the majority will be using Baidu, or in our case at Matomo, many of our loyal users use a privacy-friendly search engine like DuckDuckGo or Qwant.

    Some of your ideal customers might be finding you through these alternative search engines, so be sure to measure the impact that these referrals may have on your conversions.

    Strategically including important keywords that impact your business

    While search is an important acquisition channel for most businesses, it’s also one of the most competitive.

    We recommend analysing your keyword and content performance regularly and alter content that isn’t performing as well as you’d like. You need to continually learn from the content that is successful, and focus on creating more content like this. 

    The final thing to remember with search keyword performance is to be patient. If you have had little success in the past with attracting customers through search, it can take time to build this reputation with search engines.

  • Switch to Matomo for WordPress from Google Analytics

    10 mars 2020, par Joselyn Khor — Plugins, Privacy

    While Google Analytics may seem like a great plugin option on the WordPress directory, we’d like to present a new ethical alternative called Matomo for WordPress, which gives you 100% data ownership and privacy protection.

    Firstly what does Google Analytics offer in WordPress ?

    When you think of getting insights about visitors on your WordPress (WP) sites, the first thing that comes to mind might be Google Analytics. Why not right ? Especially when there are good free Google Analytics plugins, like Monster Insights and Site Kit. 

    These give you access to a great analytics platform, but the downside with Google Analytics is the lack of transparency around privacy and data ownership.

    Google Analytics alternative

    Matomo Analytics for WordPress is an ethical alternative to Google Analytics for WordPress

    If you’re more interested in a privacy-respecting, GDPR compliant alternative, there’s now a new option on the WP plugins directory : Matomo Analytics – Ethical Stats. Powerful Insights. 

    It’s free and can be considered the #1 ethical alternative to Google Analytics in terms of features and capabilities. Why is it important to choose a web analytics platform that respects privacy ?

    Matomo Analytics for WordPress

    Risk facing fines for non-GDPR compliance and privacy/data breaches

    In Europe there’s an overarching privacy law called GDPR which provides better privacy protection for EU citizens on the web. 

    Websites need to be GDPR compliant and follow rules governing how personal data is used or risk facing fines up to 4% of their yearly revenue for data/privacy breaches or non-compliance. Even if your website is based outside of Europe. If you have visitors from Europe, you can still be liable.

    Matomo Analytics GDPR Google Analytics

    In the US, there isn’t one main privacy law, there hundreds on both the federal and state levels to protect the personal data (or personally identifiable information) of US residents – like the California Consumer Privacy Act (CCPA). There are also industry-specific statutes related to data privacy like HIPAA.

    To protect your website from coming under fire for privacy breaches, best practise is to find platforms that are privacy and GDPR compliant by design. 

    When you own your own data – as with the case of Matomo – you have control over where data is stored, what you’re doing with it, and can better protect the privacy of your visitors.

    At this point you may be asking, “what’s the point of an analytics platform if you have to follow all these rules ?”

    The importance of analytics for your WordPress site

    • Figuring out how your audience behaves to increase conversions
    • Setting, tracking and measuring conversion goals
    • Being able to find insights to improve and optimize your site 
    • Making smarter, data-driven decisions so your company can thrive, rather than risk being left behind

    Analytics is used to answer questions like :

    • Where are your website visitors coming from (location) ?
    • How many people visit your website ?
    • Which are the most popular pages on your site ?
    • What sources of traffic are coming to your site (social, marketing campaigns, search) ?
    • Is your marketing campaign performing better this month compared to last ?

    Matomo can answer all of the above questions. BONUS : On top of that, with Matomo you get the peace of mind knowing you’re the only one who has access to those answers.

    Web analytics for WordPress

    Matomo Analytics vs Google Analytics on WordPress

    The top 5 most useful features in Matomo Analytics that’s comparable to GA

    1. Campaign measurement – traffic. Matomo also has a URL builder that lets you track which campaigns are working effectively
    2. Tracking goals. Matomo empowers you to set goals you can track. Being able to see this means you can accurately measure your return on investment (ROI) 
    3. Audience reports to learn about visitors. Matomo’s powerful visitors feature lets you learn who is visiting your site, what their journey is and the steps they take to conversion.
    4. In depth view of behaviour with Funnels in Matomo. This tracks the journey of your visitors from the moment they enter your site, to when they leave. Giving you insight into where and why you lose your visitors.
    5. Custom reports. Where you create your unique reports to fit your business goals.

    Other benefits of using Matomo :

    • No data sampling which means you get 100% accurate reporting
    • 100% data ownership
    • Free Tag Manager
    • Search engine keyword rankings
    • Unlimited websites
    • Unlimited team members
    • GDPR manager
    • API access
    • Hosted on your own servers so you have full control over where your data is stored

    Learn more about the differences in this comprehensive table.

    Benefits of web analytics for WordPress

    Matomo Analytics for WordPress is free !

    Matomo Analytics is the best free Google Analytics alternative on the WordPress Directory. In addition to having comparable features where you can do pretty much do everything you wanted to do in GA. Matomo Analytics for WordPress makes for an ethical choice because you can respect your visitor’s privacy, can become GDPR compliant, and maintain control over your own data.

    Google Analytics leads the market for good reasons. It’s a great free tool for those who want analytics, but there’s no clarity when it comes to grey areas like privacy and data ownership. If these are major concerns for you, Matomo offers complete peace of mind that you’re doing the best you can to stay ethical while growing your business and website.

    It’s just as easy to install in a few click !