מדריך htaccess לאנשי SEO ובעלי אתרים

htaccess ל-SEO ובעלי אתרים

בכל תיקיה בשרת Apache שוכן לו בצניעות קובץ htaccess – המקבילה של אפאצ'י ל-IIS של וינדוז או ל- Nginx Rewrite Rules. לקובץ הקטן והשימושי הזה יש אינספור יתרונות, בעיקר לאתרים קטנים יחסית, אבל גם לא מעט חסרונות.

יתרונות

  • כל אחסון שיתופי מספק גישה ל- htaccess- משמע עצמאות מלאה בניהול האתר. עצמאות שבשרת מבוסס IIS או Nginx זמינה רק לבעלי VPS ומעלה
  • כלי רב עוצמה המאפשר שליטה על מהירות טעינת האתר, שכתוב כתובות URL, ניהול הפניות 301 ואחרות ועוד שפע של הגדרות
  • הטמעה חלקה (seamless) מול וורדפרס, מג'נטו ומערכות ניהול תוכן אחרות מבוססות LAMP
  • יכולת לשלוח HTTP Headers בלי הגדרות שרת נוספות (משמעותי מבחינת SEO, למשל במקרה של Vary HTTP header שמספק לגוגל מידע אודות אתרים מותאמים למובייל עם תוכן שונה, Dynamic Serving)
  • תמיכה מלאה בכתובות URL בעברית (בתנאי שהקובץ מקודד ב-unicode)
  • עריכה באמצעות עורך טקסט פשוט דוגמת Notepad++
  • תקן אינטרנטי ותיק מאוד עם שפע של תמיכה בכל סוגי קונפיגורציות

חסרונות

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

אם כן, נראה שהיתרונות של htaccess עולים על החסרונות, ובחלק גדול מן המקרים זה אכן כך. וורדפרס למשל, היא מערכת ניהול התוכן הנפוצה ביותר בעולם ובחירה טבעית כמעט עבור כל אתר תוכן. וורדפרס עצמה מצהירה כי המערכת אמנם תעבוד על שרת Nginx (או IIS עם התקנת PHP ו-MySQL) אבל הסביבה הטבעית והטובה ביותר עבורה היא סביבת LAMP, כלומר Linux, Apache, MySQL, PHP ואין שום יתרון למעבר ל- Nginxאו כל שרת אחר.

הנה דוגמאות לכמה מן הפעולות הנפוצות ביותר שניתן לבצע בעזרת htaccess

לפני שנתחיל עם הדוגמאות זכרו: לסדר הפעולות ב-htaccess יש חשיבות קריטית. במידה ופעולה מסוימת לא עובדת נסו לשנות את המיקום שלה בקובץ.

הפניות 301/302 לעמודים סטאטיים

עבור הפניה של עמוד סטאטי ללא פרמטרים ב-URL, ההפניה היא פשוטה וקלה:

Redirect 301  /my-page.php http://www.example.com/my-other-page.php

Redirect 302  /my-page.php http://www.example.com/my-temporary-page.php

כל מה שנדרש הוא רווח בין הפניה להפניה.

הפניות 301/302 לעמודים דינאמיים

אם העמוד שלכם כולל כתובת דינאמית עם פרמטרים ב-URL, תוכלו להשתמש בפונקציה הבאה, כאשר page.php הוא העמוד הנוכחי שלכם ופרמטר id הוא הפרמטר שמצטרף אליו כדי לזהות את העמוד.

RewriteCond %{QUERY_STRING} ^id=100$

RewriteRule ^page.php$ http://www.example.com/new-page.aspx? [R=301,L]

עבור עמודים מרובי פרמטרים תוכלו להוסיף כאוות נפשכם לפי הדוגמא הבאה:

RewriteCond %{QUERY_STRING} ^section_id=100&article_id=50$

RewriteRule ^index.aspx$ http://www.example.com/my-new-page.php? [R=301,L]

במקרה זה index.aspx הוא שם העמוד הנוכחי שכולל שני פרמטרים ב-URL: section_id ו- article_i.

מעבר מגרסת אתר עם WWW לבלי WWW וההפך

רוצים שהאתר שלכם יוצר אך ורק בגרסת WWW, הנה הקוד המתאים:

#only www:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

הצגת האתר ללא תחילית WWW:

#no www:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]

RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

הצגת אתר עם תחילית HTTPS בלבד:

RewriteEngine On

RewriteCond %{SERVER_PORT} 80

RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

או לחלופין:

RewriteCond %{HTTPS} !on

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


למידע נוסף על מעבר לאתר מאובטח SSL

שיפור מהירות טעינת האתר

כפי שנכתב למעלה, htaccess יכול להאט את קצב טעינת האתר מכמה סיבות:

  1. בכל שרת Apache קובץ ה- htaccessנטען במלואו עבור כל תיקייה שקיימת לפני תיקיית השורש בה נמצא האתר. המשמעות היא קריאות מיותרות לשרת והאטה מסוימת בקצב טעינת האתר
  2. קובץ htaccess שמכיר מאות או אלפי הפניות 301 ייסרק על ידי השרת במלואו לפני טעינת כל דף, מה שיכול להאט את האתר באופן משמעותי.

לבדיקת מהירות האתר שלהם והשפעת ההפניות עליו השתמשו בכלי בדיקת המהירות של גוגל (PageSpeed Insights) וכן בדוחות אנליטיקס המציגים את מהירות האתר: תזמוני דף והצעות מהירות.

יחד אם זאת, אם שומרים על תקינות וניקיון הקובץ ככל האפשר ומשתמשים בהגדרות הנכונות כדי להפעלת GZIP ו-CACHE ניתן לשפר באופן משמעותי את מהירות הטעינה של כל אתר:

<IfModule mod_headers.c>

# 6 Months - determine the file types and length of cache

<FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">

Header set Cache-Control "max-age=15552000"

</FilesMatch>

# WEEK

<FilesMatch "\.(js|css|swf)$">

Header set Cache-Control "max-age=604800"

</FilesMatch>

# 1 Day

<FilesMatch "\.(html|htm|txt|asp|aspx|php)$">

Header set Cache-Control "max-age=86400"

</FilesMatch>

</IfModule>

<ifModule mod_gzip.c>

mod_gzip_on Yes

mod_gzip_dechunk Yes

mod_gzip_item_include file \.(html|txt|css|js|php|pl|asp|htm|aspx)$

mod_gzip_item_include handler ^cgi-script$

mod_gzip_item_include mime ^text/.*

mod_gzip_item_include mime ^application/x-javascript.*

mod_gzip_item_exclude mime ^image/.*

mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

</ifModule>

<ifmodule mod_deflate.c>

AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript

</ifmodule>

חסימת כתובת IP

order allow,deny

#block single IP address

deny from 192.168.0.1

#block IP range

deny from 192.168.1.

allow from all

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

שימושים מתקדמים ב-htaccess – חלק שני

חסימת User Agents

הדוגמא הראשונה נועדה למנוע מ-user agents כאלה ואחרים לסרוק את האתר שלנו. למה שנרצה לעשות דבר כזה (אלא אם יש לנו אתר פרטי)? בעיקר כדי למנוע סריקה לא רצויה של האתר מתוכנות צד שלישי דוגמת Screaming Frog. נכון, ניתן לשנות את ה-user agent באופן ידני, אבל רוב המשתמשים לא מודעים לכך וכן נוכל לנסות למנוע מכמה שיותר תוכנות, סקרייפרים (scrapers) ומנועים שאינם מנועי חיפוש לסרוק את האתר שלנו, להגדיל את העומס עליו ולבנות עלינו מאגר מידע אוטומטי.

בדוגמא הבאה תוכלו לראות שאנו חוסמים בין השאר את ה-user agent של screaming frog, ahrefs, majestic seo ואחרים.  זו לא הדרך היחידה שניתן לחסום user agents שונים אבל היא הפשוטה ביותר:

RewriteEngine On

SetEnvIfNoCase user-agent "ahrefsbot" bad_bot

SetEnvIfNoCase user-agent "MJ12bot" bad_bot

SetEnvIfNoCase user-agent "BacklinkCrawler" bad_bot

SetEnvIfNoCase user-agent "HTTrack" bad_bot

SetEnvIfNoCase user-agent "^Screaming\ Frog\ SEO" bad_bot

SetEnvIfNoCase user-agent "SearchmetricsBot" bad_bot

SetEnvIfNoCase user-agent "seokicks" bad_bot

SetEnvIfNoCase user-agent "sistrix" bad_bot

SetEnvIfNoCase user-agent "sitebot" bad_bot

SetEnvIfNoCase user-agent "^SuperHTTP" bad_bot

SetEnvIfNoCase user-agent "^WebLeacher" bad_bot

SetEnvIfNoCase user-agent "^WebReaper" bad_bot

SetEnvIfNoCase user-agent "^WebSauger" bad_bot

SetEnvIfNoCase user-agent "^Website\ eXtractor" bad_bot

SetEnvIfNoCase user-agent "^WebWhacker" bad_bot

SetEnvIfNoCase user-agent "^WebZIP" bad_bot

SetEnvIfNoCase user-agent "^Wget" bad_bot

<FilesMatch "(.*)">

Order Allow,Deny

Allow from all

Deny from env=bad_bot

</FilesMatch>

הפניה לעמודי שגיאה מעוצבים אישית

אחת השגיאות הנפוצות ביותר בקרב בוני אתרים ומקדמי SEO היא הנטייה להתעלם מעמודי שגיאה מעוצבים אישית. עמוד השגיאה הגנרי של השרת אינו מניע לפעולה, אינו מעוצב לפי השפה העיצובית של האתר וכמעט תמיד יבריח את המשתמשים החוצה, לעיתים מבלי שיטרחו לחזור.

דוגמא שימושית אחת לשגיאת שרת 503 (האתר ירד לצרכי תחזוקה) היא לשים טיימר המורה לגולשים כמה זמן נשאר עד לעליית האתר לאוויר, ויש כמובן דוגמאות יצירתיות רבות אחרות. בצד השרת, כל מה שנותר לנו הוא לייצר את ההפניות ב-htaccess לעמודי השגיאה שלנו:

ErrorDocument 404 /my-original-404-page.html

ErrorDocument 503 /my-original-503-page.html

מעבר לדומיין חדש

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

Example.com/my-page.php

Mynewsite.com/my-page.php

במידה ונשמור על כתובת עמודים זהות, כל מה שצריך לכתוב ב-htaccess אלה השורות הבאות:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com [NC,OR]

RewriteCond %{HTTP_HOST} ^www.example.com [NC]

RewriteRule ^(.*)$ http://mynewsite.com/$1 [L,R=301,NC]

או לחלופין:

RewriteEngine On

RewriteRule ^(.*)$ http://www.mynewsite.com/$1 [R=301,L]

הכתובות של העמודים כן השתנו? תנחומינו, יש לכם בעיה קטנה שכרוכה במיפוי כל עמודי האתר הישן ובניית קובץ שיכיל את כל ההפניות באופן ידני – עבודה מפרכת שלא רק תאט את קצב הטעינה של האתר אלא גם חשופה לשגיאות אנוש רבות ועלולה לעלות במיקומי SEO יקרי ערך.

שמירה על רוחב פס והעתקת תמונות

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

Options +FollowSymlinks

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/ [nc]

RewriteRule .*.(gif|jpg|png|jpeg|mp4)$ http://example.com/images/not-allowed.jpg[nc]

עוד כמה הנחיות לעזרה ב-SEO, חלק שלישי קצר ואחרון

עד כה פירטנו לא מעט תגיות שעוזרות עם SEO: שיפור במהירות טעינת האתר, עזרה במעבר דומיין, מניעת כפילות עמודים בין גרסאות www/no ww, הפניות 301 ועוד. בחלק האחרון נביא עוד כמה דוגמאות למיטיבי הלכת שביניכם.
תגית קנוניקל (rel=canonical) למסמכי PDF או תמונות עם HTTP Header

Header add Link '<http://www.example.com/download-pdf.php>; rel="canonical"'

תגית X-Robots ב- HTTP header

Header set X-Robots-Tag "noindex, nofollow"
Header set X-Robots-Tag: unavailable_after: 01 Jun 2015 15:00:00 PST

אחרית דבר

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