Matomo: Performance pro Ausstellung
Museen denken meist pro Ausstellung. Und auch die Webanalyse kann sich dahingehend anpassen. Interessant ist daher selten, wie viele Seitenaufrufe in den letzten 7 Tagen stattfanden, sondern konkret, wie viele Seitenaufrufe pro Tag pro Ausstellung entstanden. Daraus kann man ablesen, ob die Nachfrage eher steigt, stagniert oder zurückgeht. Zeitlich etwas versetzt wirkt sich das auf die Ticketverkäufe aus.
Über die URL einer Ausstellungsseite könnte das gefiltert werden, aber Matomo bietet diesen Filter nur mit der Erweiterung »Custom Reports« an – und selbst dann sieht es nicht wirklich ansprechend aus.
≠ Nicht verwechseln: Segmente in Matomo die man über “Seiten-URL” definiert, zeigen Besuche, die diese Seiten-URL (und andere) beinhalten. Das ergibt andere Zahlen.
Wer Matomo selbst hostet, muss für diese Erweiterung 200 EUR im Jahr zahlen. Wer über Matomo hostet, erhält diese Funktion kostenlos dazu.
Doch über die API kann man auch selbst Custom Reports erstellen.
Matomo » Google Sheet » Looker Data Studio
Diese Daten kann man dann grafisch im kostenlosen Looker Data Studio von Google darstellen. So schön, dass man den Report direkt an die Leitung senden kann. Da nur Summen an Google gesendet werden, ist das DSGVO nicht so problematisch. Ein Google-Konto ist dennoch nötig.
Leider kann das neue Matomo Plugin für Looker Data studio diese Auswertung nicht selbst liefern. Es muss also programmiert werden.
Heute schenke ich euch das Google Apps Script, um Daten aus eurer Matomo Installation in ein Google Sheet zu senden, um dann dieses Google Sheet bei Looker Data Studio als Quelle nutzen zu können.
https://www.google.com/script/start/ (Opens in a new window)Dieses Skript fügt man ins Google Sheet hinzu:
const BASE_URL = "DER LINK ZU EUREM MATOMO (endet mit /index.php";
const SHEET_NAME = 'alle-seiten'; // Google Sheet sheet Name müsst ihr vorher erstellen und das Sheet so nennen
function loadMatomoData() {
try {
const data = fetchMatomoData();
writeToSheet(data);
} catch (error) {
Logger.log(`Error: ${error}`);
}
}
function getYesterday() {
var date = new Date();
date.setDate(date.getDate() - 1);
var dd = String(date.getDate()).padStart(2, '0');
var mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = date.getFullYear();
return yyyy + '-' + mm + '-' + dd;
}
function fetchMatomoData() {
const matomo_token = get_token('matomo-token');
const params = {
module: "API",
format: "CSV",
idSite: "1",
period: "day",
date: "yesterday",
method: "Actions.getPageUrls",
flat: "1",
format_metrics: "1",
translateColumnNames: "1",
language: "de",
token_auth: matomo_token,
filter_limit: "-1",
convertToUnicode: "0"
};
const url = ${BASE_URL}?${Object.keys(params).map(k => ${k}=${params[k]}`).join('&')}`;
Logger.log(`Fetching data from URL: ${url}`);
const csvContent = UrlFetchApp.fetch(url).getContentText();
Logger.log(`Fetched data: ${csvContent}`);
const csvData = Utilities.parseCsv(csvContent);
// Get yesterday's date
var yesterday = getYesterday();
// Add the date to each row
for (var i = 0; i < csvData.length; i++) {
csvData[i].unshift(yesterday);
}
Logger.log(`Parsed data with yesterdays date: ${csvData}`);
return csvData;
}
function writeToSheet(data) {
const sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_NAME);
var lastRow = sheet.getLastRow();
// If the sheet is not empty, remove the first row from data
if (lastRow > 0) {
data.shift();
}
Logger.info(`Last ROW: ${lastRow}`);
Logger.log(`Writing data to sheet: ${SHEET_NAME}`);
sheet.getRange(lastRow + 1, 1, data.length, data[0].length).setValues(data);
SpreadsheetApp.flush();
Logger.log(`Data written to sheet: ${SHEET_NAME}`);
}
// Ihr brauch noch einen API Key, den ihr im Google Apps Script hinterlegt
function get_token(key) {
const scriptProperties = PropertiesService.getScriptProperties();
const matomo_token = scriptProperties.getProperty(key);
return matomo_token;
}
Unterstützung?
Wenn ihr eure Webanalyse sinnvoll nutzen wollt und Anpassungen benötigt, unterstütze ich euch gerne dabei: hk@holgerkurtz.de (Opens in a new window)