суббота, 31 мая 2008 г.

SEO редиректы. HTTP status codes. PHP. Apache

Памятка для SEOшников о редиректах

- Девушка, а как пройти в библиотеку? (с)

В последнее время что-то слишком часто приходится сталкиваться с редиректами. Поэтому сделаю я-ка памятку по ним, чтоб каждый раз не гугл не мучить одними и теми же запросами.

Погнали. Сначало? каратенька минут на 40 :) определимся, что есть редирект?

Редирект - это процесс перенаправления посетителя на другую страницу. Перенаправление осуществляется вебсервером посредством помещения соответствующего HTTP-кода в заголовок HTTP-запроса. Так вот, оказывается, HTTP-кодов, отвечающих за редирект аж целых 7 штук. Перечислю их:

[Redirection 3xx]
300="Multiple Choices"
301="Moved Permanently"
302="Found" (e.g. )
303="See Other"
304="Not Modified"
305="Use Proxy"
306="(Unused)"
307="Temporary Redirect"

Охренеть. До сего момента понятия не имел что их столько. Ээх, говорила мне мама: "Cынок! Читай RFC'ы внимательно, пригодится же" :) Короче, кому интересно, подробней про редиректы со словариком можно почитать в спецификации протокола HTTP/1.1.

Нам же братьям SEOшниками, все знать не обязательно, достаточно двух основных: 301 и 302 редиректы.

Итак, редирект 301-ый, он же "Permanent Redirect", он же "Moved Permanently". Используется в случаях когда, необходимо сменить домен или отдельно взятую страницу на другое постоянное место жительство, для склейки имени сайта с www и без него. Данный редирект говорит браузеру (или поисковому боту), что запрашиваемая страница НАВСЕГДА перенесена в другое место назначения, и перенаправляет на это другое место. Причем при таком редиректе происходит, так называемая, склейка, сущность которой состоит в перетекании PR'ов и тИЦ'ей и других различных рейтигов поисковых систем со страниц старого домена, на страницы нового. Про смену доменов со склейкой ещё можно почитать у Dimox'a.

Далее, редирект 302-ый, вот здесь с погонялами 302-го редиректа некоторый кавардак. В основном все SEOшники на своих блогах называют его "Moved Temporarily" или "Temporary Redirect", хотя по спецификации должен быть "Found". Дело в том, что первые руководствовались устарелым RFC2068, правильнее было бы полагаться на название описанное в актуальном на текущий момент RFC2616.

С измененными названиями редиректа вроде как разобрались. Тем не менее смысл этого редиректа ничуть не изменился и заключается лишь в том, что запрашиваемая страница перенесена в другое место назначения ВРЕМЕННО. В следствии чего склейка не происходит, слив PR'ов и тИЦ'ей не засчитывается :) Однако некоторые продолжают спорить с данным утверждением и говорят об обратном, так как раньше поисковые системы хреново обрабатывали данный редирект и смышленные SEO-hijacker'ы умудрялись поиметь гугл и развести его на халявный PR. У Kass'a можно почитать про хитрожопые клоакинг-склейки (но походу нынче уже не действенные).


В общем с редиректами определились.Теперь непосредственно памятка по редиректам.

Редирект через meta-тэг "Refresh":

<meta http-equiv='Refresh' content='0; url=http://homelessinbelarus.com'>

Редирект через Javasript:

<script type="text/javascript">
<!--
window.location = http://homelessinbelarus.com";
//-->
</script>

Редирект с помощью PHP:

<?php
// 301 Moved Permanently
header("Location: http://homelessinbelarus.com", true, 301);
?>
<?php
// 302 Found
header("Location: http://homelessinbelarus.com", true, 302);
?>

Редирект через .htaccess (Apache HTTP Server)

# 301 Moved Permanently
Redirect 301 / http://homelessinbelarus.com

# 302 Found
Redirect 302 / http://homelessinbelarus.com

Внимание: при использовании клиентских редиректов (я их называют так потому что, они указываются в теле html документа, а не непосредственно в заголовке запроса). Так вот при их использовании по умолчанию редирект является 302ым. Будьте внимательны.


Update: доступно и с приколом о редиректах.

пятница, 9 мая 2008 г.

Консольный бэкап

не про SEO, но тоже нужно

Узнал от Тормоза о конкурсе про лучшую заметку о бэкапинге. Не претендую на лучшую, однако обнародую свою заметку о собственном методе бэкапа, который я успешно применял при резервном копировании критичных для меня и не только для меня данных.

Работая в свою бытность админом на одном из беларуских предприятиях, сопровождал я одну программулину производственного значения, на которой ежедневно сидело 2 отдела. Так вот, база данных этой программулины за 2 года обильного юзания разрослась до необъятного и важность информации, хранящейся в данной системе представителями отделов возносилась как грандиознейшая работа всех их жизней взятых вместе и сразу.

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

Я же был не таким легкомысленным и беспечным в отношении к своим органам и мне пришлось напрячь свой моск и придумать чего-нить этакого.

Итак, задача заключалась в следующем. Сделать так, чтобы по расписанию каждый день на любой виндовой тачке (будь-то серверной либо рабочей станции) производилось копирование критичных к потере данных из места источника в хранилище резервных данных. Скопированные данные, по возможности архивировать, так как винты-то не резиновые и разводить по архивам содержащие в своем наименовании дату произведенного бакапа.

Лениво было разбираться во всем этом зоопарке утилит для резервного копирования и я в виду тривиальности задачи решил обойтись простым консольным решением в виде обыкновенного bat-ника, используя стандартные команды интерпретатора (cmd.exe), штатную команду копирования винды (xcopy.exe) и консольный вариант самого популярного архиватора от Евгения Рошаля (rar.exe).

Посидев немного с ключами перечисленных утилит, у меня получился вот такой батничег:

>backup.bat


@echo off
rem Выводим текущее время
echo %TIME%
rem Создаю директорию вида DD.MM.YYYY
md "%DATE%"
rem Перехожу в созданную директорию
cd "%DATE%"
echo Копирую и сохраняю результат копирования в лог ...
xcopy d:\programulinа\* /s /f /z /c /exclude:..\exclude.txt > backup.log
rem /s - копирует все папки и подпапки, кроме пустых;
rem /f - отображает имена исходных и конечных файлов во время копирования;
rem /z - копирует сетевые файлы с возобновлением;
rem /c - продолжает копирование, даже если произошла ошибка;
rem /exclude: file1[+file2][+file3]... - указывает список файлов, содержащих строки.
rem Каждая строка должна находиться в отдельной линии в файлах. Если одна из строк
rem совпадает с любой частью абсолютного пути копируемого файла, то такой файл
rem копироваться не будет. Например, указывание таких строк, как \\obj\\ или .obj,
rem исключает из копирования все файлы в папке obj и, соответственно, все файлы с
rem расширением .obj;
rem Перехожу на папку выше
cd ..
echo %CD%
echo Архивирую...
rar a -df -r -ag+YYYY-MM-DD backup/b "%DATE%"
rem a - добавить файлы в архив;
rem -df - удалить файлы после архивации;
rem -r - рекурсивно с подкаталогами;
rem -ag[формат] -добавить к имени архива текущие дату и время;
echo Усё ý парадке, шеý.
echo %TIME%


В следующем файле перечислил все те части абсолютного пути, которые необходимо проигнорировать при копировании

>exclude.txt

\mr
\xz
\Recycled
\tmp
.wbk

при запуске батника производиться копирование файловой структуры из места источника (d:\programulinа\) в место назначение, в данном случае в директорию, где находиться сам батник.

Теперь необходимо сделать так, чтобы все это чудо технической мысли запускалось глубокой ночью, скажем в часика 3 ночи, когда все буду дрыхнуть без задних ног и видеть десятые сны. Для этого нам потребуется запустить, если она вдруг ещё не запущена, службу расписаний

>net start schedule

и с помощью консольного планировщика заданий (at.exe) сделать намеченое.

>at 03:03 /every:M,T,W,Th,F d:/backup/backup.bat

Проверим создалось ли расписание, для этого запустим at.exe без параметров

Статус Код  Дата                    Время         Командная строка
-------------------------------------------------------------------------------
1 Каждый M T W Th F 3:03 d:/backup/backup.bat

Вот в принципе и все. Как говориться, "зачем платить больше" и все такое.

Главное преимущество моего метода резервного копирования, заключается в том, что весь необходимый функционал, не считая планировщика задач, осуществляется с помощью 3-x подручных программ.

Что касается бакапа системы, то частенько прибегаю к архивированию данных состояния системы стандартной виндюшной тулзой Пуск>Программы>Стандартные>Служебные>Архивация Данных.

И вообще, дам очень полезный совет, который не раз спасал меня от неминуемой кастрации:

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

остановись ...


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

представь отчетливо, что будет если ты потеряешь курсач/проект/систему и т.д...

представил?...

теперь с радостным наслаждением о том, что это было лишь твоя фантазия делаешь бэкап курсача/проекта/системы.


Update: Недавно наткнулся на очень хорошую подборку статей от СПЕЦ ХАКЕРа. Выпуск специятельно посвящен вопросам бэкапинга и востановления данных.

Не скучайте.

PS. Всех, C Днем Великой Победы.


среда, 7 мая 2008 г.

Переезд на собственый домен на блогспоте

Для тех кто ещё не заметил, совсем недавно сменил блогспотовский домен на собственный. Собственно решил особо не заморачиваться с выбором имени домена и не мудрствуя лукаво просто отбросив .blogspot и получив в итоге homelessinbelarus.com. Полученный домен, к счастью, оказался не занятым. Вот его радимого я себе и взял.

Так что, расскажу как я его прописывал на данный блогспотовский бомжеблог. Возможно кому-нить и пригодиться. Признаюсь, что в премудростях записей DNS протоколов, никогда не разбирался, максимум, так это прописывал NS-сервера домена. Остальные записи типа A, МХ, CNAME для меня до сих пор темный лес. Так что, действовал по интуиции, так сказать методом проб и ошибок, особо не вдаваясь в подробности DNS записей.

Итак, исследуя англоязычную контекстную справку blogger’a:

A CNAME, or Canonical Name, record is an entry within the Domain Name System (DNS) that specifies where a user can find your web pages, or any other URL. You'll use this to associate your custom domain with your blog.

After registering your domain, decide if you want to use a particular subdomain for your blog. E.g. instead of www.mydomain.com you could use something like blog.mydomain.com, if you want. Then you'll create a corresponding CNAME record for that address, associating it with ghs.google.com. Keep in mind that changes to DNS records make take up to 48 hours to take effect.

становиться ясно, что в запись CNAME в админ-панели управления моим бомжедоменом надо прописать значение ghs.google.com.

Без вопросов. Надо - пропишем.

Так и сделал. Подождал два дня, столько говорят нужно ждать чтобы все подсосалось на корневых ДНС-серверах. Так вот через 2 дня, никто и нигде не прописался. Копаю дальше.

Отыскал на одном из форумов что нужно ещё прописать IPшник гугла в запись A, а именно mysite.com IN A 64.233.179.121. Несмотря особо на тот факт, что чувак с данного форума причитал неудачность данного решения, я решил, как уже говорил, методом тыка добавить предложенную запись.

Уже на завтра моему взору предстала страничка со следующим содержанием:

Server Not Found
Error 404

Это означало, что мой доменчег привязался алиасом на гугловский ghs.google.com, однако тот понятия не имел с каким же блогспотовским доменом его надо было связать.

Теперь было самое время идти в админку Blogger’a и менять блогспотовский домен на свой собственный.

После замены доменов, как мы уже наблюдаем, Blogger успешно заредиректил мой новый домен на блог.

Итак, в связи с этим резюмирую...


Чтобы успешно переехать на собственный домен на блогспоте мне пришлось добавить следующие DNS-записи:

homelessinbelarus.com. 	A 	64.233.179.121
www CNAME ghs.google.com
homelessinbelarus.com. NS ns1.x5x.ru.
homelessinbelarus.com. NS ns2.x5x.ru.

Возможно у других регистраторов все по-другому и проще. Но у меня было так.


Чюс.