簡體   English   中英

谷歌廣告的錯誤

[英]Errors with google ads

我有一個帶有移動版本的 PHP 網站,並且在那里顯示谷歌廣告。 我分別從我的客戶那里收到了 header 和頁腳的谷歌代碼,但它們並不總是顯示。 我在自動錯誤報告中收到很多警告,如下所示:

fopen(http://pagead2.googlesyndication.com/pagead/ads?...): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

URL中的問號后面有一些帶有私人信息的參數,所以我決定寫...而不是它們。 我已經要求我的客戶重新生成代碼,他已經這樣做了,我已經粘貼了 header 的新代碼和頁腳,但是,當我們認為錯誤消失時,我們決定在 16 小時后調用它已收到4352個錯誤報告,其中95%是google ads,錯誤相同,即:未能打開stream。 我想知道為什么我們有時會看到廣告,為什么在其他情況下沒有出現。 問題:當你們遇到此錯誤時,有哪些步驟可以消除它們並展示廣告? (當然我可以去掉廣告,但是我的客戶會不高興,哈哈)

編輯:這是代碼的一部分(機密信息已從中取出並替換為“秘密”)。 我希望這個問題現在更有意義。

$GLOBALS['google']['client']='secret';
$GLOBALS['google']['https']=read_global('HTTPS');
$GLOBALS['google']['ip']=read_global('REMOTE_ADDR');
$GLOBALS['google']['markup']='xhtml';
$GLOBALS['google']['output']='xhtml';
$GLOBALS['google']['ref']=read_global('HTTP_REFERER');
$GLOBALS['google']['slotname']='secret';
$GLOBALS['google']['url']=read_global('HTTP_HOST') . read_global('REQUEST_URI');
$GLOBALS['google']['useragent']=read_global('HTTP_USER_AGENT');

由於您提到的錯誤位於遠程服務器上,因此我嘗試盡可能多地測試該服務器。

我會嘗試放棄我的端點的問題,其中包括我的 ISP、我的瀏覽器、防火牆和代理。 之后,我會嘗試測試另一個端點。

首先,嘗試在錯誤日志上查找模式,嘗試查找是否發生這種情況,因為短時間內連接很多,來自特定位置的請求,舊瀏覽器,特定版本的瀏覽器等。

短時間內連接過多

這對於 Google 服務器來說應該不是問題,但它可能表示一種奇怪的情況,並且某些請求可能無法獲得正常或完整的 HTTP 響應。 您無法對此進行真正的測試,但您可以嘗試檢測它並做出反應。

舊瀏覽器 - 特定版本的瀏覽器

可能是瀏覽器上的一個錯誤正在發送一個不完整的請求,碰巧這是一個無效的請求,並且指向一個不存在的資源。 可能是瀏覽器有緩存缺陷,甚至沒有檢查資源就發送 404 響應。 您通過使用至少兩個不同的瀏覽器和私有 session 來測試這一點,這樣您就可以丟棄瀏覽器問題、緩存和 cookies。 (這僅適用於 JS)。

來自特定位置的請求

該位置可能有連接問題,或者有缺陷的 ISP,或者過分熱心的緩存服務,或者有問題的代理。 您無法對此進行測試,但您可以嘗試檢測它並做出反應,例如,不向這些請求發送廣告。

防火牆 - 代理

您客戶的網站名稱是否與被禁止/屏蔽的網站名稱相似? 如果是這樣,並且如果碰巧在服務器上發生了拼寫錯誤,那么每次請求通過時您都可能會受到影響。 檢查被禁止的網站列表。

客戶端服務器過載

您客戶的網站是托管在共享主機上還是可能被過度使用的主機上? 如果是這樣,可能會發生奇怪的行為,例如與命令的執行時間限制有關,或者因為它建立了太多的連接,有些必須被丟棄,留下一些連接只是掛起等待應答。 這很難測試,但您可以檢查服務器負載,執行反向 IP 檢查是否有許多客戶端共享相同的 IP,執行 cURL 請求並檢查平均時間。

時間限制 - 重定向

整個連接過程有不同的時間限制。 您可以檢查是否存在問題,至少從您的系統作為用戶和從您的客戶端的服務器。 用cURL session創建一個PHP文件,多次執行,檢查響應時間和重定向。 檢查您是否總是從服務中獲得正確的響應,是否花費太長時間,是否有重定向,是否每次或只是幾次都有重定向,測試不同的時間。

編輯(來自 Lajos Árpád)

廣告尺寸不匹配

該代碼可能適用於給定的尺寸,而您可能使用不同的尺寸。 您應該嘗試從您的客戶那里獲取有關該問題的信息。

設置不匹配

這是上述情況更普遍的情況,但我單獨描述了廣告尺寸的問題,因為廣告尺寸不匹配經常發生,這可能是真正的問題。 此外,您應該檢查其他重要設置是否匹配,是否存在處理不當的問題。

編輯結束

在我看來,這應該會給你你正在尋找的答案,如果沒有,你可以提供關於這個問題的更多細節,這可能對其他人有用,或者使用結果在谷歌上提問/報告。

fopen was part of the google code and we are not allowed to modify that, so I have to leave it at that even if it is strange

那是雙重綁定 擺脫它。 如果它不工作,你就不能讓它工作。

我發現這篇已有近 7(!)年歷史的帖子抱怨您的 fopen 呼叫無法“最終”工作。

如果有時 fopen 確實對您有用,而有時卻沒有,您可以在代碼中使用條件操作,如下所示:

        <?php

            // Turn off all error reporting
            error_reporting(0);

          $url = 'http://pagead2.googlesyndication.com/pagead/ads';   //put your real url here
          $fp = fopen($url, 'r');

          // The variable $http_response_header will automagically be generated (array)
          /* you may explore the rsponse by un-commenting  the following
          foreach($http_response_header as $key=>$value){
              echo $key.'='.$value.'<br>';
          }
          */

          $response_code = @explode(' ', $http_response_header[0]);
            $response_code = (int)$response_code[1];

            if($return_code==200){
               // show the ad part
               // echo 'OK';
            } else {
                // whatever
                // echo 'OH.BOY';
            }

        ?>

go 回合的另一種方法是改用 javascript AdSense 代碼。 您的客戶可能會為您提供 javascript 部件以包含在頁眉/頁腳等中。 它通常看起來像:

    <script type="text/javascript">
    <!-- google_ad_client = "pub-UNIQUE_NUMBER";
    /* 300x250, created dd/mm/yy */
    google_ad_slot = "11111111";
    google_ad_width = 300;
    google_ad_height = 250;
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM