{"id":2698,"date":"2025-01-23T09:02:35","date_gmt":"2025-01-23T09:02:35","guid":{"rendered":"https:\/\/elijahp.com\/?page_id=2698"},"modified":"2026-01-09T09:17:29","modified_gmt":"2026-01-09T09:17:29","slug":"programmatic","status":"publish","type":"page","link":"https:\/\/elijahp.com\/fr\/programmatic\/","title":{"rendered":"Publicit\u00e9 Programmatique"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"2698\" class=\"elementor elementor-2698\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4626534 e-flex e-con-boxed e-con e-parent\" data-id=\"4626534\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-31e7074 elementor-widget elementor-widget-menu-anchor\" data-id=\"31e7074\" data-element_type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"2\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-95dc5cc elementor-widget elementor-widget-spacer\" data-id=\"95dc5cc\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b74dd7 elementor-widget elementor-widget-heading\" data-id=\"9b74dd7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Publicit\u00e9 Programmatique : livres et formations<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-67a3cb3 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"67a3cb3\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#1\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Faire D\u00e9filer<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3305495 elementor-widget elementor-widget-spacer\" data-id=\"3305495\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-63446fda e-con-full e-flex e-con e-parent\" data-id=\"63446fda\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-44136e58 e-con-full mdw-turbulence-effect e-flex e-con e-child\" data-id=\"44136e58\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-429a49fb elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"429a49fb\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\nbody{\n    --smooth-scroll: true;\n    --fallback-circle: true;\n}\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 20px;\n}\n[class^='mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class^='mdw-turbulence-effect'].anim .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-image svg{\n    transition: all 1s cubic-bezier(0,.33,.07,1.03);\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 0;\n    white-space: nowrap;\n    max-width: unset !important;\n    display: flex;\n    justify-content: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading.show,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading.show,\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-heading,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] p,\n[class*=' mdw-turbulence-effect'] p{\n    margin-bottom: 0;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image svg{\n    position: absolute;\n    left: 0;\n    top: unset;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye image{\n    transform: none !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur g,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur g{\n    transform: scale(0.95);\n    transform-origin: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur image{\n    transform: scale(1.05) !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image img,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 0;\n}\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-image img,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    max-width: var(--container-widget-width, 100%) !important;\n}\n\n@media (max-width:767px){\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 10px;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading,\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    position: static !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    max-width: 100% !important;\n}\n}\n<\/style>\n<script src=\"https:\/\/code.jquery.com\/jquery-2.2.4.min.js\"><\/script>\n<script>\nif(!MDWNonce110){\nvar MDWNonce110 = true\n;(function($){\n\nvar selector = \"[class^='mdw-turbulence-effect'], [class*=' mdw-turbulence-effect']\",\n    image = [],\n    img = [],\n    title1 = [],\n    title2 = [],\n    heading1 = [],\n    heading2 = [],\n    windowHeight,\n    windowWidth,\n    imgWidth = [],\n    imgHeight = [],\n    imgOffset = [],\n    maxRadius = [],\n    translate = [],\n    type = [],\n    brightness = { start: 0.8, end: 1.0 },\n    scale = { start: 0.9, end: 1.0 },\n    isSafari,\n    fallbackCircle,\n    previousWidth\n        \nfunction getValue(el, prop){ return getComputedStyle(el[0]).getPropertyValue(prop) }\n\nfunction init(){\n$(selector).each(function(i){\n    var $this = $(this)\n    image[i] = $this.find('.elementor-widget-image')\n    img[i] = image[i].find('img')\n    title1[i] = $this.find('.elementor-widget-heading').eq(0)\n    title2[i] = $this.find('.elementor-widget-heading').eq(1)\n    heading1[i] = title1[i].find('.elementor-heading-title')\n    heading2[i] = title2[i].find('.elementor-heading-title')\n    $('body').append('<div class=\"mdw-100vh\" style=\"height: 100vh;display: none;\"><\/div>')\n    isSafari = \/^((?!chrome|android).)*safari\/i.test(navigator.userAgent)\n    fallbackCircle = getValue($('body'),'--fallback-circle') && getValue($('body'),'--fallback-circle') == 'true'\n})\n}\n\nfunction setValues(){\n\nwindowHeight = $('.mdw-100vh').height()\nwindowWidth = $(window).width()\n\n$(selector).each(function(i){\n    var $this = $(this)\n    \n    imgWidth[i] = img[i].width()\n    imgHeight[i] = img[i].height()\n    maxRadius[i] = Math.sqrt(Math.pow(imgWidth[i]\/2,2)+Math.pow(imgHeight[i]\/2,2))+10\n    if(isSafari && !fallbackCircle && maxRadius[i] > 850) maxRadius[i] = 850\n})\n}\n\nfunction getSrc(img) {\n    var srcset = img.attr('srcset'), src\n    if (srcset){\n        var sources = srcset.split(',').map(source => source.trim()),\n        largestImage = null,\n        largestWidth = 0\n    \n        sources.forEach(source => {\n            var [url, width] = source.split(\/\\s+\/),\n            widthValue = parseFloat(width.replace('w', ''))\n    \n            if (widthValue > largestWidth) {\n                largestWidth = widthValue\n                largestImage = url\n            }\n        })\n        src = largestImage\n    }else{\n        src = img.attr('src')\n    }\n    return src\n}\n\nfunction setSVG(){\n$(selector).each(function(i){\n    var $this = $(this),\n    imgNaturalWidth = img[i][0].naturalWidth,\n    imgNaturalHeight = img[i][0].naturalHeight,\n    imgContainer =  image[i].find('.elementor-widget-container'),\n    imgUrl = getSrc(img[i]),\n    className = $this.attr('class'),\n    classNameIndex = className.indexOf('mdw-turbulence-effect'),\n    shortClass = className.substring(classNameIndex, className.indexOf(' ',classNameIndex)),\n    values = shortClass.split('-'),\n    blurHTML = shortClass.search('blur') == -1 || windowWidth < 768 || isSafari ? '' : '<feGaussianBlur in=\"displacement\" stdDeviation=\"10\"><\/feGaussianBlur>',\n    shapeHTML = `<circle cx=\"50%\" cy=\"50%\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/circle>`,\n    eyeClass = '',\n    effectResolution = 0.03,\n    effectArea = 50,\n    effectOctave = 3,\n    effectHTML,\n    svgHTML\n    \n    values.forEach(function(value, index){\n        if(value=='resolution' && values[index+1] && !isNaN(values[index+1])){ effectResolution = parseFloat(values[index+1])*0.003 }\n        if(value=='area' && values[index+1] && !isNaN(values[index+1])){ effectArea = parseFloat(values[index+1])*5 }\n    })\n    \n    if(effectArea > 100) effectOctave = 1\n    \n    if(blurHTML){\n        image[i].addClass('blur')\n        effectResolution = 0.01\n        effectArea = 150\n        effectOctave = 3\n    }\n    \n    type[i] = 'circle'\n    if(shortClass.search('eye') != -1){\n        type[i] = 'eye'\n        image[i].addClass('eye')\n        effectResolution = 0.06\n        if(blurHTML) effectResolution = 0\n        effectArea = 50\n        shapeHTML = `<path d=\"M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${3*imgHeight[i]\/2 - 2*12} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${2*12 - imgHeight[i]\/2} 0 ${imgHeight[i]\/2}\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/path>`\n    }\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        effectHTML = ''\n    }else{\n        effectHTML = \n        `<defs>\n            <filter id=\"MDWFilter${i+1}\">\n                <feTurbulence type=\"fractalNoise\" baseFrequency=\"${effectResolution}\" numOctaves=\"${effectOctave}\" result=\"noise\"><\/feTurbulence>\n                \n                <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"${effectArea}\" xChannelSelector=\"R\" yChannelSelector=\"G\"><\/feDisplacementMap>\n                ${blurHTML}\n            <\/filter>\n            <mask id=\"MDWCircle${i+1}\">\n                ${shapeHTML}\n            <\/mask>\n        <\/defs>`\n    }\n    \n    svgHTML = \n    `<svg width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"0 0 ${imgWidth[i]} ${imgHeight[i]}\">\n        ${effectHTML}\n        <g mask=\"url(#MDWCircle${i+1})\">\n            <image href=\"${imgUrl}\" width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" style=\"transform: scale(${scale.start}); transform-origin: center center; filter: brightness(${brightness.start});\" preserveAspectRatio=\"xMidYMid slice\"><\/image>\n        <\/g>\n    <\/svg>`\n    \n    imgContainer.find('svg').remove()\n    imgContainer.append(svgHTML)\n})\n}\n\nfunction getOffset(el){\n    var left = 0, top = 0\n    do{\n      if (!isNaN(el.offsetLeft)) left += el.offsetLeft\n      if (!isNaN(el.offsetTop)) top += el.offsetTop\n    }while(el = el.offsetParent)\n    return { top, left }\n}\n\nfunction setInitTranslate(){\n\nvar scrollTop = $(window).scrollTop()\n    \n$(selector).each(function(i){\n    var $this = $(this),\n    H1Offset = getOffset(heading1[i][0]),\n    H2Offset = getOffset(heading2[i][0]),\n    imgOffset = getOffset(img[i][0]),\n    textGap = !isNaN(parseFloat(getValue($this, '--text-gap'))) ? parseFloat(getValue($this, '--text-gap')) : 20,\n    T1X,T1Y,T2X,T2Y\n    \n    T1X = - H1Offset.left + (windowWidth - heading1[i].width() - heading2[i].width() - textGap) \/ 2\n    T1Y = imgOffset.top - H1Offset.top + (imgHeight[i] - heading1[i].height())\/2\n    T2X = - H2Offset.left + (windowWidth + heading1[i].width() - heading2[i].width() + textGap) \/ 2\n    T2Y = imgOffset.top - H2Offset.top + (imgHeight[i] - heading2[i].height())\/2\n    \n    translate[i] = {T1X,T1Y,T2X,T2Y}\n})\n}\n\nfunction getScrollValue(imgOffset, imgHeight, startPercent, endPercent, inverse= false){\n    var start = startPercent\/100*windowHeight,\n    end = endPercent\/100*windowHeight,\n    scrollValue = (imgOffset.top+imgHeight\/2-start)\/(end - start),\n    value = Math.max(Math.min(scrollValue,1),0)\n        \n    if(inverse) value = 1 - value\n    return value\n}\n\nfunction revealImage(startPercent){\n    \nvar imgStartPercent = 90,\n    imgEndPercent = 60\n\n$(selector).each(function(i){\n    \n    imgOffset[i] = img[i][0].getBoundingClientRect()\n    \n    var svg = image[i].find('svg'),\n    svgCircle = svg.find('circle'),\n    svgPath = svg.find('path'),\n    svgGroup = svg.find('g'),\n    svgImage = svg.find('image'),\n    revealAmount = getScrollValue(imgOffset[i], imgHeight[i], imgStartPercent, imgEndPercent),\n    currentBrightness = brightness.start + (brightness.end - brightness.start)*revealAmount,\n    currentScale = scale.start + (scale.end - scale.start)*revealAmount,\n    curretRadius = maxRadius[i]*revealAmount\n    \n    svgImage.css({\n        'filter': `brightness(${currentBrightness})`,\n        'transform': `scale(${currentScale})`\n    })\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        if( type[i] == 'circle' ) {\n            svg.css('clip-path', `circle(${curretRadius}px at 50% 50%)`)\n        }else{\n            svg.css('clip-path', `ellipse(50% ${revealAmount*50}% at 50% 50%)`)\n        }\n    }else{\n        if( type[i] == 'circle' ) {\n            svgCircle.attr('r', curretRadius)    \n        }else{\n            svgGroup.attr('mask', `url(#MDWCircle${i+1})`)\n            svgPath.attr('d', `M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (imgHeight[i] - 2*12)*revealAmount} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (2*12 - imgHeight[i])*revealAmount} 0 ${imgHeight[i]\/2}`)\n        }\n    }\n})\n}\n\nfunction moveText(startPercent){\n    \nvar titleStartPercent = 90,\n    titleEndPercent = 50\n\n$(selector).each(function(i){\n    \n    var $this = $(this),\n    translateAmount = getScrollValue(imgOffset[i], imgHeight[i], titleStartPercent, titleEndPercent, true),\n    T1T = {x: translate[i].T1X*translateAmount, y: translate[i].T1Y*translateAmount}\n    T2T = {x: translate[i].T2X*translateAmount, y: translate[i].T2Y*translateAmount}\n    \n    title1[i].css('transform', `translate(${T1T.x}px, ${T1T.y}px)`)\n    title2[i].css('transform', `translate(${T2T.x}px, ${T2T.y}px)`)\n    title1[i].addClass('show')\n    title2[i].addClass('show')\n    setTimeout(function(){ $this.addClass('anim') }, 50)\n\n})\n}\n\nfunction scrollAnimation(){\n    revealImage()\n    moveText()\n}\n\nfunction runAnimation(e){\n    if(e.type=='load') init()\n    setValues()\n    setSVG()\n    setInitTranslate()\n    scrollAnimation()\n}\n\n$(document).ready(init)\n$(window).on('scroll', scrollAnimation)\n$(window).on('load resize', function(e){\n    if(e.type=='resize' && $(window).width() < 768 && $(window).width() == previousWidth) return\n    runAnimation(e)\n    setTimeout(function(){ runAnimation(e) }, 100)\n    setTimeout(function(){ runAnimation(e) }, 500)\n    setTimeout(function(){ runAnimation(e) }, 1000)\n    previousWidth = $(window).width()\n})\n\n})(jQuery)\n}\n<\/script>\n\n<!-- Smooth Scroll with Lenis JS -->\n\n<style>\nhtml.lenis, html.lenis body {\n  height: auto;\n}\n.lenis.lenis-smooth {\n  scroll-behavior: auto !important;\n}\n.lenis.lenis-smooth [data-lenis-prevent] {\n  overscroll-behavior: contain;\n}\n.lenis.lenis-stopped {\n  overflow: hidden;\n}\n.lenis.lenis-smooth iframe {\n  pointer-events: none;\n}\n<\/style>\n<script src=\"https:\/\/unpkg.com\/lenis@1.1.11\/dist\/lenis.min.js\"><\/script> \n<script>\n$(document).ready(function(){\n\nvar smoothScroll = getComputedStyle(document.body).getPropertyValue('--smooth-scroll'),\n    smoothScroll = smoothScroll && smoothScroll == 'true'\n\nif(smoothScroll){\n    var lenis = new Lenis()\n    function raf(time) {\n      lenis.raf(time)\n      requestAnimationFrame(raf)\n    }\n    requestAnimationFrame(raf)\n}\n})\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64400ae elementor-absolute elementor-widget elementor-widget-heading\" data-id=\"64400ae\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Ad<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2476a78a elementor-widget elementor-widget-image\" data-id=\"2476a78a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"573\" height=\"750\" src=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/into.png\" class=\"attachment-large size-large wp-image-2795\" alt=\"\" srcset=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/into.png 573w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/into-229x300.png 229w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/into-9x12.png 9w\" sizes=\"(max-width: 573px) 100vw, 573px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5adbb2f0 elementor-absolute elementor-widget elementor-widget-heading\" data-id=\"5adbb2f0\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Operations<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3337779b elementor-widget__width-initial elementor-absolute elementor-widget elementor-widget-text-editor\" data-id=\"3337779b\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Un livre complet sur le monde de la publicit\u00e9 programmatique<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a27a52f e-flex e-con-boxed e-con e-parent\" data-id=\"a27a52f\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-05678f7 elementor-widget elementor-widget-text-editor\" data-id=\"05678f7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 class=\"translation-block\">Analyse\u00a0du livre : Introduction \u00e0 la publicit\u00e9 programmatique par Dominik Kosorin<\/h3><p class=\"translation-block\">Dans le monde en constante \u00e9volution du marketing digital, la publicit\u00e9 programmatique a chang\u00e9 la donne, mais la complexit\u00e9 de son \u00e9cosyst\u00e8me peut intimider les nouveaux venus. L'introduction \u00e0 la publicit\u00e9 programmatique de Dominik Kosorin est un guide concis et facile \u00e0 lire qui d\u00e9mystifie les principes fondamentaux de cette technologie transformatrice.<\/p><h4><strong>Aper\u00e7u du livre.<\/strong><\/h4><p>L'ouvrage de Kosorin est une ressource compacte mais compl\u00e8te destin\u00e9e \u00e0 tous ceux qui cherchent \u00e0 comprendre la publicit\u00e9 programmatique, qu'il s'agisse de sp\u00e9cialistes du marketing, de chefs d'entreprise ou d'\u00e9tudiants curieux. Plut\u00f4t que de submerger les lecteurs de jargon technique, l'auteur adopte une approche progressive pour expliquer le fonctionnement de l'\u00e9cosyst\u00e8me programmatique, le r\u00f4le de ses principaux acteurs et la mani\u00e8re dont les marques peuvent utiliser efficacement les donn\u00e9es pour cibler leur public.<\/p><p>L'ouvrage est structur\u00e9 de mani\u00e8re \u00e0 apporter des \u00e9claircissements dans trois domaines principaux :<\/p><ol><li><p class=\"translation-block\">L'\u00e9cosyst\u00e8me programmatique,\nKosorin d\u00e9crit les principaux composants, notamment les plateformes du c\u00f4t\u00e9 de la demande (DSP), les plateformes du c\u00f4t\u00e9 de l'offre (SSP), les \u00e9changes publicitaires et les plateformes de gestion des donn\u00e9es (DMP). Gr\u00e2ce \u00e0 des diagrammes utiles et \u00e0 des analogies claires, les lecteurs peuvent comprendre les interactions entre ces plateformes dans l'achat et la vente d'impressions publicitaires.<\/p><\/li><li><p><strong>Real-Time Bidding (RTB)<\/strong><br \/>L'un des points forts de l'ouvrage est l'explication des ench\u00e8res en temps r\u00e9el, l'\u00e9pine dorsale de la publicit\u00e9 programmatique. Kosorin d\u00e9compose le processus d'ench\u00e8res \u00e9tape par \u00e9tape, le rendant accessible m\u00eame aux lecteurs les moins techniques.<\/p><\/li><li><p><strong>Optimisation et Strat\u00e9gie<\/strong><br \/>Au-del\u00e0 des aspects techniques, Kosorin met l'accent sur la mani\u00e8re dont les annonceurs peuvent utiliser les donn\u00e9es pour personnaliser les campagnes, am\u00e9liorer le retour sur investissement et s'assurer que leurs publicit\u00e9s atteignent le bon public au bon moment. L'ouvrage aborde \u00e9galement les mesures cl\u00e9s permettant de contr\u00f4ler les performances et d'optimiser les campagnes pour qu'elles soient couronn\u00e9es de succ\u00e8s.<\/p><\/li><\/ol><h4><strong>Points forts du livre<\/strong><\/h4><ol><li><p><strong>Clart\u00e9 et simplicit\u00e9<\/strong><br \/>Kosorin excelle \u00e0 simplifier les concepts techniques sans les abrutir. Il utilise de nombreux exemples et visuels pour illustrer des processus complexes, ce qui constitue un avantage consid\u00e9rable pour les novices en mati\u00e8re de publicit\u00e9 programmatique.<\/p><\/li><li><p><strong>Convivialit\u00e9 pour les d\u00e9butants<\/strong><br \/>Contrairement \u00e0 d'autres ouvrages techniques dans ce domaine, Kosorin \u00e9vite de submerger les lecteurs avec des d\u00e9tails inutiles. Il se concentre sur l'essentiel, ce qui en fait un point de d\u00e9part id\u00e9al pour les sp\u00e9cialistes du marketing et les \u00e9tudiants.<\/p><\/li><li><p><strong>Une structure bien organis\u00e9e<\/strong><br \/>L'encha\u00eenement logique des sujets permet aux lecteurs d'acqu\u00e9rir une solide compr\u00e9hension au fur et \u00e0 mesure qu'ils avancent dans le livre. Ce livre est id\u00e9al pour les personnes qui veulent apprendre rapidement et qui n'ont pas le temps de lire des textes acad\u00e9miques denses.<\/p><\/li><\/ol><h4><strong style=\"font-style: inherit; font-family: var( --e-global-typography-text-font-family ), Sans-serif; text-align: var(--text-align); color: var(--ast-global-color-2); font-size: 1.33333rem;\">Limites<\/strong><\/h4><p>Bien que ce livre soit une excellente introduction, il n'aborde pas en profondeur des sujets avanc\u00e9s tels que le r\u00f4le de l'apprentissage automatique dans les ench\u00e8res publicitaires ou la d\u00e9tection des fraudes dans la publicit\u00e9 programmatique. Ceux qui souhaitent approfondir des concepts techniques ou de pointe devront peut-\u00eatre associer ce livre \u00e0 des ressources plus avanc\u00e9es.<\/p><h4><strong style=\"font-style: inherit; font-family: var( --e-global-typography-text-font-family ), Sans-serif; text-align: var(--text-align); color: var(--ast-global-color-2); font-size: 1.33333rem;\">Verdict final<\/strong><\/h4><p class=\"translation-block\">Introduction \u00e0 la publicit\u00e9 programmatique de Dominik Kosorin est un ouvrage incontournable pour tous ceux qui souhaitent comprendre les bases de la publicit\u00e9 programmatique sans se perdre dans les d\u00e9tails techniques. Ses explications claires, ses id\u00e9es exploitables et son accent sur la compr\u00e9hension pratique en font une excellente introduction pour les d\u00e9butants dans l'espace du marketing num\u00e9rique. Si vous \u00eates curieux de savoir comment les publicit\u00e9s num\u00e9riques sont diffus\u00e9es \u00e0 votre public en quelques millisecondes, ou comment faire travailler votre budget publicitaire plus intelligemment, et non plus difficilement, ce livre est l'endroit id\u00e9al pour commencer.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3718214d e-con-full e-flex e-con e-parent\" data-id=\"3718214d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-5d6e7bb4 mdw-turbulence-effect e-flex e-con-boxed e-con e-child\" data-id=\"5d6e7bb4\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2fbd46a0 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"2fbd46a0\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\nbody{\n    --smooth-scroll: true;\n    --fallback-circle: true;\n}\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 20px;\n}\n[class^='mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class^='mdw-turbulence-effect'].anim .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-image svg{\n    transition: all 1s cubic-bezier(0,.33,.07,1.03);\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 0;\n    white-space: nowrap;\n    max-width: unset !important;\n    display: flex;\n    justify-content: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading.show,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading.show,\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-heading,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] p,\n[class*=' mdw-turbulence-effect'] p{\n    margin-bottom: 0;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image svg{\n    position: absolute;\n    left: 0;\n    top: unset;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye image{\n    transform: none !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur g,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur g{\n    transform: scale(0.95);\n    transform-origin: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur image{\n    transform: scale(1.05) !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image img,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 0;\n}\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-image img,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    max-width: var(--container-widget-width, 100%) !important;\n}\n\n@media (max-width:767px){\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 10px;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading,\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    position: static !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    max-width: 100% !important;\n}\n}\n<\/style>\n<script src=\"https:\/\/code.jquery.com\/jquery-2.2.4.min.js\"><\/script>\n<script>\nif(!MDWNonce110){\nvar MDWNonce110 = true\n;(function($){\n\nvar selector = \"[class^='mdw-turbulence-effect'], [class*=' mdw-turbulence-effect']\",\n    image = [],\n    img = [],\n    title1 = [],\n    title2 = [],\n    heading1 = [],\n    heading2 = [],\n    windowHeight,\n    windowWidth,\n    imgWidth = [],\n    imgHeight = [],\n    imgOffset = [],\n    maxRadius = [],\n    translate = [],\n    type = [],\n    brightness = { start: 0.8, end: 1.0 },\n    scale = { start: 0.9, end: 1.0 },\n    isSafari,\n    fallbackCircle,\n    previousWidth\n        \nfunction getValue(el, prop){ return getComputedStyle(el[0]).getPropertyValue(prop) }\n\nfunction init(){\n$(selector).each(function(i){\n    var $this = $(this)\n    image[i] = $this.find('.elementor-widget-image')\n    img[i] = image[i].find('img')\n    title1[i] = $this.find('.elementor-widget-heading').eq(0)\n    title2[i] = $this.find('.elementor-widget-heading').eq(1)\n    heading1[i] = title1[i].find('.elementor-heading-title')\n    heading2[i] = title2[i].find('.elementor-heading-title')\n    $('body').append('<div class=\"mdw-100vh\" style=\"height: 100vh;display: none;\"><\/div>')\n    isSafari = \/^((?!chrome|android).)*safari\/i.test(navigator.userAgent)\n    fallbackCircle = getValue($('body'),'--fallback-circle') && getValue($('body'),'--fallback-circle') == 'true'\n})\n}\n\nfunction setValues(){\n\nwindowHeight = $('.mdw-100vh').height()\nwindowWidth = $(window).width()\n\n$(selector).each(function(i){\n    var $this = $(this)\n    \n    imgWidth[i] = img[i].width()\n    imgHeight[i] = img[i].height()\n    maxRadius[i] = Math.sqrt(Math.pow(imgWidth[i]\/2,2)+Math.pow(imgHeight[i]\/2,2))+10\n    if(isSafari && !fallbackCircle && maxRadius[i] > 850) maxRadius[i] = 850\n})\n}\n\nfunction getSrc(img) {\n    var srcset = img.attr('srcset'), src\n    if (srcset){\n        var sources = srcset.split(',').map(source => source.trim()),\n        largestImage = null,\n        largestWidth = 0\n    \n        sources.forEach(source => {\n            var [url, width] = source.split(\/\\s+\/),\n            widthValue = parseFloat(width.replace('w', ''))\n    \n            if (widthValue > largestWidth) {\n                largestWidth = widthValue\n                largestImage = url\n            }\n        })\n        src = largestImage\n    }else{\n        src = img.attr('src')\n    }\n    return src\n}\n\nfunction setSVG(){\n$(selector).each(function(i){\n    var $this = $(this),\n    imgNaturalWidth = img[i][0].naturalWidth,\n    imgNaturalHeight = img[i][0].naturalHeight,\n    imgContainer =  image[i].find('.elementor-widget-container'),\n    imgUrl = getSrc(img[i]),\n    className = $this.attr('class'),\n    classNameIndex = className.indexOf('mdw-turbulence-effect'),\n    shortClass = className.substring(classNameIndex, className.indexOf(' ',classNameIndex)),\n    values = shortClass.split('-'),\n    blurHTML = shortClass.search('blur') == -1 || windowWidth < 768 || isSafari ? '' : '<feGaussianBlur in=\"displacement\" stdDeviation=\"10\"><\/feGaussianBlur>',\n    shapeHTML = `<circle cx=\"50%\" cy=\"50%\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/circle>`,\n    eyeClass = '',\n    effectResolution = 0.03,\n    effectArea = 50,\n    effectOctave = 3,\n    effectHTML,\n    svgHTML\n    \n    values.forEach(function(value, index){\n        if(value=='resolution' && values[index+1] && !isNaN(values[index+1])){ effectResolution = parseFloat(values[index+1])*0.003 }\n        if(value=='area' && values[index+1] && !isNaN(values[index+1])){ effectArea = parseFloat(values[index+1])*5 }\n    })\n    \n    if(effectArea > 100) effectOctave = 1\n    \n    if(blurHTML){\n        image[i].addClass('blur')\n        effectResolution = 0.01\n        effectArea = 150\n        effectOctave = 3\n    }\n    \n    type[i] = 'circle'\n    if(shortClass.search('eye') != -1){\n        type[i] = 'eye'\n        image[i].addClass('eye')\n        effectResolution = 0.06\n        if(blurHTML) effectResolution = 0\n        effectArea = 50\n        shapeHTML = `<path d=\"M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${3*imgHeight[i]\/2 - 2*12} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${2*12 - imgHeight[i]\/2} 0 ${imgHeight[i]\/2}\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/path>`\n    }\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        effectHTML = ''\n    }else{\n        effectHTML = \n        `<defs>\n            <filter id=\"MDWFilter${i+1}\">\n                <feTurbulence type=\"fractalNoise\" baseFrequency=\"${effectResolution}\" numOctaves=\"${effectOctave}\" result=\"noise\"><\/feTurbulence>\n                \n                <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"${effectArea}\" xChannelSelector=\"R\" yChannelSelector=\"G\"><\/feDisplacementMap>\n                ${blurHTML}\n            <\/filter>\n            <mask id=\"MDWCircle${i+1}\">\n                ${shapeHTML}\n            <\/mask>\n        <\/defs>`\n    }\n    \n    svgHTML = \n    `<svg width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"0 0 ${imgWidth[i]} ${imgHeight[i]}\">\n        ${effectHTML}\n        <g mask=\"url(#MDWCircle${i+1})\">\n            <image href=\"${imgUrl}\" width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" style=\"transform: scale(${scale.start}); transform-origin: center center; filter: brightness(${brightness.start});\" preserveAspectRatio=\"xMidYMid slice\"><\/image>\n        <\/g>\n    <\/svg>`\n    \n    imgContainer.find('svg').remove()\n    imgContainer.append(svgHTML)\n})\n}\n\nfunction getOffset(el){\n    var left = 0, top = 0\n    do{\n      if (!isNaN(el.offsetLeft)) left += el.offsetLeft\n      if (!isNaN(el.offsetTop)) top += el.offsetTop\n    }while(el = el.offsetParent)\n    return { top, left }\n}\n\nfunction setInitTranslate(){\n\nvar scrollTop = $(window).scrollTop()\n    \n$(selector).each(function(i){\n    var $this = $(this),\n    H1Offset = getOffset(heading1[i][0]),\n    H2Offset = getOffset(heading2[i][0]),\n    imgOffset = getOffset(img[i][0]),\n    textGap = !isNaN(parseFloat(getValue($this, '--text-gap'))) ? parseFloat(getValue($this, '--text-gap')) : 20,\n    T1X,T1Y,T2X,T2Y\n    \n    T1X = - H1Offset.left + (windowWidth - heading1[i].width() - heading2[i].width() - textGap) \/ 2\n    T1Y = imgOffset.top - H1Offset.top + (imgHeight[i] - heading1[i].height())\/2\n    T2X = - H2Offset.left + (windowWidth + heading1[i].width() - heading2[i].width() + textGap) \/ 2\n    T2Y = imgOffset.top - H2Offset.top + (imgHeight[i] - heading2[i].height())\/2\n    \n    translate[i] = {T1X,T1Y,T2X,T2Y}\n})\n}\n\nfunction getScrollValue(imgOffset, imgHeight, startPercent, endPercent, inverse= false){\n    var start = startPercent\/100*windowHeight,\n    end = endPercent\/100*windowHeight,\n    scrollValue = (imgOffset.top+imgHeight\/2-start)\/(end - start),\n    value = Math.max(Math.min(scrollValue,1),0)\n        \n    if(inverse) value = 1 - value\n    return value\n}\n\nfunction revealImage(startPercent){\n    \nvar imgStartPercent = 90,\n    imgEndPercent = 60\n\n$(selector).each(function(i){\n    \n    imgOffset[i] = img[i][0].getBoundingClientRect()\n    \n    var svg = image[i].find('svg'),\n    svgCircle = svg.find('circle'),\n    svgPath = svg.find('path'),\n    svgGroup = svg.find('g'),\n    svgImage = svg.find('image'),\n    revealAmount = getScrollValue(imgOffset[i], imgHeight[i], imgStartPercent, imgEndPercent),\n    currentBrightness = brightness.start + (brightness.end - brightness.start)*revealAmount,\n    currentScale = scale.start + (scale.end - scale.start)*revealAmount,\n    curretRadius = maxRadius[i]*revealAmount\n    \n    svgImage.css({\n        'filter': `brightness(${currentBrightness})`,\n        'transform': `scale(${currentScale})`\n    })\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        if( type[i] == 'circle' ) {\n            svg.css('clip-path', `circle(${curretRadius}px at 50% 50%)`)\n        }else{\n            svg.css('clip-path', `ellipse(50% ${revealAmount*50}% at 50% 50%)`)\n        }\n    }else{\n        if( type[i] == 'circle' ) {\n            svgCircle.attr('r', curretRadius)    \n        }else{\n            svgGroup.attr('mask', `url(#MDWCircle${i+1})`)\n            svgPath.attr('d', `M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (imgHeight[i] - 2*12)*revealAmount} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (2*12 - imgHeight[i])*revealAmount} 0 ${imgHeight[i]\/2}`)\n        }\n    }\n})\n}\n\nfunction moveText(startPercent){\n    \nvar titleStartPercent = 90,\n    titleEndPercent = 50\n\n$(selector).each(function(i){\n    \n    var $this = $(this),\n    translateAmount = getScrollValue(imgOffset[i], imgHeight[i], titleStartPercent, titleEndPercent, true),\n    T1T = {x: translate[i].T1X*translateAmount, y: translate[i].T1Y*translateAmount}\n    T2T = {x: translate[i].T2X*translateAmount, y: translate[i].T2Y*translateAmount}\n    \n    title1[i].css('transform', `translate(${T1T.x}px, ${T1T.y}px)`)\n    title2[i].css('transform', `translate(${T2T.x}px, ${T2T.y}px)`)\n    title1[i].addClass('show')\n    title2[i].addClass('show')\n    setTimeout(function(){ $this.addClass('anim') }, 50)\n\n})\n}\n\nfunction scrollAnimation(){\n    revealImage()\n    moveText()\n}\n\nfunction runAnimation(e){\n    if(e.type=='load') init()\n    setValues()\n    setSVG()\n    setInitTranslate()\n    scrollAnimation()\n}\n\n$(document).ready(init)\n$(window).on('scroll', scrollAnimation)\n$(window).on('load resize', function(e){\n    if(e.type=='resize' && $(window).width() < 768 && $(window).width() == previousWidth) return\n    runAnimation(e)\n    setTimeout(function(){ runAnimation(e) }, 100)\n    setTimeout(function(){ runAnimation(e) }, 500)\n    setTimeout(function(){ runAnimation(e) }, 1000)\n    previousWidth = $(window).width()\n})\n\n})(jQuery)\n}\n<\/script>\n\n<!-- Smooth Scroll with Lenis JS -->\n\n<style>\nhtml.lenis, html.lenis body {\n  height: auto;\n}\n.lenis.lenis-smooth {\n  scroll-behavior: auto !important;\n}\n.lenis.lenis-smooth [data-lenis-prevent] {\n  overscroll-behavior: contain;\n}\n.lenis.lenis-stopped {\n  overflow: hidden;\n}\n.lenis.lenis-smooth iframe {\n  pointer-events: none;\n}\n<\/style>\n<script src=\"https:\/\/unpkg.com\/lenis@1.1.11\/dist\/lenis.min.js\"><\/script> \n<script>\n$(document).ready(function(){\n\nvar smoothScroll = getComputedStyle(document.body).getPropertyValue('--smooth-scroll'),\n    smoothScroll = smoothScroll && smoothScroll == 'true'\n\nif(smoothScroll){\n    var lenis = new Lenis()\n    function raf(time) {\n      lenis.raf(time)\n      requestAnimationFrame(raf)\n    }\n    requestAnimationFrame(raf)\n}\n})\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-661c9144 elementor-widget elementor-widget-heading\" data-id=\"661c9144\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Google<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b0ae3d0 elementor-widget__width-inherit elementor-widget elementor-widget-image\" data-id=\"6b0ae3d0\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"691\" height=\"637\" src=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-23-074658.png\" class=\"attachment-large size-large wp-image-2746\" alt=\"\" srcset=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-23-074658.png 691w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-23-074658-300x277.png 300w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-23-074658-13x12.png 13w\" sizes=\"(max-width: 691px) 100vw, 691px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-420e6a90 e-con-full e-flex e-con e-child\" data-id=\"420e6a90\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-215a88af elementor-widget elementor-widget-heading\" data-id=\"215a88af\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Ad Manager<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-50728f8c elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"50728f8c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Google Ad Manager (GAM) est une plate-forme publicitaire compl\u00e8te con\u00e7ue pour aider les \u00e9diteurs \u00e0 g\u00e9rer et \u00e0 mon\u00e9tiser leur inventaire publicitaire num\u00e9rique sur plusieurs canaux. Il s'agit d'un outil puissant qui combine des fonctions de diffusion d'annonces, de gestion d'inventaire, de cr\u00e9ation de rapports et de publicit\u00e9 programmatique en une seule solution unifi\u00e9e.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38ac82d elementor-widget elementor-widget-text-editor\" data-id=\"38ac82d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><strong>Formation certifi\u00e9e Google Ad Manager de PubGuru : Un examen complet<\/strong><\/h3><h4><strong>Vue d'ensemble<\/strong><\/h4><p class=\"translation-block\">Le cours de certification PubGuru Google Ad Manager (GAM), propos\u00e9 par MonetizeMore, est con\u00e7u pour enseigner aux \u00e9diteurs et aux professionnels de l'AdOps comment ma\u00eetriser le serveur publicitaire le plus utilis\u00e9 dans le domaine de la publicit\u00e9 num\u00e9rique. GAM est l'\u00e9pine dorsale des strat\u00e9gies de mon\u00e9tisation de nombreux \u00e9diteurs, et ce cours fournit l'expertise n\u00e9cessaire pour g\u00e9rer l'inventaire publicitaire, optimiser les performances et maximiser les revenus. Ce cours est id\u00e9al pour ceux qui souhaitent approfondir leur connaissance de la publicit\u00e9 programmatique et des techniques avanc\u00e9es de gestion des publicit\u00e9s.<\/p><p>\u00a0<\/p><hr \/><h4><strong>Ce que vous apprendrez<\/strong><\/h4><ol><li><p><strong>Principes fondamentaux  de Google Ad Manager :<\/strong>:<\/p><ul><li>Introduction \u00e0 GAM et \u00e0 ses principales fonctionnalit\u00e9s.<\/li><li>Comprendre la diff\u00e9rence entre les comptes Small Business et Premium.<\/li><\/ul><\/li><li><p><strong>Gestion de l'inventaire publicitaire :<\/strong>:<\/p><ul><li>Configurer les unit\u00e9s publicitaires, les emplacements et les balises publicitaires pour un contr\u00f4le efficace de l'inventaire.<\/li><li>Cr\u00e9er et g\u00e9rer des ordres, des \u00e9l\u00e9ments de campagne et des options de ciblage.<\/li><\/ul><\/li><li><p><strong>L'essentiel de la publicit\u00e9 programmatique :<\/strong>:<\/p><ul><li>Comment les publicit\u00e9s programmatiques, l'Open Bidding et le header bidding s'int\u00e8grent \u00e0 GAM.<\/li><li>Mise en place d'offres, d'ench\u00e8res priv\u00e9es et d'offres programmatiques garanties.<\/li><\/ul><\/li><li><p><strong>Rapports et analyses avanc\u00e9s :<\/strong>:<\/p><ul><li>Comment utiliser les outils de reporting de GAM pour contr\u00f4ler les performances et identifier les opportunit\u00e9s de croissance.<\/li><li>Interpr\u00e9tation des donn\u00e9es pour optimiser les CPM, les taux de remplissage et le rendement global<\/li><\/ul><\/li><li><p><strong>Strat\u00e9gies d'optimisation des revenus :<\/strong>:<\/p><ul><li>Meilleures pratiques pour la mise en \u0153uvre des r\u00e8gles de tarification unifi\u00e9e, du rafra\u00eechissement des annonces et de l'allocation dynamique.<\/li><li>Utilisation du tableau de bord de PubGuru pour am\u00e9liorer les flux de travail d'optimisation.<\/li><\/ul><\/li><li><p><strong>Toubleshooting<\/strong>:<\/p><ul><li>Assurer la conformit\u00e9 avec les r\u00e8gles de Google pour \u00e9viter la suspension du compte.<\/li><li>Diagnostiquer et r\u00e9soudre les probl\u00e8mes courants de diffusion d'annonces.<\/li><\/ul><\/li><\/ol><hr \/><h4><strong>Points Forts<\/strong><\/h4><ul><li><strong>Formation compl\u00e8te<\/strong>: Elle couvre tous les aspects, depuis les bases de la GAM jusqu'aux techniques d'optimisation avanc\u00e9es, ce qui la rend adapt\u00e9e \u00e0 diff\u00e9rents niveaux d'exp\u00e9rience.<\/li><li><strong>L'accent est mis sur les applications concr\u00e8tes<\/strong>: Des exemples pratiques et des \u00e9tudes de cas aident les participants \u00e0 appliquer leurs connaissances directement \u00e0 leurs op\u00e9rations publicitaires.<\/li><li><strong>Perspectives avanc\u00e9es en mati\u00e8re de revenus<\/strong>: Offre des strat\u00e9gies concr\u00e8tes pour augmenter les revenus en utilisant les outils de GAM et la plateforme PubGuru.<\/li><li><strong>Con\u00e7ue par des experts pour les \u00e9diteurs<\/strong>: L'expertise de MonetizeMore dans le domaine de l'AdTech garantit que le contenu est pertinent, \u00e0 jour et centr\u00e9 sur l'\u00e9diteur.<\/li><\/ul><hr \/><h4><strong>Limites<\/strong><\/h4><ul><li><strong>Courbe d'apprentissage abrupte pour les d\u00e9butants<\/strong>: Bien que le cours soit complet, les d\u00e9butants peuvent se sentir d\u00e9pass\u00e9s s'ils n'ont pas d\u00e9j\u00e0 une certaine familiarit\u00e9 avec la diffusion d'annonces ou la publicit\u00e9 num\u00e9rique.<\/li><li><strong>Une Niche<\/strong>: Principalement destin\u00e9 aux \u00e9diteurs et aux professionnels de l'AdOps, avec une applicabilit\u00e9 limit\u00e9e pour les entreprises qui ne sont pas des \u00e9diteurs.<\/li><li><strong>Plateforme sp\u00e9cifique<\/strong>: Se concentre exclusivement sur le GAM, ce qui peut ne pas \u00eatre utile pour ceux qui utilisent d'autres ad servers ou plateformes.<\/li><\/ul><hr \/><h4><strong>Verdict<\/strong><\/h4><p class=\"translation-block\">Le cours de certification PubGuru Google Ad Manager est une ressource de premier ordre pour les \u00e9diteurs et les professionnels de l'AdOps qui cherchent \u00e0 ma\u00eetriser Google Ad Manager et \u00e0 maximiser les revenus publicitaires. Il fournit des informations pratiques et exploitables \u00e0 la fois pour les d\u00e9butants et les professionnels chevronn\u00e9s, bien que ceux qui n'ont pas d'exp\u00e9rience pr\u00e9alable de la publicit\u00e9 num\u00e9rique puissent trouver cela difficile. Soutenu par l'expertise de MonetizeMore, ce cours offre une valeur significative pour tous ceux qui sont s\u00e9rieux au sujet de la gestion de l'inventaire publicitaire et de la r\u00e9ussite programmatique.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-345e8664 e-con-full e-flex e-con e-parent\" data-id=\"345e8664\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-57111e4b e-con-full mdw-turbulence-effect-area-25 e-flex e-con e-child\" data-id=\"57111e4b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2afd3de6 elementor-widget elementor-widget-heading\" data-id=\"2afd3de6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Ad<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1417f90e elementor-widget__width-inherit elementor-widget elementor-widget-image\" data-id=\"1417f90e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/4d6e1eaba2121fdd8ef332d921e95f9d-1024x576.png\" class=\"attachment-large size-large wp-image-2756\" alt=\"\" srcset=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/4d6e1eaba2121fdd8ef332d921e95f9d-1024x576.png 1024w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/4d6e1eaba2121fdd8ef332d921e95f9d-300x169.png 300w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/4d6e1eaba2121fdd8ef332d921e95f9d-768x432.png 768w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/4d6e1eaba2121fdd8ef332d921e95f9d-18x10.png 18w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/4d6e1eaba2121fdd8ef332d921e95f9d.png 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1bd4a03a elementor-widget elementor-widget-heading\" data-id=\"1bd4a03a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Optimization<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb473ef elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"bb473ef\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>L'optimisation publicitaire fait r\u00e9f\u00e9rence aux strat\u00e9gies et aux techniques utilis\u00e9es pour maximiser les revenus, am\u00e9liorer les performances publicitaires et obtenir les meilleurs r\u00e9sultats pour les \u00e9diteurs et les annonceurs.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8b1fe3f elementor-widget elementor-widget-text-editor\" data-id=\"8b1fe3f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><strong>Cours d'optimisation publicitaire avanc\u00e9e de PubGuru : Un examen complet<\/strong><\/h3>\n<h4><strong>Vue d'ensemble<\/strong><\/h4>\n<p class=\"translation-block\">La formation PubGuru Advanced Ad Optimization Course de MonetizeMore est con\u00e7ue pour \u00e9quiper les \u00e9diteurs, les professionnels de l'AdOps et les sp\u00e9cialistes du marketing num\u00e9rique avec les outils et les techniques pour maximiser les revenus publicitaires gr\u00e2ce \u00e0 des strat\u00e9gies d'optimisation avanc\u00e9es. Ce cours se concentre sur les \u00e9tapes \u00e0 suivre pour am\u00e9liorer la performance des publicit\u00e9s, en s'assurant que vous pouvez tirer le meilleur parti de votre inventaire sans compromettre l'exp\u00e9rience de l'utilisateur. Il est parfait pour ceux qui connaissent d\u00e9j\u00e0 les bases de l'AdOps et qui souhaitent passer \u00e0 la vitesse sup\u00e9rieure.<\/p>\n<hr>\n<h4><strong>Ce que vous apprendrez<\/strong><\/h4>\n<ol>\n<li>\n<p><strong>Strat\u00e9gies de mise en page et de placement publicitaire :<\/strong>:<\/p>\n<ul>\n<li>Comment optimiser la mise en page des publicit\u00e9s pour augmenter les taux de visualisation et CTR.<\/li>\n<li>Comprendre les cartes thermiques et le comportement des utilisateurs pour affiner le placement des annonces.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Ma\u00eetrise de l'ench\u00e8re d'en-t\u00eate<\/strong>:<\/p>\n<ul>\n<li>Conseils avanc\u00e9s pour la mise en \u0153uvre et la gestion des partenaires de header bidding.<\/li>\n<li>L'\u00e9tranglement des ench\u00e8res, l'optimisation des d\u00e9lais et les strat\u00e9gies de prix plancher.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Optimisation bas\u00e9e sur les donn\u00e9es<\/strong>:<\/p>\n<ul>\n<li>Exploitation des outils d'analyse (par exemple, les rapports de Google Ad Manager) pour identifier et traiter les fuites de revenus.<\/li>\n<li>Techniques de test A\/B pour les cr\u00e9ations et les formats publicitaires.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Les Insights<\/strong>:<\/p>\n<ul>\n<li>Approfondissement de la dynamique eCPM, de l'optimisation du taux de remplissage et de l'\u00e9quilibrage de la densit\u00e9 publicitaire.<\/li>\n<li>Travailler avec les partenaires de la demande pour assurer un rendement maximal.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Exp\u00e9rience Utilisateur<\/strong>:<\/p>\n<ul>\n<li>\u00c9quilibrer les revenus publicitaires avec les exigences de Core Web Vitals et des r\u00e8gles de Google.<\/li>\n<li>Techniques pour \u00e9viter les p\u00e9nalit\u00e9s tout en maintenant la performance des revenus.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<hr>\n<h4><strong>Points Forts<\/strong><\/h4>\n<ul>\n<li><strong>Contenu approfondi<\/strong>: Le cours offre un aper\u00e7u d\u00e9taill\u00e9 des nuances de l'optimisation publicitaire, ce qui le rend id\u00e9al pour les professionnels exp\u00e9riment\u00e9s de l'AdOps.<\/li>\n<li><strong>L'accent est mis sur les r\u00e9sultats<\/strong>: Ce cours enseigne des strat\u00e9gies concr\u00e8tes qui ont un impact direct sur les revenus publicitaires et les performances du site.<\/li>\n<li><strong>Formation Pratique<\/strong>: Fournit des exemples pratiques, des \u00e9tudes de cas et l'acc\u00e8s \u00e0 des outils tels que le tableau de bord PubGuru pour la mise en \u0153uvre.<\/li>\n<\/ul>\n<hr>\n<h4><strong>Limites<\/strong><\/h4>\n<ul>\n<li><strong>Niveau avanc\u00e9<\/strong>: Le cours suppose des connaissances pr\u00e9alables en mati\u00e8re d'AdOps, de publicit\u00e9 programmatique et de plateformes telles que Google Ad Manager. Il n'est pas adapt\u00e9 aux d\u00e9butants.<\/li>\n<li><strong>Une Niche<\/strong>: Principalement destin\u00e9 aux \u00e9diteurs et aux \u00e9quipes AdOps, avec une pertinence limit\u00e9e pour les entreprises qui ne sont pas des \u00e9diteurs.<\/li>\n<\/ul>\n<hr>\n<h4><strong>Verdict<\/strong><\/h4>\n<p class=\"translation-block\">Le cours d'optimisation publicitaire avanc\u00e9e de PubGuru change la donne pour les professionnels chevronn\u00e9s de l'AdOps et les \u00e9diteurs d\u00e9sireux d'am\u00e9liorer leurs comp\u00e9tences en mati\u00e8re d'optimisation des revenus. Bien qu'il ne s'adresse pas aux d\u00e9butants, il offre des perspectives inestimables \u00e0 ceux qui ont d\u00e9j\u00e0 des bases en gestion publicitaire. Soutenu par l'expertise de MonetizeMore, ce cours fournit un retour sur investissement significatif pour ceux qui sont s\u00e9rieux au sujet de la croissance des revenus publicitaires.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-70715b e-con-full e-flex e-con e-parent\" data-id=\"70715b\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-5120ce64 e-con-full mdw-turbulence-effect-blur e-flex e-con e-child\" data-id=\"5120ce64\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1b392f67 e-con-full e-flex e-con e-child\" data-id=\"1b392f67\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32b361d elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"32b361d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\nbody{\n    --smooth-scroll: true;\n    --fallback-circle: true;\n}\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 20px;\n}\n[class^='mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class^='mdw-turbulence-effect'].anim .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-image svg{\n    transition: all 1s cubic-bezier(0,.33,.07,1.03);\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 0;\n    white-space: nowrap;\n    max-width: unset !important;\n    display: flex;\n    justify-content: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading.show,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading.show,\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-heading,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] p,\n[class*=' mdw-turbulence-effect'] p{\n    margin-bottom: 0;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image svg{\n    position: absolute;\n    left: 0;\n    top: unset;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye image{\n    transform: none !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur g,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur g{\n    transform: scale(0.95);\n    transform-origin: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur image{\n    transform: scale(1.05) !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image img,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 0;\n}\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-image img,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    max-width: var(--container-widget-width, 100%) !important;\n}\n\n@media (max-width:767px){\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 10px;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading,\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    position: static !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    max-width: 100% !important;\n}\n}\n<\/style>\n<script src=\"https:\/\/code.jquery.com\/jquery-2.2.4.min.js\"><\/script>\n<script>\nif(!MDWNonce110){\nvar MDWNonce110 = true\n;(function($){\n\nvar selector = \"[class^='mdw-turbulence-effect'], [class*=' mdw-turbulence-effect']\",\n    image = [],\n    img = [],\n    title1 = [],\n    title2 = [],\n    heading1 = [],\n    heading2 = [],\n    windowHeight,\n    windowWidth,\n    imgWidth = [],\n    imgHeight = [],\n    imgOffset = [],\n    maxRadius = [],\n    translate = [],\n    type = [],\n    brightness = { start: 0.8, end: 1.0 },\n    scale = { start: 0.9, end: 1.0 },\n    isSafari,\n    fallbackCircle,\n    previousWidth\n        \nfunction getValue(el, prop){ return getComputedStyle(el[0]).getPropertyValue(prop) }\n\nfunction init(){\n$(selector).each(function(i){\n    var $this = $(this)\n    image[i] = $this.find('.elementor-widget-image')\n    img[i] = image[i].find('img')\n    title1[i] = $this.find('.elementor-widget-heading').eq(0)\n    title2[i] = $this.find('.elementor-widget-heading').eq(1)\n    heading1[i] = title1[i].find('.elementor-heading-title')\n    heading2[i] = title2[i].find('.elementor-heading-title')\n    $('body').append('<div class=\"mdw-100vh\" style=\"height: 100vh;display: none;\"><\/div>')\n    isSafari = \/^((?!chrome|android).)*safari\/i.test(navigator.userAgent)\n    fallbackCircle = getValue($('body'),'--fallback-circle') && getValue($('body'),'--fallback-circle') == 'true'\n})\n}\n\nfunction setValues(){\n\nwindowHeight = $('.mdw-100vh').height()\nwindowWidth = $(window).width()\n\n$(selector).each(function(i){\n    var $this = $(this)\n    \n    imgWidth[i] = img[i].width()\n    imgHeight[i] = img[i].height()\n    maxRadius[i] = Math.sqrt(Math.pow(imgWidth[i]\/2,2)+Math.pow(imgHeight[i]\/2,2))+10\n    if(isSafari && !fallbackCircle && maxRadius[i] > 850) maxRadius[i] = 850\n})\n}\n\nfunction getSrc(img) {\n    var srcset = img.attr('srcset'), src\n    if (srcset){\n        var sources = srcset.split(',').map(source => source.trim()),\n        largestImage = null,\n        largestWidth = 0\n    \n        sources.forEach(source => {\n            var [url, width] = source.split(\/\\s+\/),\n            widthValue = parseFloat(width.replace('w', ''))\n    \n            if (widthValue > largestWidth) {\n                largestWidth = widthValue\n                largestImage = url\n            }\n        })\n        src = largestImage\n    }else{\n        src = img.attr('src')\n    }\n    return src\n}\n\nfunction setSVG(){\n$(selector).each(function(i){\n    var $this = $(this),\n    imgNaturalWidth = img[i][0].naturalWidth,\n    imgNaturalHeight = img[i][0].naturalHeight,\n    imgContainer =  image[i].find('.elementor-widget-container'),\n    imgUrl = getSrc(img[i]),\n    className = $this.attr('class'),\n    classNameIndex = className.indexOf('mdw-turbulence-effect'),\n    shortClass = className.substring(classNameIndex, className.indexOf(' ',classNameIndex)),\n    values = shortClass.split('-'),\n    blurHTML = shortClass.search('blur') == -1 || windowWidth < 768 || isSafari ? '' : '<feGaussianBlur in=\"displacement\" stdDeviation=\"10\"><\/feGaussianBlur>',\n    shapeHTML = `<circle cx=\"50%\" cy=\"50%\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/circle>`,\n    eyeClass = '',\n    effectResolution = 0.03,\n    effectArea = 50,\n    effectOctave = 3,\n    effectHTML,\n    svgHTML\n    \n    values.forEach(function(value, index){\n        if(value=='resolution' && values[index+1] && !isNaN(values[index+1])){ effectResolution = parseFloat(values[index+1])*0.003 }\n        if(value=='area' && values[index+1] && !isNaN(values[index+1])){ effectArea = parseFloat(values[index+1])*5 }\n    })\n    \n    if(effectArea > 100) effectOctave = 1\n    \n    if(blurHTML){\n        image[i].addClass('blur')\n        effectResolution = 0.01\n        effectArea = 150\n        effectOctave = 3\n    }\n    \n    type[i] = 'circle'\n    if(shortClass.search('eye') != -1){\n        type[i] = 'eye'\n        image[i].addClass('eye')\n        effectResolution = 0.06\n        if(blurHTML) effectResolution = 0\n        effectArea = 50\n        shapeHTML = `<path d=\"M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${3*imgHeight[i]\/2 - 2*12} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${2*12 - imgHeight[i]\/2} 0 ${imgHeight[i]\/2}\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/path>`\n    }\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        effectHTML = ''\n    }else{\n        effectHTML = \n        `<defs>\n            <filter id=\"MDWFilter${i+1}\">\n                <feTurbulence type=\"fractalNoise\" baseFrequency=\"${effectResolution}\" numOctaves=\"${effectOctave}\" result=\"noise\"><\/feTurbulence>\n                \n                <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"${effectArea}\" xChannelSelector=\"R\" yChannelSelector=\"G\"><\/feDisplacementMap>\n                ${blurHTML}\n            <\/filter>\n            <mask id=\"MDWCircle${i+1}\">\n                ${shapeHTML}\n            <\/mask>\n        <\/defs>`\n    }\n    \n    svgHTML = \n    `<svg width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"0 0 ${imgWidth[i]} ${imgHeight[i]}\">\n        ${effectHTML}\n        <g mask=\"url(#MDWCircle${i+1})\">\n            <image href=\"${imgUrl}\" width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" style=\"transform: scale(${scale.start}); transform-origin: center center; filter: brightness(${brightness.start});\" preserveAspectRatio=\"xMidYMid slice\"><\/image>\n        <\/g>\n    <\/svg>`\n    \n    imgContainer.find('svg').remove()\n    imgContainer.append(svgHTML)\n})\n}\n\nfunction getOffset(el){\n    var left = 0, top = 0\n    do{\n      if (!isNaN(el.offsetLeft)) left += el.offsetLeft\n      if (!isNaN(el.offsetTop)) top += el.offsetTop\n    }while(el = el.offsetParent)\n    return { top, left }\n}\n\nfunction setInitTranslate(){\n\nvar scrollTop = $(window).scrollTop()\n    \n$(selector).each(function(i){\n    var $this = $(this),\n    H1Offset = getOffset(heading1[i][0]),\n    H2Offset = getOffset(heading2[i][0]),\n    imgOffset = getOffset(img[i][0]),\n    textGap = !isNaN(parseFloat(getValue($this, '--text-gap'))) ? parseFloat(getValue($this, '--text-gap')) : 20,\n    T1X,T1Y,T2X,T2Y\n    \n    T1X = - H1Offset.left + (windowWidth - heading1[i].width() - heading2[i].width() - textGap) \/ 2\n    T1Y = imgOffset.top - H1Offset.top + (imgHeight[i] - heading1[i].height())\/2\n    T2X = - H2Offset.left + (windowWidth + heading1[i].width() - heading2[i].width() + textGap) \/ 2\n    T2Y = imgOffset.top - H2Offset.top + (imgHeight[i] - heading2[i].height())\/2\n    \n    translate[i] = {T1X,T1Y,T2X,T2Y}\n})\n}\n\nfunction getScrollValue(imgOffset, imgHeight, startPercent, endPercent, inverse= false){\n    var start = startPercent\/100*windowHeight,\n    end = endPercent\/100*windowHeight,\n    scrollValue = (imgOffset.top+imgHeight\/2-start)\/(end - start),\n    value = Math.max(Math.min(scrollValue,1),0)\n        \n    if(inverse) value = 1 - value\n    return value\n}\n\nfunction revealImage(startPercent){\n    \nvar imgStartPercent = 90,\n    imgEndPercent = 60\n\n$(selector).each(function(i){\n    \n    imgOffset[i] = img[i][0].getBoundingClientRect()\n    \n    var svg = image[i].find('svg'),\n    svgCircle = svg.find('circle'),\n    svgPath = svg.find('path'),\n    svgGroup = svg.find('g'),\n    svgImage = svg.find('image'),\n    revealAmount = getScrollValue(imgOffset[i], imgHeight[i], imgStartPercent, imgEndPercent),\n    currentBrightness = brightness.start + (brightness.end - brightness.start)*revealAmount,\n    currentScale = scale.start + (scale.end - scale.start)*revealAmount,\n    curretRadius = maxRadius[i]*revealAmount\n    \n    svgImage.css({\n        'filter': `brightness(${currentBrightness})`,\n        'transform': `scale(${currentScale})`\n    })\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        if( type[i] == 'circle' ) {\n            svg.css('clip-path', `circle(${curretRadius}px at 50% 50%)`)\n        }else{\n            svg.css('clip-path', `ellipse(50% ${revealAmount*50}% at 50% 50%)`)\n        }\n    }else{\n        if( type[i] == 'circle' ) {\n            svgCircle.attr('r', curretRadius)    \n        }else{\n            svgGroup.attr('mask', `url(#MDWCircle${i+1})`)\n            svgPath.attr('d', `M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (imgHeight[i] - 2*12)*revealAmount} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (2*12 - imgHeight[i])*revealAmount} 0 ${imgHeight[i]\/2}`)\n        }\n    }\n})\n}\n\nfunction moveText(startPercent){\n    \nvar titleStartPercent = 90,\n    titleEndPercent = 50\n\n$(selector).each(function(i){\n    \n    var $this = $(this),\n    translateAmount = getScrollValue(imgOffset[i], imgHeight[i], titleStartPercent, titleEndPercent, true),\n    T1T = {x: translate[i].T1X*translateAmount, y: translate[i].T1Y*translateAmount}\n    T2T = {x: translate[i].T2X*translateAmount, y: translate[i].T2Y*translateAmount}\n    \n    title1[i].css('transform', `translate(${T1T.x}px, ${T1T.y}px)`)\n    title2[i].css('transform', `translate(${T2T.x}px, ${T2T.y}px)`)\n    title1[i].addClass('show')\n    title2[i].addClass('show')\n    setTimeout(function(){ $this.addClass('anim') }, 50)\n\n})\n}\n\nfunction scrollAnimation(){\n    revealImage()\n    moveText()\n}\n\nfunction runAnimation(e){\n    if(e.type=='load') init()\n    setValues()\n    setSVG()\n    setInitTranslate()\n    scrollAnimation()\n}\n\n$(document).ready(init)\n$(window).on('scroll', scrollAnimation)\n$(window).on('load resize', function(e){\n    if(e.type=='resize' && $(window).width() < 768 && $(window).width() == previousWidth) return\n    runAnimation(e)\n    setTimeout(function(){ runAnimation(e) }, 100)\n    setTimeout(function(){ runAnimation(e) }, 500)\n    setTimeout(function(){ runAnimation(e) }, 1000)\n    previousWidth = $(window).width()\n})\n\n})(jQuery)\n}\n<\/script>\n\n<!-- Smooth Scroll with Lenis JS -->\n\n<style>\nhtml.lenis, html.lenis body {\n  height: auto;\n}\n.lenis.lenis-smooth {\n  scroll-behavior: auto !important;\n}\n.lenis.lenis-smooth [data-lenis-prevent] {\n  overscroll-behavior: contain;\n}\n.lenis.lenis-stopped {\n  overflow: hidden;\n}\n.lenis.lenis-smooth iframe {\n  pointer-events: none;\n}\n<\/style>\n<script src=\"https:\/\/unpkg.com\/lenis@1.1.11\/dist\/lenis.min.js\"><\/script> \n<script>\n$(document).ready(function(){\n\nvar smoothScroll = getComputedStyle(document.body).getPropertyValue('--smooth-scroll'),\n    smoothScroll = smoothScroll && smoothScroll == 'true'\n\nif(smoothScroll){\n    var lenis = new Lenis()\n    function raf(time) {\n      lenis.raf(time)\n      requestAnimationFrame(raf)\n    }\n    requestAnimationFrame(raf)\n}\n})\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b358e9f elementor-widget elementor-widget-heading\" data-id=\"4b358e9f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Google<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71fea41f elementor-widget elementor-widget-heading\" data-id=\"71fea41f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">AdSense<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3aae0984 elementor-widget__width-initial elementor-absolute elementor-widget elementor-widget-text-editor\" data-id=\"3aae0984\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Google AdSense<\/strong> est une plateforme qui permet aux \u00e9diteurs de mon\u00e9tiser leur contenu en ligne en affichant des annonces. C'est l'un des moyens les plus simples et les plus populaires pour les petits et moyens \u00e9diteurs de gagner de l'argent gr\u00e2ce \u00e0 leurs plateformes num\u00e9riques.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fe101c7 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"7fe101c7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"225\" src=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/adsense.png\" class=\"attachment-large size-large wp-image-2779\" alt=\"\" srcset=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/adsense.png 450w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/adsense-300x150.png 300w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/adsense-18x9.png 18w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b66cf32 e-flex e-con-boxed e-con e-parent\" data-id=\"b66cf32\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7e3d7ad elementor-widget elementor-widget-text-editor\" data-id=\"7e3d7ad\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><strong>Cours de certification PubGuru AdSense : Un examen complet<\/strong><\/h3>\n<h4><strong>Vue d'ensemble<\/strong><\/h4>\n<p class=\"translation-block\">La formation de certification PubGuru Google Ad Exchange, propos\u00e9e par MonetizeMore, est con\u00e7ue pour les \u00e9diteurs, les professionnels de l'AdOps et les sp\u00e9cialistes du marketing num\u00e9rique qui souhaitent maximiser leurs revenus publicitaires en ma\u00eetrisant Google Ad Exchange (AdX). AdX est une place de march\u00e9 publicitaire programmatique de premier ordre qui offre des opportunit\u00e9s de revenus plus \u00e9lev\u00e9es qu'AdSense. Ce cours vise \u00e0 enseigner aux participants comment exploiter efficacement AdX, optimiser l'inventaire et obtenir de meilleurs r\u00e9sultats.<\/p>\n<hr>\n<h4><strong>Ce que vous apprendrez<\/strong><\/h4>\n<ol>\n<li>\n<p><strong>AdSense principes de base et configuration du compte<\/strong>:<\/p>\n<ul>\n<li>Une pr\u00e9sentation compl\u00e8te de l'installation et de la configuration de votre compte AdSense.<\/li>\n<li>Comprendre l'\u00e9ligibilit\u00e9 \u00e0 AdSense, les politiques et comment \u00e9viter la suspension du compte.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Optimisation de l'emplacement et de la pr\u00e9sentation des annonces<\/strong>:<\/p>\n<ul>\n<li>Conseils sur l'emplacement des annonces pour une visibilit\u00e9 et un engagement maximums.<\/li>\n<li>Utilisation de cartes thermiques et de donn\u00e9es sur le comportement des utilisateurs pour guider les d\u00e9cisions relatives \u00e0 la mise en page des annonces.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Strat\u00e9gies de mon\u00e9tisation AdSense<\/strong>:<\/p>\n<ul>\n<li>Optimisation des tailles, formats et types d'annonces<\/li>\n<li>Mise en place et am\u00e9lioration des annonces automatiques pour le placement automatis\u00e9 des annonces.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Troubleshooting<\/strong>:<\/p>\n<ul>\n<li>Comment interpr\u00e9ter les rapports AdSense et identifier les goulots d'\u00e9tranglement en mati\u00e8re de revenus.<\/li>\n<li>R\u00e9solution de probl\u00e8mes courants tels que des CPM ou des taux de remplissage faibles.<\/li><\/ul><\/li>\n<\/ol>\n<hr>\n<h4><strong>Points Forts<\/strong><\/h4>\n<ul>\n<li class=\"translation-block\">Convivialit\u00e9 pour les d\u00e9butants : Le cours est accessible aux nouveaux \u00e9diteurs, couvrant les principes fondamentaux d'AdSense sans jargon technique excessif.<\/li>\n<li class=\"translation-block\">Conseils pratiques d'optimisation : Offre des strat\u00e9gies concr\u00e8tes pour augmenter les revenus gr\u00e2ce \u00e0 des conseils en mati\u00e8re de placement et de mise en page.<\/li>\n<li class=\"translation-block\">Exemples concrets : Inclut des \u00e9tudes de cas et des d\u00e9monstrations pratiques qui rendent le contenu facile \u00e0 appliquer.<\/li>\n<\/ul>\n<hr>\n<h4><strong>Limites<\/strong><\/h4>\n<ul>\n<li class=\"translation-block\">Ax\u00e9 sur AdSense : Le cours est limit\u00e9 \u00e0 AdSense et ne couvre pas les m\u00e9thodes de mon\u00e9tisation avanc\u00e9es telles que AdX ou les ench\u00e8res par en-t\u00eate.<\/li>\n<li class=\"translation-block\">Public restreint : Principalement destin\u00e9 aux \u00e9diteurs, il peut manquer de profondeur pour les \u00e9diteurs plus importants qui ont d\u00e9j\u00e0 d\u00e9pass\u00e9 AdSense.<\/li>\n<li class=\"translation-block\">Pas pour les utilisateurs avanc\u00e9s : Ceux qui connaissent d\u00e9j\u00e0 les bases d'AdSense peuvent trouver une partie du contenu r\u00e9p\u00e9titive.<\/li>\n<\/ul>\n<hr>\n<h4><strong>Verdict<\/strong><\/h4>\n<p class=\"translation-block\">Le cours de certification PubGuru AdSense est indispensable pour les \u00e9diteurs d\u00e9butants ou interm\u00e9diaires qui souhaitent tirer le meilleur parti de Google AdSense. Il propose des strat\u00e9gies pratiques et faciles \u00e0 appliquer et met l'accent sur le respect des r\u00e8gles, ce qui permet aux participants d'optimiser leurs revenus sans mettre leurs comptes en p\u00e9ril. Bien que cette formation ne soit pas id\u00e9ale pour les professionnels AdOps avanc\u00e9s, elle constitue un excellent point de d\u00e9part pour tous ceux qui cherchent \u00e0 augmenter leurs revenus AdSense en toute confiance.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e17eab9 e-con-full e-flex e-con e-parent\" data-id=\"e17eab9\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-5de3902 e-con-full mdw-turbulence-effect-area-25 e-flex e-con e-child\" data-id=\"5de3902\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-60b6a7b elementor-widget elementor-widget-heading\" data-id=\"60b6a7b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Ad<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-650ca6b elementor-widget__width-inherit elementor-widget elementor-widget-image\" data-id=\"650ca6b\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/ex-1024x576.png\" class=\"attachment-large size-large wp-image-2775\" alt=\"\" srcset=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/ex-1024x576.png 1024w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/ex-300x169.png 300w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/ex-768x432.png 768w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/ex-18x10.png 18w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/ex.png 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fcb9a9f elementor-widget elementor-widget-heading\" data-id=\"fcb9a9f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Exchange<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e5c6faf elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"e5c6faf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Google Ad Exchange (AdX) est une place de march\u00e9 publicitaire programmatique o\u00f9 les \u00e9diteurs et les annonceurs peuvent acheter et vendre des espaces publicitaires en temps r\u00e9el par le biais d'ench\u00e8res automatis\u00e9es. Il s'agit d'une plateforme plus avanc\u00e9e qu'AdSense, qui s'adresse aux grands \u00e9diteurs et aux entreprises disposant d'un inventaire publicitaire de qualit\u00e9.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84cd801 elementor-widget elementor-widget-text-editor\" data-id=\"84cd801\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><strong>Formation PubGuru Google Ad Exchange : Un examen complet<\/strong><\/h3>\n<h4><strong>Vue d'ensemble<\/strong><\/h4>\n<p class=\"translation-block\">La formation de PubGuru Google Ad Exchange, propos\u00e9e par MonetizeMore, est con\u00e7ue pour les \u00e9diteurs, les professionnels de l'AdOps et les sp\u00e9cialistes du marketing num\u00e9rique qui souhaitent maximiser leurs revenus publicitaires en ma\u00eetrisant Google Ad Exchange (AdX). AdX est une place de march\u00e9 publicitaire programmatique de premier ordre qui offre des opportunit\u00e9s de revenus plus \u00e9lev\u00e9es qu'AdSense. Ce cours vise \u00e0 enseigner aux participants comment exploiter efficacement AdX, optimiser l'inventaire et obtenir de meilleurs r\u00e9sultats.<\/p>\n<hr>\n<h4><strong>Ce que vous apprendrez<\/strong><\/h4>\n<ol>\n<li>\n<p><strong>Comprendre les bases d'AdX<\/strong>:<\/p>\n<ul>\n<li>En quoi AdX diff\u00e8re d'AdSense et d'autres r\u00e9seaux publicitaires.<\/li>\n<li>Les avantages d'AdX pour les \u00e9diteurs premium.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Configuration et mise en \u0153uvre d'AdX<\/strong>:<\/p>\n<ul>\n<li>Guides \u00e9tape par \u00e9tape pour int\u00e9grer AdX \u00e0 votre site Web ou \u00e0 votre application.<\/li>\n<li>Meilleures pratiques pour configurer les r\u00e8gles de tarification, les contr\u00f4les de blocage, etc.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Strat\u00e9gies d'optimisation des revenus :<\/strong>:<\/p>\n<ul>\n<li>Troubleshooting<\/li>\n<li>Utilisation de l'analyse pour prendre des d\u00e9cisions bas\u00e9es sur des donn\u00e9es.<\/li><\/ul><\/li>\n<\/ol>\n<hr>\n<h4><strong>Points Forts<\/strong><\/h4>\n<ul>\n<li class=\"translation-block\">Un contenu complet : Le cours ne se contente pas de survoler la surface mais plonge en profondeur dans le fonctionnement d'AdX, ce qui le rend pr\u00e9cieux tant pour les d\u00e9butants que pour les professionnels exp\u00e9riment\u00e9s de l'AdOps.<\/li>\n<li class=\"translation-block\">Objectif pratique : Inclut des conseils pratiques et des sc\u00e9narios du monde r\u00e9el, tels que la fa\u00e7on d'am\u00e9liorer les CPM et d'\u00e9quilibrer les taux de remplissage.<\/li>\n<li class=\"translation-block\">Ax\u00e9 sur l'\u00e9diteur : Contrairement aux cours g\u00e9n\u00e9riques, celui-ci r\u00e9pond sp\u00e9cifiquement aux besoins des \u00e9diteurs qui cherchent \u00e0 augmenter leurs revenus publicitaires.<\/li>\n<\/ul>\n<hr>\n<h4><strong>Limites<\/strong><\/h4>\n<ul>\n<li class=\"translation-block\">Une niche : Le cours est fortement orient\u00e9 vers les \u00e9diteurs qui travaillent d\u00e9j\u00e0 avec Google Ad Exchange ou qui sont \u00e9ligibles \u00e0 ce programme, ce qui limite sa pertinence pour les utilisateurs d'AdSense \u00e0 plus petite \u00e9chelle.<\/li>\n<li class=\"translation-block\">Reconnaissance : Bien qu'utile dans le domaine des AdOps, la certification n'est pas aussi universellement reconnue que le badge Google Certified Publishing Partner (GCPP).<\/li>\n<\/ul>\n<hr>\n<h4><strong>Verdict<\/strong><\/h4>\n<p class=\"translation-block\">Le cours de certification PubGuru Google Ad Exchange est indispensable pour les \u00e9diteurs et les professionnels de l'AdOps qui souhaitent ma\u00eetriser Google Ad Exchange et augmenter leurs revenus programmatiques. Bien qu'il ne soit pas adapt\u00e9 aux utilisateurs occasionnels ou \u00e0 ceux qui ne sont pas familiers avec l'AdTech avanc\u00e9e, il s'agit d'un cours tr\u00e8s pratique et sp\u00e9cialis\u00e9 pour ceux qui travaillent dans l'industrie.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-21dd7de8 e-con-full e-flex e-con e-parent\" data-id=\"21dd7de8\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-3d333faa mdw-turbulence-effect-eye e-con-full e-flex e-con e-child\" data-id=\"3d333faa\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-67c41c48 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"67c41c48\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\nbody{\n    --smooth-scroll: true;\n    --fallback-circle: true;\n}\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 20px;\n}\n[class^='mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-heading,\n[class^='mdw-turbulence-effect'].anim .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'].anim .elementor-widget-image svg{\n    transition: all 1s cubic-bezier(0,.33,.07,1.03);\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 0;\n    white-space: nowrap;\n    max-width: unset !important;\n    display: flex;\n    justify-content: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading.show,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading.show,\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-heading,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] p,\n[class*=' mdw-turbulence-effect'] p{\n    margin-bottom: 0;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image svg,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image svg{\n    position: absolute;\n    left: 0;\n    top: unset;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye image{\n    transform: none !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur g,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur g{\n    transform: scale(0.95);\n    transform-origin: center;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image.eye.blur image,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image.eye.blur image{\n    transform: scale(1.05) !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-image img,\n[class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 0;\n}\nhtml.elementor-html [class^='mdw-turbulence-effect'] .elementor-widget-image img,\nhtml.elementor-html [class*=' mdw-turbulence-effect'] .elementor-widget-image img{\n    opacity: 1;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    max-width: var(--container-widget-width, 100%) !important;\n}\n\n@media (max-width:767px){\n[class^='mdw-turbulence-effect'],\n[class*=' mdw-turbulence-effect']{\n    --text-gap: 10px;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading,\n[class^='mdw-turbulence-effect'] .elementor-widget-text-editor,\n[class*=' mdw-turbulence-effect'] .elementor-widget-text-editor{\n    position: static !important;\n}\n[class^='mdw-turbulence-effect'] .elementor-widget-heading,\n[class*=' mdw-turbulence-effect'] .elementor-widget-heading{\n    max-width: 100% !important;\n}\n}\n<\/style>\n<script src=\"https:\/\/code.jquery.com\/jquery-2.2.4.min.js\"><\/script>\n<script>\nif(!MDWNonce110){\nvar MDWNonce110 = true\n;(function($){\n\nvar selector = \"[class^='mdw-turbulence-effect'], [class*=' mdw-turbulence-effect']\",\n    image = [],\n    img = [],\n    title1 = [],\n    title2 = [],\n    heading1 = [],\n    heading2 = [],\n    windowHeight,\n    windowWidth,\n    imgWidth = [],\n    imgHeight = [],\n    imgOffset = [],\n    maxRadius = [],\n    translate = [],\n    type = [],\n    brightness = { start: 0.8, end: 1.0 },\n    scale = { start: 0.9, end: 1.0 },\n    isSafari,\n    fallbackCircle,\n    previousWidth\n        \nfunction getValue(el, prop){ return getComputedStyle(el[0]).getPropertyValue(prop) }\n\nfunction init(){\n$(selector).each(function(i){\n    var $this = $(this)\n    image[i] = $this.find('.elementor-widget-image')\n    img[i] = image[i].find('img')\n    title1[i] = $this.find('.elementor-widget-heading').eq(0)\n    title2[i] = $this.find('.elementor-widget-heading').eq(1)\n    heading1[i] = title1[i].find('.elementor-heading-title')\n    heading2[i] = title2[i].find('.elementor-heading-title')\n    $('body').append('<div class=\"mdw-100vh\" style=\"height: 100vh;display: none;\"><\/div>')\n    isSafari = \/^((?!chrome|android).)*safari\/i.test(navigator.userAgent)\n    fallbackCircle = getValue($('body'),'--fallback-circle') && getValue($('body'),'--fallback-circle') == 'true'\n})\n}\n\nfunction setValues(){\n\nwindowHeight = $('.mdw-100vh').height()\nwindowWidth = $(window).width()\n\n$(selector).each(function(i){\n    var $this = $(this)\n    \n    imgWidth[i] = img[i].width()\n    imgHeight[i] = img[i].height()\n    maxRadius[i] = Math.sqrt(Math.pow(imgWidth[i]\/2,2)+Math.pow(imgHeight[i]\/2,2))+10\n    if(isSafari && !fallbackCircle && maxRadius[i] > 850) maxRadius[i] = 850\n})\n}\n\nfunction getSrc(img) {\n    var srcset = img.attr('srcset'), src\n    if (srcset){\n        var sources = srcset.split(',').map(source => source.trim()),\n        largestImage = null,\n        largestWidth = 0\n    \n        sources.forEach(source => {\n            var [url, width] = source.split(\/\\s+\/),\n            widthValue = parseFloat(width.replace('w', ''))\n    \n            if (widthValue > largestWidth) {\n                largestWidth = widthValue\n                largestImage = url\n            }\n        })\n        src = largestImage\n    }else{\n        src = img.attr('src')\n    }\n    return src\n}\n\nfunction setSVG(){\n$(selector).each(function(i){\n    var $this = $(this),\n    imgNaturalWidth = img[i][0].naturalWidth,\n    imgNaturalHeight = img[i][0].naturalHeight,\n    imgContainer =  image[i].find('.elementor-widget-container'),\n    imgUrl = getSrc(img[i]),\n    className = $this.attr('class'),\n    classNameIndex = className.indexOf('mdw-turbulence-effect'),\n    shortClass = className.substring(classNameIndex, className.indexOf(' ',classNameIndex)),\n    values = shortClass.split('-'),\n    blurHTML = shortClass.search('blur') == -1 || windowWidth < 768 || isSafari ? '' : '<feGaussianBlur in=\"displacement\" stdDeviation=\"10\"><\/feGaussianBlur>',\n    shapeHTML = `<circle cx=\"50%\" cy=\"50%\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/circle>`,\n    eyeClass = '',\n    effectResolution = 0.03,\n    effectArea = 50,\n    effectOctave = 3,\n    effectHTML,\n    svgHTML\n    \n    values.forEach(function(value, index){\n        if(value=='resolution' && values[index+1] && !isNaN(values[index+1])){ effectResolution = parseFloat(values[index+1])*0.003 }\n        if(value=='area' && values[index+1] && !isNaN(values[index+1])){ effectArea = parseFloat(values[index+1])*5 }\n    })\n    \n    if(effectArea > 100) effectOctave = 1\n    \n    if(blurHTML){\n        image[i].addClass('blur')\n        effectResolution = 0.01\n        effectArea = 150\n        effectOctave = 3\n    }\n    \n    type[i] = 'circle'\n    if(shortClass.search('eye') != -1){\n        type[i] = 'eye'\n        image[i].addClass('eye')\n        effectResolution = 0.06\n        if(blurHTML) effectResolution = 0\n        effectArea = 50\n        shapeHTML = `<path d=\"M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${3*imgHeight[i]\/2 - 2*12} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${2*12 - imgHeight[i]\/2} 0 ${imgHeight[i]\/2}\" fill=\"white\" class=\"mask\" style=\"filter: url(#MDWFilter${i+1});\"><\/path>`\n    }\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        effectHTML = ''\n    }else{\n        effectHTML = \n        `<defs>\n            <filter id=\"MDWFilter${i+1}\">\n                <feTurbulence type=\"fractalNoise\" baseFrequency=\"${effectResolution}\" numOctaves=\"${effectOctave}\" result=\"noise\"><\/feTurbulence>\n                \n                <feDisplacementMap in=\"SourceGraphic\" in2=\"noise\" scale=\"${effectArea}\" xChannelSelector=\"R\" yChannelSelector=\"G\"><\/feDisplacementMap>\n                ${blurHTML}\n            <\/filter>\n            <mask id=\"MDWCircle${i+1}\">\n                ${shapeHTML}\n            <\/mask>\n        <\/defs>`\n    }\n    \n    svgHTML = \n    `<svg width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"0 0 ${imgWidth[i]} ${imgHeight[i]}\">\n        ${effectHTML}\n        <g mask=\"url(#MDWCircle${i+1})\">\n            <image href=\"${imgUrl}\" width=\"${imgWidth[i]}\" height=\"${imgHeight[i]}\" style=\"transform: scale(${scale.start}); transform-origin: center center; filter: brightness(${brightness.start});\" preserveAspectRatio=\"xMidYMid slice\"><\/image>\n        <\/g>\n    <\/svg>`\n    \n    imgContainer.find('svg').remove()\n    imgContainer.append(svgHTML)\n})\n}\n\nfunction getOffset(el){\n    var left = 0, top = 0\n    do{\n      if (!isNaN(el.offsetLeft)) left += el.offsetLeft\n      if (!isNaN(el.offsetTop)) top += el.offsetTop\n    }while(el = el.offsetParent)\n    return { top, left }\n}\n\nfunction setInitTranslate(){\n\nvar scrollTop = $(window).scrollTop()\n    \n$(selector).each(function(i){\n    var $this = $(this),\n    H1Offset = getOffset(heading1[i][0]),\n    H2Offset = getOffset(heading2[i][0]),\n    imgOffset = getOffset(img[i][0]),\n    textGap = !isNaN(parseFloat(getValue($this, '--text-gap'))) ? parseFloat(getValue($this, '--text-gap')) : 20,\n    T1X,T1Y,T2X,T2Y\n    \n    T1X = - H1Offset.left + (windowWidth - heading1[i].width() - heading2[i].width() - textGap) \/ 2\n    T1Y = imgOffset.top - H1Offset.top + (imgHeight[i] - heading1[i].height())\/2\n    T2X = - H2Offset.left + (windowWidth + heading1[i].width() - heading2[i].width() + textGap) \/ 2\n    T2Y = imgOffset.top - H2Offset.top + (imgHeight[i] - heading2[i].height())\/2\n    \n    translate[i] = {T1X,T1Y,T2X,T2Y}\n})\n}\n\nfunction getScrollValue(imgOffset, imgHeight, startPercent, endPercent, inverse= false){\n    var start = startPercent\/100*windowHeight,\n    end = endPercent\/100*windowHeight,\n    scrollValue = (imgOffset.top+imgHeight\/2-start)\/(end - start),\n    value = Math.max(Math.min(scrollValue,1),0)\n        \n    if(inverse) value = 1 - value\n    return value\n}\n\nfunction revealImage(startPercent){\n    \nvar imgStartPercent = 90,\n    imgEndPercent = 60\n\n$(selector).each(function(i){\n    \n    imgOffset[i] = img[i][0].getBoundingClientRect()\n    \n    var svg = image[i].find('svg'),\n    svgCircle = svg.find('circle'),\n    svgPath = svg.find('path'),\n    svgGroup = svg.find('g'),\n    svgImage = svg.find('image'),\n    revealAmount = getScrollValue(imgOffset[i], imgHeight[i], imgStartPercent, imgEndPercent),\n    currentBrightness = brightness.start + (brightness.end - brightness.start)*revealAmount,\n    currentScale = scale.start + (scale.end - scale.start)*revealAmount,\n    curretRadius = maxRadius[i]*revealAmount\n    \n    svgImage.css({\n        'filter': `brightness(${currentBrightness})`,\n        'transform': `scale(${currentScale})`\n    })\n    \n    if( fallbackCircle && (windowWidth < 768 || isSafari) ){\n        if( type[i] == 'circle' ) {\n            svg.css('clip-path', `circle(${curretRadius}px at 50% 50%)`)\n        }else{\n            svg.css('clip-path', `ellipse(50% ${revealAmount*50}% at 50% 50%)`)\n        }\n    }else{\n        if( type[i] == 'circle' ) {\n            svgCircle.attr('r', curretRadius)    \n        }else{\n            svgGroup.attr('mask', `url(#MDWCircle${i+1})`)\n            svgPath.attr('d', `M 0 ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (imgHeight[i] - 2*12)*revealAmount} ${imgWidth[i]} ${imgHeight[i]\/2} Q ${imgWidth[i]\/2} ${imgHeight[i]\/2 + (2*12 - imgHeight[i])*revealAmount} 0 ${imgHeight[i]\/2}`)\n        }\n    }\n})\n}\n\nfunction moveText(startPercent){\n    \nvar titleStartPercent = 90,\n    titleEndPercent = 50\n\n$(selector).each(function(i){\n    \n    var $this = $(this),\n    translateAmount = getScrollValue(imgOffset[i], imgHeight[i], titleStartPercent, titleEndPercent, true),\n    T1T = {x: translate[i].T1X*translateAmount, y: translate[i].T1Y*translateAmount}\n    T2T = {x: translate[i].T2X*translateAmount, y: translate[i].T2Y*translateAmount}\n    \n    title1[i].css('transform', `translate(${T1T.x}px, ${T1T.y}px)`)\n    title2[i].css('transform', `translate(${T2T.x}px, ${T2T.y}px)`)\n    title1[i].addClass('show')\n    title2[i].addClass('show')\n    setTimeout(function(){ $this.addClass('anim') }, 50)\n\n})\n}\n\nfunction scrollAnimation(){\n    revealImage()\n    moveText()\n}\n\nfunction runAnimation(e){\n    if(e.type=='load') init()\n    setValues()\n    setSVG()\n    setInitTranslate()\n    scrollAnimation()\n}\n\n$(document).ready(init)\n$(window).on('scroll', scrollAnimation)\n$(window).on('load resize', function(e){\n    if(e.type=='resize' && $(window).width() < 768 && $(window).width() == previousWidth) return\n    runAnimation(e)\n    setTimeout(function(){ runAnimation(e) }, 100)\n    setTimeout(function(){ runAnimation(e) }, 500)\n    setTimeout(function(){ runAnimation(e) }, 1000)\n    previousWidth = $(window).width()\n})\n\n})(jQuery)\n}\n<\/script>\n\n<!-- Smooth Scroll with Lenis JS -->\n\n<style>\nhtml.lenis, html.lenis body {\n  height: auto;\n}\n.lenis.lenis-smooth {\n  scroll-behavior: auto !important;\n}\n.lenis.lenis-smooth [data-lenis-prevent] {\n  overscroll-behavior: contain;\n}\n.lenis.lenis-stopped {\n  overflow: hidden;\n}\n.lenis.lenis-smooth iframe {\n  pointer-events: none;\n}\n<\/style>\n<script src=\"https:\/\/unpkg.com\/lenis@1.1.11\/dist\/lenis.min.js\"><\/script> \n<script>\n$(document).ready(function(){\n\nvar smoothScroll = getComputedStyle(document.body).getPropertyValue('--smooth-scroll'),\n    smoothScroll = smoothScroll && smoothScroll == 'true'\n\nif(smoothScroll){\n    var lenis = new Lenis()\n    function raf(time) {\n      lenis.raf(time)\n      requestAnimationFrame(raf)\n    }\n    requestAnimationFrame(raf)\n}\n})\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b09dc94 elementor-absolute elementor-widget elementor-widget-heading\" data-id=\"6b09dc94\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">CM<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-258c5ab2 elementor-widget elementor-widget-image\" data-id=\"258c5ab2\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/logo.png\" class=\"attachment-large size-large wp-image-2868\" alt=\"\" srcset=\"https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/logo.png 300w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/logo-150x150.png 150w, https:\/\/elijahp.com\/wp-content\/uploads\/2025\/01\/logo-12x12.png 12w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15b13e83 elementor-absolute elementor-widget elementor-widget-heading\" data-id=\"15b13e83\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">360<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-26fc1bbe elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"26fc1bbe\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Senator We Run Ads est une plateforme de formation destin\u00e9e aux professionnels du marketing digital. La plateforme offre une vari\u00e9t\u00e9 de cours en ligne visant \u00e0 aider les individus \u00e0 devenir des sp\u00e9cialistes du marketing.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3926345 elementor-widget elementor-widget-text-editor\" data-id=\"3926345\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><strong>Aper\u00e7u du cours<\/strong><\/h3>\n<p class=\"translation-block\">Ce cours se concentre sur la ma\u00eetrise de Campaign Manager 360 (CM360) de Google, un outil essentiel dans l'\u00e9cosyst\u00e8me de la publicit\u00e9 programmatique. Il s'adresse aux d\u00e9butants en marketing num\u00e9rique et \u00e0 ceux qui souhaitent se sp\u00e9cialiser dans la publicit\u00e9 programmatique et les op\u00e9rations publicitaires.<\/p>\n<p>Le cours promet d'enseigner aux \u00e9tudiants tout ce qu'il faut savoir, des bases de CM360 aux flux de trafic avanc\u00e9s, en passant par les campagnes de remarketing et les configurations de balises floodlight. La structure est claire, \u00e9tape par \u00e9tape, et pratique.<\/p>\n<hr>\n<h3><strong>Ce que vous apprendrez<\/strong><\/h3>\n<ol>\n<li>\n<p><strong>Introduction \u00e0 CM360<\/strong><br>Une compr\u00e9hension fondamentale de CM360 et de son r\u00f4le dans la publicit\u00e9 programmatique.<\/p>\n<\/li>\n<li>\n<p><strong>Comment CM360 s'int\u00e8gre dans le programmatique<\/strong><br>Explique comment CM360 s'int\u00e8gre avec des outils tels que Google Ads, Display &amp; Video 360, et d'autres parties de l'\u00e9cosyst\u00e8me.<\/p>\n<\/li>\n<li>\n<p><strong>Trafficking<\/strong><br>Couvre le processus de configuration des annonceurs, des campagnes, des placements, des cr\u00e9as et des tags.<\/p>\n<\/li>\n<li>\n<p><strong>Floodlight et campagnes de remarketing<\/strong><br>D\u00e9monstrations pratiques du tagage et remarketing, \u00e9l\u00e9ments cl\u00e9s du suivi des performances et du ciblage de l'audience.<\/p>\n<\/li>\n<li>\n<p><strong>Conseils et Astuces<\/strong><br>Des conseils utiles pour optimiser les campagnes, \u00e9viter les erreurs et tirer parti de CM360 pour les rapports et les informations.<\/p>\n<\/li>\n<\/ol>\n<hr>\n<h3><strong>Avantages de la formation<\/strong><\/h3>\n<ul>\n<li class=\"translation-block\">Convivialit\u00e9 pour les d\u00e9butants : Les concepts sont pr\u00e9sent\u00e9s de mani\u00e8re claire, ce qui facilite la t\u00e2che des novices en mati\u00e8re de CM360.<\/li>\n<li class=\"translation-block\">D\u00e9monstrations pratiques : Les exemples r\u00e9el et les flux de travail sont mis en avant, ce qui est essentiel pour ma\u00eetriser des outils tels que CM360.<\/li>\n<li class=\"translation-block\">Acc\u00e8s \u00e0 vie : Vous pouvez revisiter le cours \u00e0 chaque fois que vous avez besoin de rafra\u00eechir vos comp\u00e9tences ou de v\u00e9rifier les mises \u00e0 jour.<\/li>\n<\/ul>\n<h3><strong>Les inconv\u00e9nients<\/strong><\/h3>\n<ul>\n<li class=\"translation-block\">Limit\u00e9 \u00e0 CM360 : Bien que le cours traite en profondeur de CM360, il peut sembler trop \u00e9troit pour quelqu'un qui cherche une vue d'ensemble programmatique plus large (par exemple, DV360, Google Ads).<\/li>\n<li class=\"translation-block\">Le rythme : Pour ceux qui ont d\u00e9j\u00e0 de l'exp\u00e9rience avec CM360, le rythme peut sembler un peu lent dans les premi\u00e8res sections.<\/li>\n<\/ul>\n<hr>\n<h3><strong>Bilan G\u00e9n\u00e9ral<\/strong><\/h3>\n<p><strong>\u00c9valuation<\/strong>: \u2605\u2605\u2605\u2605\u2606 (4.5\/5)<br>Le cours CM360 d'Ovais Ahmad est fortement recommand\u00e9 pour sa clart\u00e9, son aspect pratique et sa profondeur. Il est particuli\u00e8rement pr\u00e9cieux pour ceux qui commencent leur voyage dans la publicit\u00e9 programmatique ou qui cherchent \u00e0 se sp\u00e9cialiser dans CM360. Le cours remplit une niche importante dans la formation en marketing num\u00e9rique et fournit des comp\u00e9tences qui sont imm\u00e9diatement applicables dans un cadre professionnel.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d64d02 elementor-widget elementor-widget-button\" data-id=\"2d64d02\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#2\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Faire D\u00e9filer<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-49ad667 elementor-widget elementor-widget-menu-anchor\" data-id=\"49ad667\" data-element_type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"1\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Programmatic Advertising: Books &amp; Courses Scroll Down Ad Operations A comprehensive book on the world of programmatic advertising Book Review: Introduction to Programmatic Advertising by Dominik Kosorin In the fast-paced world of digital marketing, programmatic advertising has become a game-changer, but the complexities of its ecosystem can intimidate newcomers. Enter Dominik Kosorin\u2019s Introduction to Programmatic &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/elijahp.com\/fr\/programmatic\/\"> <span class=\"screen-reader-text\">Publicit\u00e9 Programmatique<\/span> Lire la suite\u00a0\u00bb<\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"class_list":["post-2698","page","type-page","status-publish","hentry"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/pages\/2698","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/comments?post=2698"}],"version-history":[{"count":250,"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/pages\/2698\/revisions"}],"predecessor-version":[{"id":3563,"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/pages\/2698\/revisions\/3563"}],"wp:attachment":[{"href":"https:\/\/elijahp.com\/fr\/wp-json\/wp\/v2\/media?parent=2698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}