Подтвердить что ты не робот

Google AdSense JavaScript вызывает множество загрузок страниц?

Update

Хорошо - теперь я знаю, откуда происходят множественные загрузки страниц! (Тем не менее, тайна еще не решена).

Похоже, что сразу же после запроса на страницу, содержащую объявления AdSense, Google делает запрос на тот же URL (один или несколько раз)

например. это то, что выглядят журналы (запросы от Mediapartners-Google):

2011-07-20 09:50:20 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - xxx.xxx.xxx.xxx Mozilla/5.0+(Browserstring removed) 200 0 0 1140
2011-07-20 09:50:20 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - 66.249.72.52 Mediapartners-Google 200 0 64 218
2011-07-20 09:50:22 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - 66.249.72.52 Mediapartners-Google 200 0 0 171

(Я должен был больше обратить внимание на журналы IIS, а не на собственные журналы приложений - мне просто не приходило в голову, что эти множественные, идентичные, одновременные запросы могли поступать из разных источников). Это также объясняет, почему я не мог найти ничего странного при анализе запроса с помощью WireShark, и почему скрипач не показал ничего странного.

Итак, вопрос о щедрости теперь становится следующим:

  • Почему Google запрашивает эти запросы так быстро после того, как запрашивается страница? (я знаю, что они должны осматривать страницу для контента, но сразу после этого и несколько раз видят, что я злоупотребляю).
  • Что я могу сделать, чтобы остановить это?

И из интереса:

  • Кто-нибудь еще кажется что-то похожее в своих журналах? (или это что-то странное с моей учетной записью AdSense)

Хорошо, я заранее извинюсь за длину!...

Этот вопрос посвящен этому, касающемуся кода Google Adsense Javascript, вызывающего ошибки. (формы Unable to post message to googleads.g.doubleclick.net. Recipient has origin something.com)

Я не буду дублировать всю информацию там, но, похоже, вывод заключается в том, что JS AdSense не работает. (пожалуйста, прочитайте вопрос для фона, если у вас есть время). Я знал об этой проблеме некоторое время, но решил жить с ошибками JS, а не вытаскивать AdSense с сайта.

Однако, Недавно я заметил, что в моем приложении ASP.NET MVC2 действия Controller, по-видимому, вызывались дважды на запрос страницы (иногда даже 3 раза).. Одиночно, это происходило только на производстве сервер. По некоторым соображениям я согласился с тем, что одно из отличий между средами Dev и Production заключалось в том, что javscript AdSense был только активен в производстве.

Чтобы протестировать это, я удалил весь код AdSense с одной из рабочих страниц, и один из них, проблема с множественной загрузкой страницы исчезла!

Я подумал, что, возможно, это был факт, что на странице возникли общие ошибки JS на странице, поэтому для проверки этого я ввел некоторые простые ошибки в свой собственный JS-код, однако это не вызвало проблема с множественной загрузкой страницы для повторного появления.

Одна известная ситуация, когда страницы могут быть вызваны несколько раз для каждого запроса, это когда есть теги изображений с пустыми атрибутами src или ссылки на внешние ресурсы с пустыми атрибутами src. Реально. Самый верный ответ на вопрос AdSense JS Bug указывает, что:

"Аргумент targetOrigin в этом вызове this.la установлен в http://googleads.g.doubleclick.net. Однако новый iframe был написано с его src, установленным примерно: blank."

Это кажется устрашающе похожим на пустую проблему src..... Это слишком много связано с совпадением, и в настоящее время я считаю, что это проблема. [EDIT: Это была красная селедка]

Тем не менее, я понятия не имею, что вы идете отсюда. Эти вызовы с несколькими действиями вызывают реальные проблемы (мне приходится использовать блокировку кода, сериализованные транзакции и всевозможные неприятные хаки для ограничения неблагоприятных последствий). Конечно, я мог бы полностью лаять по неправильному дереву - я озадачен тем, что не могу найти никаких других ссылок на это, учитывая вездесущность AdSense и характер проблемы (но опять же выводы AdSense Вопрос JS Bug также удивителен). Мне хотелось бы, чтобы это оказалось глупой ошибкой с моей стороны, поэтому мне нужна проверка здравомыслия.

Я хотел бы спросить сообщество:

  • Кто-нибудь еще испытал эту проблему?, или может кто-нибудь, кто использует AdSense, реплицировать и подтвердить это? [См. Примечание ниже]
  • Предполагая, что проблема - это то, что кажется, что я могу сделать? (за исключением, конечно, вытягивания AdSense)
  • Если нет, то что может быть причиной этого?

To Sumarise:- Мои действия выполняются 2 (иногда 3) раза на запрос страницы.

  • ЭТО ТОЛЬКО ПРОДОЛЖАЕТСЯ, КОГДА ГОСУДАРСТВЕННЫЕ ОБЪЯВЛЕНИЯ ADS НАСТОЯЩИМ
  • Я удалил все JS AdSense и ввел ошибку в свой собственный JS: Actions вызывается только один раз...
  • Аналогичная проблема может возникнуть, если на странице присутствуют пустые свойства src.
  • Ответ на предыдущий вопрос сулит, что AdSense JS устанавливает a src="about:blank" на iFrame
  • Я пришел к выводу, что src="about:blank" из кода AdSense является наиболее вероятным источником проблемы.
  • Если я отключу JavaScript в браузере, проблема исчезнет.

Просто чтобы документировать те вещи, которые я исключил:

  • Это происходит во всех браузерах: Chrome (12) Firefox (5) и IE (8).
  • Я отключил все плагины в браузерах (YSlow, Firebug и т.д.)
  • Нет пустых src (src=""/src="#") для изображений или других внешних ресурсов в html в моем коде
  • В css (url('')) нет ссылок на пустые ссылки URL
  • Это вряд ли будет проблемой на стороне сервера/конфигурации сервера, так как в Dev не существует (и нескольких различий между dev и production является отсутствие AdSence JS в Dev)

Примечание.. Для тех, кто хочет реплицировать это, следует отметить, что, как ни странно, когда происходит многократное действие, Fiddler показывает только один запрос, отправляемый на сервер. Я понятия не имею, почему это должно быть так, но ведение журнала сервера не лежит:) Возможно, тот, у кого есть предыдущий опыт работы с этой проблемой, вызванный пустыми атрибутами src в тегах img, может сказать, видели ли они то же поведение с Fiddler.


Запрошенная дополнительная информация

HTML (@Ivan)

Вот как я реализую Adsense (ids удален)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div class="ad">
<%if (!HttpContext.Current.IsDebuggingEnabled) { %>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-xxxxxxxxxxxxxxx";
/* xxxxxxxxxxxxxxx */
google_ad_slot = "xxxxxxxxx";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>                     
<%} else { %>
<img src="/Content/images/googleAdMock728x15_4_e.gif" width="728" height="15" />
<%} %>
</div>

Вставляется в RenderPartial в представлении:

<% Html.RenderPartial("AdSense_XXXXXX"); %>

Протокол TCP (@Tomas)

До сих пор я сделал захват проводов:

  • на клиенте при запросе страницы на продукцию с проблемой
  • на клиенте при запросе страницы на продукцию без проблем (например, Adsense Removed)

Я не вижу существенной разницы между этими двумя (хотя мои сетевые навыки невелики). Следует отметить, что оба они кажутся TCP retransmittion HTTP-запроса сразу после первоначального запроса - я не знаю его значимости. Я могу подтвердить, что в случае 1 в журналах сервера сообщается о 2 исполнениях, а в случае 2 - только одно выполнение.

Далее я попробую TCP-протоколирование на стороне сервера в обоих случаях и отправлю результаты здесь.

4b9b3361

Ответ 1

Учитывая, что поведение, которое вы наблюдаете, кажется, трудно избежать, можем ли мы сосредоточиться на обходных решениях?

Можно ли различать запросы на основе UserAgent и, таким образом, отфильтровывать запросы. Может ли это быть жизнеспособным для вас? Если это так, вы можете, вероятно, основываться на этом подходе: http://blog.flipbit.co.uk/2009/07/writing-iphone-sites-with-aspnet-mvc.html Здесь они обнаруживают iPhones, но тот же вопрос для Mediapartners-бота Google.

Ответ 2

Mediabot - это имя, которое сканирует веб-искатель, используемый Google для сканирования веб-страниц для анализа содержимого, что позволяет Google AdSense обслуживать контекстно-зависимую рекламу на странице.

По моему опыту, это непростительно и, да, это может быть довольно тяжелый и раздражает.

Если вы не хотите, чтобы бот Mediapartner получал доступ к определенной странице, вы можете запретить его в своем robots.txt с помощью:

#
# disallow adsense bot
#
User-agent: Mediapartners-Google
Disallow: path to your specific page

Это будет иметь недостаток объявлений с нецелевым сервисом с этой конкретной страницы.

Если вы видите этот шаблон всегда на одной странице с другой строкой запроса, добавление canonical rel может облегчить боль.

Если вы не можете решить эту проблему, и вы видите ее как злоупотребление, не просите помощи в Сканирование индексирования и ранжирования Google поддержка.

Ответ 3

Помимо внедрения самого кода AdSense, в вашем двух тестовых случаях есть две вещи, связанные с AdSense:

  • Что еще происходит, когда !HttpContext.Current.IsDebuggingEnabled? Это, по-видимому, флаг де-факто производства; возможно, есть какой-то другой нюанс где-то, что происходит, что зависит от этого же флага.

  • Возможно ли, что Html.RenderPartial("AdSense_XXXXXX") каким-то образом заставляет ваш контроллер возвращаться к началу его выполнения?

Из вашего описания кажется, что выполнение выполняется дважды на сервере, но только один запрос отправляется от клиента. Это подразумевает ошибку сервера, и эти две строки являются сутью вашего запуска AdSense. Чтобы сузить его, попробуйте вставить часть AdSense прямо, а не вызвать Html.RenderPartial(). Если это не изменит результат, может быть целесообразно проверить, что еще включено HttpContext.Current.IsDebuggingEnabled.

В противном случае может быть полезно узнать, происходит ли ведение журнала на стороне сервера при получении запроса, до отправки ответа или после отправки ответа.

Ответ 4

Да, я только что обнаружил это во время сеанса TeamView с моим партнером. На моей коробке моя главная страница ТОЛЬКО для моего сайта загружается один раз за запрос.

Затем по совпадению при использовании Fiddler мой партнер получает 4 запроса к странице с образцами. Это 1,5-мегабайтная страница с большими сценариями и другими зависимостями, поэтому это был действительно момент WTF, поскольку я никогда не видел ничего подобного в течение 15 лет веб-разработки.

Если Google делает это, я должен сказать, что они должны понимать, что на сегодняшних сайтах могут быть очень большие страницы и очень большие аудитории. Это может означать, что они увеличивают пропускную способность в 4 раза за запрос. Как я уже сказал, WTF?????

Я хочу, чтобы этот Q & A имел более четкое разрешение. Я использую виджет Google Translate, но это происходит только на его поле и на главной странице. На других страницах также используется виджет перевода, и я запрашиваю свой JQUERY через CDN Google. Может ли это сделать Google.