{"id":1772,"date":"2023-09-14T17:51:10","date_gmt":"2023-09-14T17:51:10","guid":{"rendered":"https:\/\/abdulazizgolca.com\/blog\/?p=1772"},"modified":"2023-09-15T07:18:36","modified_gmt":"2023-09-15T07:18:36","slug":"pmax-kampansinda-spam-formlar-nasil-engellenir","status":"publish","type":"post","link":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/","title":{"rendered":"Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir?"},"content":{"rendered":"\n<p>Performans Max kampanyalar\u0131, E-ticaret odakl\u0131 kampanyalarda iyi sonu\u00e7lar versede, potansiyel m\u00fc\u015fteri kampanyalar\u0131nda ayn\u0131 ba\u015far\u0131y\u0131 elde etmek olduk\u00e7a zor.<\/p>\n\n\n\n<p>E-ticarette, bir sat\u0131n alma etkinli\u011fi i\u015fleminin sonunu ifade ederken, bir potansiyel m\u00fc\u015fterinin olu\u015fturulmas\u0131 sat\u0131\u015f s\u00fcrecinin ba\u015flang\u0131c\u0131n\u0131 temsil eder. Sadece bir formun doldurulmu\u015f olmas\u0131, onun kaliteli bir potansiyel m\u00fc\u015fteri oldu\u011fu anlam\u0131na gelmez.<\/p>\n\n\n\n<p>Kurdu\u011fum potansiyel m\u00fc\u015fteri odakl\u0131 PMax kampanyalar\u0131nda, ya do\u011frudan spam ba\u015fvurularla kar\u015f\u0131la\u015f\u0131yorum ya da ba\u015flang\u0131\u00e7ta kaliteli birka\u00e7 ba\u015fvuru elde ettikten sonra kampanyam spam ba\u015fvurularla dolduruluyor. Bunun nedeni, teklif stratejisinin algoritmay\u0131 ya en fazla say\u0131da ba\u015fvuruyu elde etmeye ya da belirlenen Hedef EBM&#8217;ye uygun ba\u015fvurular\u0131 getirmeye \u00e7al\u0131\u015fmas\u0131d\u0131r. Algoritma, bir ba\u015fvurunun spam olup olmad\u0131\u011f\u0131n\u0131 ay\u0131rt edemedi\u011fi i\u00e7in zamanla daha d\u00fc\u015f\u00fck maliyetle elde edilebilecek spam ba\u015fvurulara y\u00f6neliyor.<\/p>\n\n\n\n<p>Bu sorunu \u00e7\u00f6zmek i\u00e7in, \u00f6ncelikle spam botlar\u0131n\u0131 engellememiz gerekiyor. Spam botlar\u0131n ba\u015far\u0131l\u0131r bir \u015fekilde engellemesiyle, algoritman\u0131n kaliteli ve do\u011fru ba\u015fvurulara odaklanmas\u0131n\u0131 sa\u011flayabiliriz.<\/p>\n\n\n\n<p>Bu yaz\u0131da, PMax kampanyalar\u0131m\u0131z\u0131n d\u00f6n\u00fc\u015f\u00fcm alanlar\u0131na nas\u0131l <strong>Captcha<\/strong> (robot engelleme g\u00fcvenlik \u00f6nlemi) ekleyece\u011fimizden bahsedece\u011fim.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Captcha Nedir?<\/strong> <\/h2>\n\n\n\n<p>CAPTCHA&#8217;lar, bir kullan\u0131c\u0131n\u0131n bir web sitesine veya hizmete eri\u015fimini do\u011frulamak i\u00e7in kullan\u0131l\u0131rken, k\u00f6t\u00fc niyetli yaz\u0131l\u0131mlar\u0131n ve otomatik botlar\u0131n bu eri\u015fimi k\u00f6t\u00fc ama\u00e7l\u0131 olarak kullanmas\u0131n\u0131 engellemeye yard\u0131mc\u0131 olur. Bir\u00e7ok capthca t\u00fcr\u00fc ve varyasyonu vard\u0131r.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Metin CAPTCHA: Metin yazma do\u011frulama.<\/li>\n\n\n\n<li>Resim CAPTCHA: G\u00f6rsel nesne se\u00e7imi.<\/li>\n\n\n\n<li>Matematiksel CAPTCHA: Matematik problemleri.<\/li>\n\n\n\n<li>Zaman Tabanl\u0131 CAPTCHA: Zaman s\u0131n\u0131rl\u0131 g\u00f6revler.<\/li>\n\n\n\n<li>\u0130nteraktif CAPTCHA: Etkile\u015fimli g\u00f6revler (Bulmaca).<\/li>\n\n\n\n<li>Vs.<\/li>\n<\/ul>\n\n\n\n<p>Captcha uygulamalar\u0131 genellikle sunucu tabanl\u0131 i\u015flemler gerektirir. Ancak biz, sadece belirli durumlarda, \u00f6rne\u011fin Google PMax kampanyam\u0131zdan gelen kullan\u0131c\u0131lara, Captcha&#8217;n\u0131n g\u00f6r\u00fcnmesini istiyoruz. Bunun nedeni, bot olmayan ve sat\u0131n alma niyetinde olan kullan\u0131c\u0131lara ekstra d\u00f6n\u00fc\u015f\u00fcm ad\u0131mlar\u0131 eklemek istemememizdir. Bu nedenle, sunucu i\u015flevi gerektirmeyen basit bir yap\u0131 olu\u015fturaca\u011f\u0131z.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kurulum<\/h2>\n\n\n\n<p>Kullanaca\u011f\u0131m\u0131z captcha basit bir s\u00fcr\u00fckle b\u0131rak yapbozudur, ger\u00e7ek kullan\u0131c\u0131ya bir metin girme zorundal\u0131\u011f\u0131 vermez ve botlar i\u00e7in a\u015f\u0131lmas\u0131 zor bir engelleme t\u00fcr\u00fcrd\u00fcr.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"490\" src=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-1024x490.png\" alt=\"\" class=\"wp-image-1775\" srcset=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-1024x490.png 1024w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-300x144.png 300w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-768x367.png 768w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-1536x735.png 1536w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-2048x980.png 2048w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-1920x919.png 1920w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-720x345.png 720w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-580x278.png 580w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-2-320x153.png 320w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Ad\u0131m1 <\/h3>\n\n\n\n<p>A\u015fa\u011f\u0131daki kodu bir web sitenizin bulundu\u011fu yada farkl\u0131 bir sunucuda bar\u0131nd\u0131r\u0131n. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>document.head.insertAdjacentHTML('beforeend', `\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n  &lt;style&gt;\n\n\n  .block {\n  position: absolute;\n  left: 0;\n  top: 0;\n}\n\n.sliderContainer {\n  position: relative;\n  text-align: center;\n  width: 310px;\n  height: 40px;\n  line-height: 40px;\n  margin-top: 15px;\n  background: #f7f9fa;\n  color: #45494c;\n  border: 1px solid #e4e7eb;\n}\n\n.sliderContainer_active .slider {\n  height: 38px;\n  top: -1px;\n  border: 1px solid #1991FA;\n}\n\n.sliderContainer_active .sliderMask {\n  height: 38px;\n  border-width: 1px;\n}\n\n.sliderContainer_success .slider {\n  height: 38px;\n  top: -1px;\n  border: 1px solid #52CCBA;\n  background-color: #52CCBA !important;\n}\n\n.sliderContainer_success .sliderMask {\n  height: 38px;\n  border: 1px solid #52CCBA;\n  background-color: #D2F4EF;\n}\n\n.sliderContainer_success .sliderIcon {\n  background-position: 0 0 !important;\n}\n\n.sliderContainer_fail .slider {\n  height: 38px;\n  top: -1px;\n  border: 1px solid #f57a7a;\n  background-color: #f57a7a !important;\n}\n\n.sliderContainer_fail .sliderMask {\n  height: 38px;\n  border: 1px solid #f57a7a;\n  background-color: #fce1e1;\n}\n\n.sliderContainer_fail .sliderIcon {\n  top: 14px;\n  background-position: 0 -82px !important;\n}\n\n.sliderContainer_active .sliderText,\n.sliderContainer_success .sliderText,\n.sliderContainer_fail .sliderText {\n  display: none;\n}\n\n.sliderMask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 40px;\n  border: 0 solid #1991FA;\n  background: #D1E9FE;\n}\n\n.slider {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 40px;\n  height: 40px;\n  background: #fff;\n  box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);\n  cursor: pointer;\n  transition: background .2s linear;\n}\n\n.slider:hover {\n  background: #1991FA;\n}\n\n.slider:hover .sliderIcon {\n  background-position: 0 -13px;\n}\n\n.sliderIcon {\n  position: absolute;\n  top: 15px;\n  left: 13px;\n  width: 14px;\n  height: 12px;\n  background: url(http:\/\/cstaticdun.126.net\/\/2.6.3\/images\/icon_light.f13cff3.png) 0 -26px;\n  background-size: 34px 471px;\n}\n\n.refreshIcon {\n  position: absolute;\n  right: 0;\n  top: 0;\n  width: 34px;\n  height: 34px;\n  cursor: pointer;\n  background: url(http:\/\/cstaticdun.126.net\/\/2.6.3\/images\/icon_light.f13cff3.png) 0 -437px;\n  background-size: 34px 471px;\n}\n\n.container_captcha {\n  width: 340px;\n  margin: 100px auto;\n  background: rgb(244 244 244 \/ 100%);\n  padding: 15px;\n  border-radius: 20px;\n  position: fixed;\n  top: 20%;\n  left: 0;\n  right: 0;\n  z-index: 999999999999;\n  \n  \n}\n\ninput {\n  display: block;\n  width: 290px;\n  line-height: 40px;\n  margin: 10px 0;\n  padding: 0 10px;\n  outline: none;\n  border: 1px solid #c8cccf;\n  border-radius: 4px;\n  color: #6a6f77;\n}\n\n#msg {\n  width: 100%;\n  line-height: 40px;\n  font-size: 14px;\n  text-align: center;\n}\n\n\n.captcha-overlay {\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n    background: rgba(0, 0, 0, 0.5);\n    backdrop-filter: blur(3px);\n    z-index: 9999999999;\n}\n\n.fadeOut {\n    opacity: 0;\n    transition: opacity 1s;\n}\n\n\n&lt;\/style&gt;\n\n`);\n\ndocument.body.insertAdjacentHTML('beforeend', `\n &lt;div class=\"captcha-overlay\"&gt;&lt;\/div&gt;\n &lt;div class=\"container_captcha\"&gt;\n    &lt;div id=\"captcha\"&gt;&lt;\/div&gt;\n    &lt;div id=\"msg\"&gt;&lt;\/div&gt;\n  &lt;\/div&gt;`)\n\n'use strict';\n\nvar _createClass = function() { function defineProperties(target, props) { for (var i = 0; i &lt; props.length; i++) { var descriptor = props&#91;i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function(window) {\n  var l = 42,\n\n    r = 9,\n\n    w = 310,\n\n    h = 155,\n\n    PI = Math.PI;\n  var L = l + r * 2 + 3;\n\n  function getRandomNumberByRange(start, end) {\n    return Math.round(Math.random() * (end - start) + start);\n  }\n\n  function createCanvas(width, height) {\n    var canvas = createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    canvas.style.borderRadius = '8px';\n    return canvas;\n  }\n\n  function createImg(onload) {\n    var img = createElement('img');\n    img.crossOrigin = \"Anonymous\";\n    img.onload = onload;\n    img.onerror = function() {\n      img.src = getRandomImg();\n    };\n    img.src = getRandomImg();\n    return img;\n  }\n\n  function createElement(tagName, className) {\n    var elment = document.createElement(tagName);\n    elment.className = className;\n    return elment;\n  }\n\n  if (!(\"classList\" in document.documentElement)) {\n    Object.defineProperty(HTMLElement.prototype, 'classList', {\n      get: function() {\n        var self = this;\n        function update(fn) {\n          return function(value) {\n            var classes = self.className.split(\/\\s+\/g),\n              index = classes.indexOf(value);\n\n            fn(classes, index, value);\n            self.className = classes.join(\" \");\n          }\n        }\n\n        return {\n          add: update(function(classes, index, value) {\n            if (!~index) classes.push(value);\n          }),\n\n          remove: update(function(classes, index) {\n            if (~index) classes.splice(index, 1);\n          }),\n\n          toggle: update(function(classes, index, value) {\n            if (~index)\n              classes.splice(index, 1);\n            else\n              classes.push(value);\n          }),\n\n          contains: function(value) {\n            return !!~self.className.split(\/\\s+\/g).indexOf(value);\n          },\n\n          item: function(i) {\n            return self.className.split(\/\\s+\/g)&#91;i] || null;\n          }\n        };\n      }\n    });\n  }\n\n  function addClass(tag, className) {\n    tag.classList.add(className);\n  }\n\n  function removeClass(tag, className) {\n    tag.classList.remove(className);\n  }\n\n  function getRandomImg() {\n    return 'https:\/\/picsum.photos\/300\/150\/?image=' + getRandomNumberByRange(0, 1084);\n  }\n\n  function _draw(ctx, x, y, operation) {\n    ctx.beginPath();\n    ctx.moveTo(x, y);\n    ctx.arc(x + l \/ 2, y - r + 2, r, 0.72 * PI, 2.26 * PI);\n    ctx.lineTo(x + l, y);\n    ctx.arc(x + l + r - 2, y + l \/ 2, r, 1.21 * PI, 2.78 * PI);\n    ctx.lineTo(x + l, y + l);\n    ctx.lineTo(x, y + l);\n    ctx.arc(x + r - 2, y + l \/ 2, r + 0.4, 2.76 * PI, 1.24 * PI, true);\n    ctx.lineTo(x, y);\n    ctx.lineWidth = 2;\n    ctx.fillStyle = 'rgba(255, 255, 255, 0.7)';\n    ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)';\n    ctx.stroke();\n    ctx&#91;operation]();\n    ctx.globalCompositeOperation = 'overlay';\n  }\n\n  function sum(x, y) {\n    return x + y;\n  }\n\n  function square(x) {\n    return x * x;\n  }\n\n  var jigsaw = function() {\n    function jigsaw(_ref) {\n      var el = _ref.el,\n        onSuccess = _ref.onSuccess,\n        onFail = _ref.onFail,\n        onRefresh = _ref.onRefresh;\n\n      _classCallCheck(this, jigsaw);\n\n      el.style.position = el.style.position || 'relative';\n      this.el = el;\n      this.onSuccess = onSuccess;\n      this.onFail = onFail;\n      this.onRefresh = onRefresh;\n    }\n\n    _createClass(jigsaw, &#91;{\n      key: 'init',\n      value: function init() {\n        this.initDOM();\n        this.initImg();\n        this.bindEvents();\n      }\n    }, {\n      key: 'initDOM',\n      value: function initDOM() {\n        var canvas = createCanvas(w, h);\n        var block = canvas.cloneNode(true);\n        var sliderContainer = createElement('div', 'sliderContainer');\n        var refreshIcon = createElement('div', 'refreshIcon');\n        var sliderMask = createElement('div', 'sliderMask');\n        var slider = createElement('div', 'slider');\n        var sliderIcon = createElement('span', 'sliderIcon');\n        var text = createElement('span', 'sliderText');\n\n        block.className = 'block';\n        text.innerHTML = 'Sa\u00c4\u0178a do\u00c4\u0178ru s\u00c3\u00bcr\u00c3\u00bckleyin';\n\n        var el = this.el;\n        el.appendChild(canvas);\n        el.appendChild(refreshIcon);\n        el.appendChild(block);\n        slider.appendChild(sliderIcon);\n        sliderMask.appendChild(slider);\n        sliderContainer.appendChild(sliderMask);\n        sliderContainer.appendChild(text);\n        el.appendChild(sliderContainer);\n\n\n        if (typeof Object.assign != 'function') {\n          Object.defineProperty(Object, \"assign\", {\n            value: function assign(target, varArgs) {\n              'use strict';\n              if (target == null) {\n                throw new TypeError('Cannot convert undefined or null to object');\n              }\n\n              var to = Object(target);\n\n              for (var index = 1; index &lt; arguments.length; index++) {\n                var nextSource = arguments&#91;index];\n\n                if (nextSource != null) {\n                  for (var nextKey in nextSource) {\n                    if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n                      to&#91;nextKey] = nextSource&#91;nextKey];\n                    }\n                  }\n                }\n              }\n              return to;\n            },\n            writable: true,\n            configurable: true\n          });\n        }\n\n        Object.assign(this, {\n          canvas: canvas,\n          block: block,\n          sliderContainer: sliderContainer,\n          refreshIcon: refreshIcon,\n          slider: slider,\n          sliderMask: sliderMask,\n          sliderIcon: sliderIcon,\n          text: text,\n          canvasCtx: canvas.getContext('2d'),\n          blockCtx: block.getContext('2d')\n        });\n      }\n    }, {\n      key: 'initImg',\n      value: function initImg() {\n        var _this = this;\n\n        var img = createImg(function() {\n          _this.canvasCtx.drawImage(img, 0, 0, w, h);\n          _this.draw();\n          _this.blockCtx.drawImage(img, 0, 0, w, h);\n          var y = _this.y - r * 2 - 1;\n\n\n          if (navigator.userAgent.indexOf(\"MSIE\") &gt; -1) {\n            _this.block.style.marginLeft = '-' + (_this.x - 3) + 'px';\n          } else {\n            var ImageData = _this.blockCtx.getImageData(_this.x - 3, y, L, L);\n            _this.block.width = L;\n            _this.blockCtx.putImageData(ImageData, 0, y);\n          }\n\n        });\n        this.img = img;\n      }\n    }, {\n      key: 'draw',\n      value: function draw() {\n\n        this.x = getRandomNumberByRange(L + 10, w - (L + 10));\n        this.y = getRandomNumberByRange(10 + r * 2, h - (L + 10));\n        _draw(this.canvasCtx, this.x, this.y, 'fill');\n        _draw(this.blockCtx, this.x, this.y, 'clip');\n      }\n    }, {\n      key: 'clean',\n      value: function clean() {\n        this.canvasCtx.clearRect(0, 0, w, h);\n        this.blockCtx.clearRect(0, 0, w, h);\n        this.block.width = w;\n      }\n    }, {\n      key: 'bindEvents',\n      value: function bindEvents() {\n        var _this2 = this;\n\n        this.el.onselectstart = function() {\n          return false;\n        };\n        this.refreshIcon.onclick = function() {\n          _this2.reset();\n          typeof _this2.onRefresh === 'function' &amp;&amp; _this2.onRefresh();\n        };\n\n        var originX = void 0,\n          originY = void 0,\n          trail = &#91;],\n          isMouseDown = false;\n\n        var handleDragStart = function handleDragStart(e) {\n          originX = e.clientX || e.touches&#91;0].clientX;\n          originY = e.clientY || e.touches&#91;0].clientY;\n          isMouseDown = true;\n        };\n\n        var handleDragMove = function handleDragMove(e) {\n          if (!isMouseDown) return false;\n          var eventX = e.clientX || e.touches&#91;0].clientX;\n          var eventY = e.clientY || e.touches&#91;0].clientY;\n          var moveX = eventX - originX;\n          var moveY = eventY - originY;\n          if (moveX &lt; 0 || moveX + 38 &gt;= w) return false;\n          _this2.slider.style.left = moveX + 'px';\n          var blockLeft = (w - 40 - 20) \/ (w - 40) * moveX;\n          _this2.block.style.left = blockLeft + 'px';\n\n          addClass(_this2.sliderContainer, 'sliderContainer_active');\n          _this2.sliderMask.style.width = moveX + 'px';\n          trail.push(moveY);\n        };\n\n        var handleDragEnd = function handleDragEnd(e) {\n          if (!isMouseDown) return false;\n          isMouseDown = false;\n          var eventX = e.clientX || e.changedTouches&#91;0].clientX;\n          if (eventX == originX) return false;\n          removeClass(_this2.sliderContainer, 'sliderContainer_active');\n          _this2.trail = trail;\n\n          var _verify = _this2.verify(),\n            spliced = _verify.spliced,\n            verified = _verify.verified;\n\n          if (spliced) {\n            if (verified) {\n              addClass(_this2.sliderContainer, 'sliderContainer_success');\n              typeof _this2.onSuccess === 'function' &amp;&amp; _this2.onSuccess();\n            } else {\n              addClass(_this2.sliderContainer, 'sliderContainer_fail');\n              _this2.text.innerHTML = '\u00e5\u2020\u008d\u00e8\u00af\u2022\u00e4\u00b8\u20ac\u00e6\u00ac\u00a1';\n              _this2.reset();\n            }\n          } else {\n            addClass(_this2.sliderContainer, 'sliderContainer_fail');\n            typeof _this2.onFail === 'function' &amp;&amp; _this2.onFail();\n            setTimeout(function() {\n              _this2.reset();\n            }, 1000);\n          }\n        };\n        this.slider.addEventListener('mousedown', handleDragStart);\n        this.slider.addEventListener('touchstart', handleDragStart);\n        document.addEventListener('mousemove', handleDragMove);\n        document.addEventListener('touchmove', handleDragMove);\n        document.addEventListener('mouseup', handleDragEnd);\n        document.addEventListener('touchend', handleDragEnd);\n      }\n    }, {\n      key: 'verify',\n      value: function verify() {\n        var arr = this.trail;\n        var average = arr.reduce(sum) \/ arr.length;\n        var deviations = arr.map(function(x) {\n          return x - average;\n        });\n        var stddev = Math.sqrt(deviations.map(square).reduce(sum) \/ arr.length);\n        var left = parseInt(this.block.style.left);\n        return {\n          spliced: Math.abs(left - this.x) &lt; 10,\n          verified: stddev !== 0\n        };\n      }\n    }, {\n      key: 'reset',\n      value: function reset() {\n        this.sliderContainer.className = 'sliderContainer';\n        this.slider.style.left = 0;\n        this.block.style.left = 0;\n        this.sliderMask.style.width = 0;\n        this.clean();\n        this.img.src = getRandomImg();\n      }\n    }]);\n\n    return jigsaw;\n  }();\n\n  window.jigsaw = {\n    init: function init(opts) {\n      return new jigsaw(opts).init();\n    }\n  };\n})(window);\n\n\njigsaw.init({\n  el: document.getElementById('captcha'),\n  onSuccess: function() {\n    document.getElementById('msg').innerHTML = 'Ba\u00c5\u0178ar\u00c4\u00b1l\u00c4\u00b1!';\n    document.querySelector('.container_captcha').classList.add('fadeOut');\n    document.querySelector('.captcha-overlay').classList.add('fadeOut');\n\n    setTimeout(function() {\n      document.querySelector('.container_captcha').style.display = 'none';\n      document.querySelector('.captcha-overlay').style.display = 'none';\n    }, 1000);\n  }\n  ,\n  onFail: cleanMsg,\n  onRefresh: cleanMsg\n})\nfunction cleanMsg() {\n  document.getElementById('msg').innerHTML = ''\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ad\u0131m2<\/h3>\n\n\n\n<p>Kodumuzu GTM ile web sitemize ekleyelim. Tag manager hesab\u0131m\u0131zda yeni bir HTML etiketi olu\u015ftural\u0131m ve a\u015fa\u011f\u0131daki script i\u00e7erisindeki <strong>src<\/strong> alan\u0131na bar\u0131nd\u0131\u011f\u0131m\u0131z kodumuzun url adresini ekleyelim.<\/p>\n\n\n\n<p>Geli\u015fmi\u015f ayarlar k\u0131sm\u0131ndan etiket etkinle\u015ftirme se\u00e7eneklerinden &#8220;sayfa ba\u015f\u0131na bir defa&#8221; se\u00e7ene\u011fini se\u00e7in se\u00e7in.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"643\" src=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-1024x643.png\" alt=\"\" class=\"wp-image-1778\" srcset=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-1024x643.png 1024w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-300x188.png 300w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-768x482.png 768w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-720x452.png 720w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-580x364.png 580w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5-320x201.png 320w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-5.png 1102w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script src=\"https:\/\/abdulazizgolca.com\/captcha-popup\/captcha-popup.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ad\u0131m3<\/h3>\n\n\n\n<p>Tetikleyici olarak, form doldurma ad\u0131m\u0131na ba\u015flarken kullan\u0131c\u0131n\u0131n ilk t\u0131klama i\u015flemini ger\u00e7ekle\u015ftirece\u011fi &#8220;input&#8221; alan\u0131n\u0131n &#8220;Click&#8221; de\u011fi\u015fkenlerinden birini girebilirsiniz.<\/p>\n\n\n\n<p>Sadece performans max kampanyalar\u0131nda kullanmak istiyorsak, pmax kampanyam\u0131zda kulland\u0131\u011f\u0131m\u0131z UTM parametresini tetikleyicide belirtebilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"762\" src=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-1024x762.png\" alt=\"\" class=\"wp-image-1777\" srcset=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-1024x762.png 1024w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-300x223.png 300w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-768x572.png 768w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-720x536.png 720w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-580x432.png 580w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4-320x238.png 320w, https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/image-4.png 1526w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Test<\/h3>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Ekran-Kaydi-2023-09-14-20.36.15.mp4\"><\/video><\/figure>\n\n\n\n<p>Bu ad\u0131mlar\u0131 ba\u015far\u0131l\u0131 bir \u015fekilde tamamlad\u0131\u011f\u0131n\u0131zda, potansiyel m\u00fc\u015fteri kampanyalar\u0131n\u0131zda spam ba\u015fvurular\u0131n\u0131 azaltmak ve daha y\u00fcksek kaliteli ba\u015fvurular elde etmek i\u00e7in Captcha kullanabilirsiniz. Ancak, kullan\u0131c\u0131 deneyimini olumsuz etkilememek i\u00e7in Captcha&#8217;n\u0131n kullan\u0131m\u0131n\u0131 dengelemeye dikkat etmelisiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Performans Max kampanyalar\u0131, E-ticaret odakl\u0131 kampanyalarda iyi sonu\u00e7lar versede, potansiyel m\u00fc\u015fteri kampanyalar\u0131nda ayn\u0131 ba\u015far\u0131y\u0131 elde etmek olduk\u00e7a zor. E-ticarette, bir sat\u0131n alma etkinli\u011fi i\u015fleminin sonunu ifade ederken, bir potansiyel m\u00fc\u015fterinin olu\u015fturulmas\u0131 sat\u0131\u015f s\u00fcrecinin ba\u015flang\u0131c\u0131n\u0131 temsil eder. Sadece bir formun doldurulmu\u015f olmas\u0131, onun kaliteli bir potansiyel m\u00fc\u015fteri oldu\u011fu anlam\u0131na gelmez. Kurdu\u011fum potansiyel m\u00fc\u015fteri odakl\u0131 PMax kampanyalar\u0131nda, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1780,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1772","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir? - AG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir? - AG\" \/>\n<meta property=\"og:description\" content=\"Performans Max kampanyalar\u0131, E-ticaret odakl\u0131 kampanyalarda iyi sonu\u00e7lar versede, potansiyel m\u00fc\u015fteri kampanyalar\u0131nda ayn\u0131 ba\u015far\u0131y\u0131 elde etmek olduk\u00e7a zor. E-ticarette, bir sat\u0131n alma etkinli\u011fi i\u015fleminin sonunu ifade ederken, bir potansiyel m\u00fc\u015fterinin olu\u015fturulmas\u0131 sat\u0131\u015f s\u00fcrecinin ba\u015flang\u0131c\u0131n\u0131 temsil eder. Sadece bir formun doldurulmu\u015f olmas\u0131, onun kaliteli bir potansiyel m\u00fc\u015fteri oldu\u011fu anlam\u0131na gelmez. Kurdu\u011fum potansiyel m\u00fc\u015fteri odakl\u0131 PMax kampanyalar\u0131nda, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/\" \/>\n<meta property=\"og:site_name\" content=\"AG\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-14T17:51:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-15T07:18:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1210\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Aziz Golca\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/#website\",\"url\":\"https:\/\/abdulazizgolca.com\/blog\/\",\"name\":\"AG\",\"description\":\"Digital Marketing Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/abdulazizgolca.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#primaryimage\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png\",\"contentUrl\":\"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png\",\"width\":1920,\"height\":1210},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#webpage\",\"url\":\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/\",\"name\":\"Performans Max Kampanyas\\u0131nda Spam Formlar Nas\\u0131l Engellenir? - AG\",\"isPartOf\":{\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#primaryimage\"},\"datePublished\":\"2023-09-14T17:51:10+00:00\",\"dateModified\":\"2023-09-15T07:18:36+00:00\",\"author\":{\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/#\/schema\/person\/57560b7804c78ce2444158c27dbacd8f\"},\"breadcrumb\":{\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/abdulazizgolca.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Performans Max Kampanyas\\u0131nda Spam Formlar Nas\\u0131l Engellenir?\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/#\/schema\/person\/57560b7804c78ce2444158c27dbacd8f\",\"name\":\"Aziz Golca\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/abdulazizgolca.com\/blog\/#personlogo\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8451991794cdbd8d10ea195c6a5b564e5a2fd69e56047b647535ab6318d975d?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8451991794cdbd8d10ea195c6a5b564e5a2fd69e56047b647535ab6318d975d?s=96&r=g\",\"caption\":\"Aziz Golca\"},\"sameAs\":[\"http:\/\/abdulazizgolca.com\/blog\"],\"url\":\"https:\/\/abdulazizgolca.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir? - AG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/","og_locale":"tr_TR","og_type":"article","og_title":"Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir? - AG","og_description":"Performans Max kampanyalar\u0131, E-ticaret odakl\u0131 kampanyalarda iyi sonu\u00e7lar versede, potansiyel m\u00fc\u015fteri kampanyalar\u0131nda ayn\u0131 ba\u015far\u0131y\u0131 elde etmek olduk\u00e7a zor. E-ticarette, bir sat\u0131n alma etkinli\u011fi i\u015fleminin sonunu ifade ederken, bir potansiyel m\u00fc\u015fterinin olu\u015fturulmas\u0131 sat\u0131\u015f s\u00fcrecinin ba\u015flang\u0131c\u0131n\u0131 temsil eder. Sadece bir formun doldurulmu\u015f olmas\u0131, onun kaliteli bir potansiyel m\u00fc\u015fteri oldu\u011fu anlam\u0131na gelmez. Kurdu\u011fum potansiyel m\u00fc\u015fteri odakl\u0131 PMax kampanyalar\u0131nda, [&hellip;]","og_url":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/","og_site_name":"AG","article_published_time":"2023-09-14T17:51:10+00:00","article_modified_time":"2023-09-15T07:18:36+00:00","og_image":[{"width":1920,"height":1210,"filesize":105081,"url":"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png","path":"\/home\/abdulazizgolca\/public_html\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png","size":"full","id":1780,"alt":"","pixels":2323200,"type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Aziz Golca","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/abdulazizgolca.com\/blog\/#website","url":"https:\/\/abdulazizgolca.com\/blog\/","name":"AG","description":"Digital Marketing Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/abdulazizgolca.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":"ImageObject","@id":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#primaryimage","inLanguage":"tr","url":"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png","contentUrl":"https:\/\/abdulazizgolca.com\/blog\/wp-content\/uploads\/2023\/09\/Performance-Max-1.png","width":1920,"height":1210},{"@type":"WebPage","@id":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#webpage","url":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/","name":"Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir? - AG","isPartOf":{"@id":"https:\/\/abdulazizgolca.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#primaryimage"},"datePublished":"2023-09-14T17:51:10+00:00","dateModified":"2023-09-15T07:18:36+00:00","author":{"@id":"https:\/\/abdulazizgolca.com\/blog\/#\/schema\/person\/57560b7804c78ce2444158c27dbacd8f"},"breadcrumb":{"@id":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/abdulazizgolca.com\/blog\/pmax-kampansinda-spam-formlar-nasil-engellenir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/abdulazizgolca.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Performans Max Kampanyas\u0131nda Spam Formlar Nas\u0131l Engellenir?"}]},{"@type":"Person","@id":"https:\/\/abdulazizgolca.com\/blog\/#\/schema\/person\/57560b7804c78ce2444158c27dbacd8f","name":"Aziz Golca","image":{"@type":"ImageObject","@id":"https:\/\/abdulazizgolca.com\/blog\/#personlogo","inLanguage":"tr","url":"https:\/\/secure.gravatar.com\/avatar\/f8451991794cdbd8d10ea195c6a5b564e5a2fd69e56047b647535ab6318d975d?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8451991794cdbd8d10ea195c6a5b564e5a2fd69e56047b647535ab6318d975d?s=96&r=g","caption":"Aziz Golca"},"sameAs":["http:\/\/abdulazizgolca.com\/blog"],"url":"https:\/\/abdulazizgolca.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/posts\/1772","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/comments?post=1772"}],"version-history":[{"count":3,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/posts\/1772\/revisions"}],"predecessor-version":[{"id":1784,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/posts\/1772\/revisions\/1784"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/media\/1780"}],"wp:attachment":[{"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/media?parent=1772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/categories?post=1772"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abdulazizgolca.com\/blog\/wp-json\/wp\/v2\/tags?post=1772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}