עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

זיהוי הזחלן של גוגל - PHP

Featured Replies

פורסם

הפונקציה הבאה אמורה לזהות את הזחלן של גוגל

למה היא לא עובדת?

function is_googlebot() {

if (eregi("Googlebot",$_SERVER['HTTP_USER_AGENT'])){

$ip = $_SERVER['REMOTE_ADDR'];

$name = gethostbyaddr($ip);

$host = gethostbyname($name);

if(eregi("Googlebot",$name)){

if ($host == $ip) return true;

else return false;

} else return false;

} else return false;

}

תודה.

פורסם

הפונקציה הבאה אמורה לזהות את הזחלן של גוגל

למה היא לא עובדת?

הקוד הארוך של הפונקציה...

תודה.

תראה, אני לא מבין גדול בזחלן של גוגל, וגם לא ב PHP, אבל ממה שאני מצליח להבין בקוד שלך, יש לך כמה שורות (לכאורה) מיותרות.

בגדול, יש לך תנאי מאוד פנימי שאתה רוצה לבדוק- כאשר הוא אמת - החזר אמת, בכל מקרה אחר- החזר שקר.

אתה יכול להמיר את הקוד שלך, בקוד הקצר יותר הבא:

function is_googlebot() {

if (eregi("Googlebot",$_SERVER['HTTP_USER_AGENT']) ){

$ip = $_SERVER['REMOTE_ADDR'];

$name = gethostbyaddr($ip);

$host = gethostbyname($name);

if(eregi("Googlebot",$name) && $host == $ip) return true;

} return false;

}

אין צורך ב else, אם כבר הוחזר ערך אמת, הפונקציה לא תמשיך הלאה.

אותו עיקרון לגבי שאר ה- return false, אין צורך בכ"כ הרבה כאלה.

[הערת אגב- אתה יכול להמיר את הקוד שלך לקוד אולטרה-קטן וללא משתנים כלל, אבל זה כבר מיותר לחלוטין.]

ובקשר לפעולה עצמה של הפונקציה שבנית: קראתי את התעוד של הפונקציה eregi, וגיליתי נקודה מעניינת:

Return Values

Returns the length of the matched string if a match for pattern was found in string , or FALSE if no matches were found or an error occurred.

If the optional parameter regs was not passed or the length of the matched string is 0, this function returns 1.

מה שאומר ככל הנראה, שהפונקציה תמיד תחזיר true, כי כל ה eregi מחזירות 1 - התנאי הבוליאני אמת (true), ולכן כל התנאים שלך בעצם לא מתפקדים.

אולי כדאי לך לנסות את stristr, (תיעוד: http://il2.php.net/manual/en/function.stristr.php), ולבדוק מתי היא מחזירה ערך שקר (False).

הקוד אמור לצאת בערך כזה (אם קיים אופרטור =! בPHP, כמו שכבר ציינתי אני לא בקיא מדי בשפה, אני מתכנת במקור בשפת ++C) :

function is_googlebot() {
if stristr("Googlebot",$_SERVER['HTTP_USER_AGENT']) != False ){

$ip = $_SERVER['REMOTE_ADDR'];
$name = gethostbyaddr($ip);
$host = gethostbyname($name);

if(stristr("Googlebot",$name) != False && $host == $ip) return true;

} return false;
}

לילה טוב!

פורסם
  • מחבר

קיבלתי, אך זהו לא קוד שאני כתבתי.

השאלה למה הוא לא עובד עדיין עומדת :)

פורסם

אני מניח שהבעיה היא עם הפונקציה gethostbyname שאמנם מחזירה ip אבל לאותו host יכול להיות יותר מ-ip אחד ולא בטוח שזה שחוזר זהה לזה שהתחלת איתו את התהליך. תנסה את הסקריפט הזה ותראה אם הוא עובד לך:

http://are.ehibou.com/php-script-to-detect-and-verify-googlebot

איך בכלל אתה בודק ויודע שזה לא עובד?

רק לידיעתך - על פי תקנות גוגל אסור להציג לזחלן תוכן שונה מאשר זה שמוצג למשתמש רגיל, זה יכול להביא למחיקת האתר מהאינדקס של גוגל.

פורסם

בנוסף לזה יש להם זחלנים סמויים שבודקים את האתר במיוחד בשביל זה...

פורסם
  • מחבר

אני מניח שהבעיה היא עם הפונקציה gethostbyname שאמנם מחזירה ip אבל לאותו host יכול להיות יותר מ-ip אחד ולא בטוח שזה שחוזר זהה לזה שהתחלת איתו את התהליך. תנסה את הסקריפט הזה ותראה אם הוא עובד לך:

http://are.ehibou.com/php-script-to-detect-and-verify-googlebot

איך בכלל אתה בודק ויודע שזה לא עובד?

רק לידיעתך - על פי תקנות גוגל אסור להציג לזחלן תוכן שונה מאשר זה שמוצג למשתמש רגיל, זה יכול להביא למחיקת האתר מהאינדקס של גוגל.

אני משתמש באדסנס, ועצם זה שאני ממשיך לקבל מודעות שירות ולא מודעות אדסנס אני מסיק שהזחלן לא מצליח לקרוא את העמוד.

בנוסף לזה יש להם זחלנים סמויים שבודקים את האתר במיוחד בשביל זה...

אני לא מציג תוכן שונה, זהו עמוד לרשומים בלבד (בדיקת סשן) והגוגל בוט אינו משתמש רשום לכן כשהו מגיע לעמוד הוא מופנה לעמוד ההרשמה

האם בכל זאת זה יכול לקבל "קנס" על זה? יש דרך אחרת?

והאם הזחלן (הסמוי) בכלל יכול לקרוא PHP? הרי כל הבדיקה נעשת באיזור PHP כך שהוא לא מודע אליה

פורסם

יש דרכים אחרות למנוע כניסה של ה-googlebot לדפים מסויימים:

http://en.wikipedia.org/wiki/Googlebot

מה זאת אומרת "לקרוא PHP"? הזחלן לא רואה את קוד ה-PHP שלך, הוא רואה רק את ה-HTML שנוצר בסופו של דבר.

פורסם

מה זה בכלל זחלן? :bash:

פורסם

לא ברור לי בדיוק מה אתה מנסה לעשות אבל יש לי הרגשה שיש לזה פתרונות אחרים.

- אם אתה רוצה שגוגל לא ינסה לאנדקס דפים מסויימים אז פשוט תגדיר את הדפים האלו בקובץ robots.txt.

- אם אתה רוצה שגוגל כן יצליח לאנדקס דפים שמאחורי הרשמה אז יש אפשרות להרשם בגוגל webmasters ולתת ל-googlebot שם וסיסמה שבעזרתם הוא יכנס ויאנדקס את הדפים האלה. כדאי בכל מקרה לפתוח חשבון ב-webmasters ושם תוכל לראות אם ואיזה בעיות יש לזחלן כשהוא עובר על האתר שלך.

מה זה בכלל זחלן? :bash:

זחלן (crawler) זו תוכנה שקוראת דפי אינטרנט, במקרה הזה לצורך הוספתם לחיפוש של גוגל.

פורסם
  • מחבר

לא זכור שהזכרתי את המילים "לא לאנדקס", אני רוצה בדיוק ההיפך.

ולא לאנדקס , אלא לקרוא את התוכן על מנת להתאים את האדסנס לתוכן.

אני כן רוצה שהזחלן יכנס לעמוד , אך משפט התנאי בתחילת העמוד שבודק אם קיימת סשן של משתמש רשום (מה שהוא לא) מפנה אותו לעמוד אחר במקום לתת לו להכנס להמשך הקוד.

פורסם

כאמור זו לא הדרך הנכונה - זה בדיוק מה שאסור לעשות.

הדרך הנכונה - בחשבון ה-AdSense יש עמוד Site Authentication שבו אתה יכול להגדיר לזחלן ה-AdSense (שהוא נפרד מה-googlebot הכללי) דף כניסה, שם וסיסמה שבעזרתם הוא יוכל להכנס ולקרוא את הדפים המוגנים באתר שלך. כמו כן אתה תצטרך כנראה לפתוח גם חשבון google webmaster כדי לאמת שהאתר אכן שייך לך.

פורסם
  • מחבר

תודה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.