SCHICKLER Media Index 2023: Der deutsche Werbemarkt trotzt den äußeren Bedingungen
Glücklicherweise ist Corona 2023 kein großes Thema mehr. Entsprechend müssen wir dieses Jahr nicht über Corona-Auswirkungen auf den deutschen Werbemarkt spekulieren (siehe Media Index 2022). Trotzdem bleiben die äußeren Umstände anspruchsvoll. Der Ukraine-Krieg hat zu steigenden Energiekosten und hoher Inflation geführt. Dies hat im letzten Jahr die Konsumlaune gedämpft sowie die wirtschaftliche Lage der Werbetreibenden beeinträchtigt. Diesen äußeren Umständen zum Trotz ist der deutsche Werbemarkt in 2022 um satte +7,4% gewachsen. Ein Großteil dieses Wachstums entfällt jedoch auf Messen, Out-of-Home und Kino. Diese Werbegattungen sind auf physische Präsenz der Werbeadressaten angewiesen und haben sich nach Ende der Lockdown-Beschränkungen wie erwartet stark erholt. Das Wachstum in den übrigen Gattungen fiel mit durchschnittlich +3,0% wesentlich geringer aus. Für 2023 erwarten wir ein weiteres Wachstum des deutschen Werbemarktes um +4,1%.
body{background-color:white;} (function() { // If window.HTMLWidgets is already defined, then use it; otherwise create a // new object. This allows preceding code to set options that affect the // initialization process (though none currently exist). window.HTMLWidgets = window.HTMLWidgets || {}; // See if we're running in a viewer pane. If not, we're in a web browser. var viewerMode = window.HTMLWidgets.viewerMode = /\bviewer_pane=1\b/.test(window.location); // See if we're running in Shiny mode. If not, it's a static document. // Note that static widgets can appear in both Shiny and static modes, but // obviously, Shiny widgets can only appear in Shiny apps/documents. var shinyMode = window.HTMLWidgets.shinyMode = typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; // We can't count on jQuery being available, so we implement our own // version if necessary. function querySelectorAll(scope, selector) { if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { return scope.find(selector); } if (scope.querySelectorAll) { return scope.querySelectorAll(selector); } } function asArray(value) { if (value === null) return []; if ($.isArray(value)) return value; return [value]; } // Implement jQuery's extend function extend(target /*, ... */) { if (arguments.length == 1) { return target; } for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var prop in source) { if (source.hasOwnProperty(prop)) { target[prop] = source[prop]; } } } return target; } // IE8 doesn't support Array.forEach. function forEach(values, callback, thisArg) { if (values.forEach) { values.forEach(callback, thisArg); } else { for (var i = 0; i < values.length; i++) { callback.call(thisArg, values[i], i, values); } } } // Replaces the specified method with the return value of funcSource. // // Note that funcSource should not BE the new method, it should be a function // that RETURNS the new method. funcSource receives a single argument that is // the overridden method, it can be called from the new method. The overridden // method can be called like a regular function, it has the target permanently // bound to it so "this" will work correctly. function overrideMethod(target, methodName, funcSource) { var superFunc = target[methodName] || function() {}; var superFuncBound = function() { return superFunc.apply(target, arguments); }; target[methodName] = funcSource(superFuncBound); } // Add a method to delegator that, when invoked, calls // delegatee.methodName. If there is no such method on // the delegatee, but there was one on delegator before // delegateMethod was called, then the original version // is invoked instead. // For example: // // var a = { // method1: function() { console.log('a1'); } // method2: function() { console.log('a2'); } // }; // var b = { // method1: function() { console.log('b1'); } // }; // delegateMethod(a, b, "method1"); // delegateMethod(a, b, "method2"); // a.method1(); // a.method2(); // // The output would be "b1", "a2". function delegateMethod(delegator, delegatee, methodName) { var inherited = delegator[methodName]; delegator[methodName] = function() { var target = delegatee; var method = delegatee[methodName]; // The method doesn't exist on the delegatee. Instead, // call the method on the delegator, if it exists. if (!method) { target = delegator; method = inherited; } if (method) { return method.apply(target, arguments); } }; } // Implement a vague facsimilie of jQuery's data method function elementData(el, name, value) { if (arguments.length == 2) { return el["htmlwidget_data_" + name]; } else if (arguments.length == 3) { el["htmlwidget_data_" + name] = value; return el; } else { throw new Error("Wrong number of arguments for elementData: " + arguments.length); } } // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex function escapeRegExp(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } function hasClass(el, className) { var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); return re.test(el.className); } // elements - array (or array-like object) of HTML elements // className - class name to test for // include - if true, only return elements with given className; // if false, only return elements *without* given className function filterByClass(elements, className, include) { var results = []; for (var i = 0; i < elements.length; i++) { if (hasClass(elements[i], className) == include) results.push(elements[i]); } return results; } function on(obj, eventName, func) { if (obj.addEventListener) { obj.addEventListener(eventName, func, false); } else if (obj.attachEvent) { obj.attachEvent(eventName, func); } } function off(obj, eventName, func) { if (obj.removeEventListener) obj.removeEventListener(eventName, func, false); else if (obj.detachEvent) { obj.detachEvent(eventName, func); } } // Translate array of values to top/right/bottom/left, as usual with // the "padding" CSS property // https://developer.mozilla.org/en-US/docs/Web/CSS/padding function unpackPadding(value) { if (typeof(value) === "number") value = [value]; if (value.length === 1) { return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; } if (value.length === 2) { return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; } if (value.length === 3) { return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; } if (value.length === 4) { return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; } } // Convert an unpacked padding object to a CSS value function paddingToCss(paddingObj) { return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; } // Makes a number suitable for CSS function px(x) { if (typeof(x) === "number") return x + "px"; else return x; } // Retrieves runtime widget sizing information for an element. // The return value is either null, or an object with fill, padding, // defaultWidth, defaultHeight fields. function sizingPolicy(el) { var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); if (!sizingEl) return null; var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); if (viewerMode) { return sp.viewer; } else { return sp.browser; } } // @param tasks Array of strings (or falsy value, in which case no-op). // Each element must be a valid JavaScript expression that yields a // function. Or, can be an array of objects with "code" and "data" // properties; in this case, the "code" property should be a string // of JS that's an expr that yields a function, and "data" should be // an object that will be added as an additional argument when that // function is called. // @param target The object that will be "this" for each function // execution. // @param args Array of arguments to be passed to the functions. (The // same arguments will be passed to all functions.) function evalAndRun(tasks, target, args) { if (tasks) { forEach(tasks, function(task) { var theseArgs = args; if (typeof(task) === "object") { theseArgs = theseArgs.concat([task.data]); task = task.code; } var taskFunc = tryEval(task); if (typeof(taskFunc) !== "function") { throw new Error("Task must be a function! Source:\n" + task); } taskFunc.apply(target, theseArgs); }); } } // Attempt eval() both with and without enclosing in parentheses. // Note that enclosing coerces a function declaration into // an expression that eval() can parse // (otherwise, a SyntaxError is thrown) function tryEval(code) { var result = null; try { result = eval("(" + code + ")"); } catch(error) { if (!(error instanceof SyntaxError)) { throw error; } try { result = eval(code); } catch(e) { if (e instanceof SyntaxError) { throw error; } else { throw e; } } } return result; } function initSizing(el) { var sizing = sizingPolicy(el); if (!sizing) return; var cel = document.getElementById("htmlwidget_container"); if (!cel) return; if (typeof(sizing.padding) !== "undefined") { document.body.style.margin = "0"; document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); } if (sizing.fill) { document.body.style.overflow = "hidden"; document.body.style.width = "100%"; document.body.style.height = "100%"; document.documentElement.style.width = "100%"; document.documentElement.style.height = "100%"; cel.style.position = "absolute"; var pad = unpackPadding(sizing.padding); cel.style.top = pad.top + "px"; cel.style.right = pad.right + "px"; cel.style.bottom = pad.bottom + "px"; cel.style.left = pad.left + "px"; el.style.width = "100%"; el.style.height = "100%"; return { getWidth: function() { return cel.getBoundingClientRect().width; }, getHeight: function() { return cel.getBoundingClientRect().height; } }; } else { el.style.width = px(sizing.width); el.style.height = px(sizing.height); return { getWidth: function() { return cel.getBoundingClientRect().width; }, getHeight: function() { return cel.getBoundingClientRect().height; } }; } } // Default implementations for methods var defaults = { find: function(scope) { return querySelectorAll(scope, "." + this.name); }, renderError: function(el, err) { var $el = $(el); this.clearError(el); // Add all these error classes, as Shiny does var errClass = "shiny-output-error"; if (err.type !== null) { // use the classes of the error condition as CSS class names errClass = errClass + " " + $.map(asArray(err.type), function(type) { return errClass + "-" + type; }).join(" "); } errClass = errClass + " htmlwidgets-error"; // Is el inline or block? If inline or inline-block, just display:none it // and add an inline error. var display = $el.css("display"); $el.data("restore-display-mode", display); if (display === "inline" || display === "inline-block") { $el.hide(); if (err.message !== "") { var errorSpan = $("").addClass(errClass); errorSpan.text(err.message); $el.after(errorSpan); } } else if (display === "block") { // If block, add an error just after the el, set visibility:none on the // el, and position the error to be on top of the el. // Mark it with a unique ID and CSS class so we can remove it later. $el.css("visibility", "hidden"); if (err.message !== "") { var errorDiv = $("Werbeumsätze 2023 nach Rubrik
Klicken Sie auf die einzelnen Segmente für eine feinere Betrachtung. Durch Anklicken des grauen Rings gelangen Sie wieder eine Ebene zurück.
(Hinweis: Die Grafik ist für Desktops optimiert)
Viel Bewegung in digitalen Werbegattungen
Online-Werbung ist weiterhin der Wachstumsmotor des deutschen Werbemarktes. Im letzten Jahr hat sich das Wachstum hier jedoch abgeschwächt (+6,0% in 2022 und prognostizierte 6,4% in 2023 im Vergleich zu + 11,7% in 2021). Dies liegt daran, dass sich nach Wegfall der Corona-Beschränkungen die Online-Nutzung wieder reduziert hat. Die E-Commerce-Umsätze sind 2022 erstmals seit Jahren gesunken. Auch deswegen sind die Ausgaben für digitale Display-Werbung in 2022 mit -3,4% zum ersten Mal geschrumpft. Ebenso war das Wachstum bei Video-Werbung mit +10,0% geringer als in den Vorjahren. Weiterhin kräftig gewachsen ist dagegen Influencer-Marketing mit +23,8% Zugewinn. Stabil entwickelt hat sich Search mit +10,1%. Hier ist Google als Quasi-Monopolist für die digitale Auffindbarkeit weiterhin kaum zu ersetzen.

Anzeigenblätter und Publikumszeitschriften 2023 unter Druck
In 2021 war der Printbereich erstmals seit vielen Jahren leicht gewachsen. In 2022 ist er mit -2,0% nun wieder leicht gesunken. Das Wegfallen der Corona-Beschränkungen hat einigen Print-Gattungen im Vergleich mit den Vor-Corona-Jahren trotzdem ein relativ gutes Jahr beschert. Zeitungswerbung ist in 2022 nur um -3,1% geschrumpft und Publikumszeitschriften um -2,8%. Für die Publikumszeitschriften wird sich die Lage in 2023 jedoch verschlechtern. Hier erwarten wir um -10,1% geringere Werbeumsätze im Vergleich zu 2022. Einen Großteil hierzu trägt bereits die Einstellung einer Vielzahl von Titeln bei Gruner + Jahr bei. Für Zeitungswerbung erwarten wir in 2023 mit -2,1% weiterhin nur einen geringen Verlust. Mit den Anzeigenblättern wird eine bereits in den letzten Jahren strauchelnde Werbegattung noch stärker unter Druck geraten. Sinkende Werbeeinnahmen und gleichzeitig steigende Druck- und Zustellkosten haben hier bereits für die Einstellung von Anzeigenblatt-Titeln gesorgt. Wir erwarten bei den Anzeigenblättern einen Verlust von -13,8% der Werbeumsätze in 2023.

Starke Erholung bei Messen und Kino
Am stärksten von Corona getroffen waren die Gattungen Messen, Kino, OOH und Sponsoring, die von der physischen Präsenz der Werbeempfänger abhängig sind. Diese haben in 2022 das größte Wachstum zu verzeichnen. Die Messeveranstalter erreichten +158,3% mehr Umsatz als 2021 und Kinowerbung wuchs in 2022 um +150,0%. OOH konnte um +15,9% wachsen. Für 2023 erwarten wir, dass sich Kino mit +40,0% und Messen mit +21,0% weiter dem Vorkrisenniveau annähern. Für OOH erwarten wir mit +4,8% ein gebremstes Wachstum in 2023.

TV gibt Zugewinne aus 2021 wieder ab
Lineares TV hatte in 2021 um +7,0% zugelegt. Dieses Wachstum wird es mit -4,1% in 2022 und prognostizierten -4,3% in 2023 wieder vollständig abgeben. Der Grund hierfür sind veränderte Nutzungsgewohnheiten. Während die stärkere Nutzung digitaler Streaming-Angebote die Online-Video-Werbeumsätze wachsen lässt, sinken Nutzung und Werbeumsätze im linearen TV. Auch die klassischen TV-Anstalten setzen verstärkt auf digitale Streaming-Angebote. Hier handelt es sich also lediglich um eine Verschiebung vom linearen TV zu digitalen Video-Plattformen. Insgesamt wachsen die Umsätze mit audiovisuellen Medienangeboten weiterhin. Im Bereich der klassischen Werbegattungen war Radio in den letzten Jahren sehr stabil und bleibt dies mit -1,3% in 2022 und prognostizierten 0,0% in 2023 weiterhin. Stark wachsend (allerdings noch auf niedrigem Niveau) ist die Podcast-Werbung. Sie wird sich von 30 Mio. € in 2021 auf 50 Mio. € in 2023 um +66% steigern.

Entwicklungen in 2023 bleiben spannend
Es ist weiterhin viel Bewegung im deutschen Werbemarkt. Der Strukturwandel von klassischen zu digitalen Werbekanälen setzt sich fort. Zudem stehen im Digitalen mit Display- und Videowerbung erstmalig etablierte Online-Gattungen unter Druck. Parallel entstehen rasant wachsende neue Werbegattungen. Hierunter fällt das Influencer-Marketing, bei dem die Werbebotschaft effektiv über eine persönliche Beziehung zwischen Influencer und Follower vermittelt wird. Eine weitere neue Gattung ist das Retail-Marketing (aktuell bei uns nicht separat ausgewiesen, umfasst z.B. Sponsored-Search-Ergebnisse bei Amazon). Hier wird Werbung zielgerichtet am Handelsplatz in den Kaufprozess integriert. Wenn auch noch auf kleinen Niveau wachsen Podcast-Werbung und bezahlte Anzeigen in Newslettern (in unserem Media-Index noch nicht separat ausgewiesen) sehr schnell.
Zum Schluss bleibt noch zu sagen, dass wir sämtliche Werbeumsätze in nicht Inflations-bereinigten Werten angeben. In realer Kaufkraft ist der deutsche Werbemarkt in 2022 also nicht wirklich gewachsen und wird dies auch 2023 nicht tun. Bei Werbetreibenden mit hohem Kostenanteil sorgt dies damit für ein schlechter werdendes Ergebnis. Laut erster Zahlen ist der deutsche Werbemarkt schleppend ins Jahr 2023 gestartet und viele Unternehmen sind zurückhaltend in der Planung von Werbebudgets. Die konjunkturelle Entwicklung wird ein wichtiger Faktor im kommenden Jahr sein. Je nachdem wie sich Inflation und Konsumlaune entwickeln, kann dies das Wachstum wieder erwecken oder weiter ausbremsen.
Mehr zu den Studienergebnissen finden Sie im aktuellen HORIZONT-Artikel.
Hinweis: Der SCHICKLER Media Index ist eine der umfassendsten Statistiken über den deutschen Werbemarkt. Neben den klassischen Gattungen sind nahezu alle Formen digitaler Werbung, sowie weitere Kommunikationsformen wie Messen, Sponsoring, Content- und Direktmarketing enthalten.
Diese Analyse wurde im März 2023 im Kontext der zu diesem Zeitpunkt erwartbaren Entwicklungen erstellt.
Autor: Dr. Ole Martin, Manager Data Science
E-Mail: o.martin@schickler.de
Autor: Patric Tongbhoyai, Geschäftsführer SCHICKLER
E-Mail: p.tongbhoyai@schickler.de
Interessiert? Bleiben Sie mit dem SCHICKLER.essentials Newsletter auf dem Laufenden!

