diff --git a/.ci/deploy.sh b/.ci/deploy.sh
index c6fc4d21334a23bb786a2c61f21c814aabe7c7c8..bef10cf55f78e95435c46c531cda80561a9f8af3 100644
--- a/.ci/deploy.sh
+++ b/.ci/deploy.sh
@@ -47,6 +47,27 @@ do
                 ln -s ../../theme/package.json package.json
                 ln -s ../../theme theme
 
+                # add matomo
+                if [[ -v matomoID ]]; then
+                    matomoTagOrig='<!-- Matomo -->'
+                    matomoTag="<script type='text/javascript'>"
+                    matomoTag="${matomoTag} var _paq = window._paq || [];"
+                    matomoTag="${matomoTag} /* tracker methods like 'setCustomDimension' should be called before 'trackPageView' */"
+                    matomoTag="${matomoTag} _paq.push(['trackPageView']);"
+                    matomoTag="${matomoTag} _paq.push(['enableLinkTracking']);"
+                    matomoTag="${matomoTag} (function() {"
+                    matomoTag="${matomoTag} var u='https://analytics.lcsb.uni.lu/hub/';"
+                    matomoTag="${matomoTag} _paq.push(['setTrackerUrl', u+'matomo.php']);"
+                    matomoTag="${matomoTag} _paq.push(['setSiteId', '${matomoID}']);"
+                    matomoTag="${matomoTag} var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];"
+                    matomoTag="${matomoTag} g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);"
+                    matomoTag="${matomoTag} })();"
+                    matomoTag="${matomoTag} </script>"
+
+                    # replace the tag
+                    sed -i '' 's#'"$matomoTagOrig"'#'"$matomoTag"'#g' theme/templates/_index.html
+                fi
+
                 # install npm
                 yarn global add grunt-cli generator-reveal
                 yarn install