Во вчерашней статье "Капля статистики: Gzip" я рассказала что решила собрать статистику частоты использования тега <!Doctype> в начале документов, попутно собрав статистику использования сжатия данных, в этой статье я расскажу что мы получили пропарсив все скачанные страницы.
Всего из рубрики яндекса "Создание сайтов" было скачано 1592 главных страницы сайтов (по состоянию на 24 апреля).
Итак... в ходе эксперемента были допущены некоторые некорректности, которые в следующий раз (я планирую собирать статистику каждый месяц) будут исправлены.
Во-первых, мы не учитывали server-side редиректы, т.е. не ходили по ссылкам Location: в хидерах, в итоге 102 файла были пустыми, из них некоторые сайты были вообще недоступны. Это означает что сайты использовали только server-side редирект, не выводя пользователю ссылку для перехода и сообщение об этом на случай если у пользователя не отключены редиректы, что не хорошо. Среди остальных непустых файлов были и те (30-40 сайтов), кто тоже использовали редирект, но при этом выдавал пользователю ссылку с перенаправлением. Придётся учесть их в статистике, всего 40 файлов меньше килобайта, однако среди них у нескольких попадаются и вполне осмысленное содержание. Например likes.kuban.ru или www.dewia.ru. Другого вида редиректы мы и не будем учитывать, например блог lasto.com/blog/ вообще сам на себя редиректит 1 раз почему-то, или например a-studio.ru.
Во-вторых мы скачивали только файлы с заголовком Content-type: text/html или text/xml. В результате у 5 сайтов страницы не скачались т.к. содержали заголовки text/plain (пример редиректа с этим заголовком www.actis.ru) и x-httpd-php. Это призывает веб-мастеров следить за заголовками.
В следующий раз можно будет ещё собрать статистику статус кодов полученных от сервера. Правильный статус код должен быть - 200. И за кодировками документа, например некоторые выдают cp1251 - что является ересью, ибо правильный вариант windows-1251.
Не многие веб-мастера также знают от том что в браузере IE доктайп должен начинатся прямо от начала документа, без пробелов и прочего. Проверьте сами, зайдите на www.shop-script.ru (или deviantart.com) в мозилле и в ie и введите в адресную строчку javascript:alert(document.compatMode); в мозилле будет CSS1Compat в IE - BackCompat (т.е. свёрстан "по-старинке").
Символ "<" оказался не в начале документа у 246 сайтов.
Итак, начнём собственно парсить =).
Метод - получить первый тег:
Ищем первое вхождение "<", если это тег "<?xml version="1.0" encoding="windows-1251"?>" или комментарий, то вырезаем и ищем дальше. Полученные теги проверяем насоответствие доктайпу.
На www.d-optima.ru вообще результат выполнения <?print_r($_SERVER)?> в комментариях в начале идёт. На www.x-lab.ru нам не удалось распознать gzip, так что 1 сайт исключается из статистики.
Итак потрудившись и сгруппировав всё, всего нашли 62 разных начальных тега. 33 из них и правда doctype =). Для заинтересованных выкладываю txt-файлы со списком: сортированные по доктайпу, и по количеству. Файл только с доктайпами - doctypes_only_26.04.2009.txt.
Интересно что тегом <html> начинаются 511 сайтов =) (включая остальные теги 570), а с доктайпом html5 только 1 сайт (optimism.ru).
Всего сайтов содержащих объявление тега doctype - 918. Из них правильных объявлений - 578, неправильных 340.
Все доктайпы тестировались тут - dbaron.org/mozilla/tests/compat
Сводная таблица:
Doctype: | Количество: | Правильность: |
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> | 321 | valid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en"> | 189 | invalid |
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> | 123 | invalid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> | 103 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> | 88 | valid |
<!doctype html public "-//w3c//dtd html 4.01//en" "http://www.w3.org/tr/html4/strict.dtd"> | 23 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.1//en" "http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd"> | 18 | valid |
<!doctype html public "-//ietf//dtd html 2.0//en"> | 17 | invalid |
<!doctype html public "-//w3c//dtd html 3.2 final//en"> | 7 | invalid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3c.org/tr/1999/rec-html401-19991224/loose.dtd"> | 3 | valid |
<!doctype html public "-//w3c//dtd html 3.2//en"> | 2 | invalid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd"> | 2 | valid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/strict.dtd"> | 2 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.1 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http:www.w3.org/tr/html4/loose.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 4.01//en"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 frameset//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-frameset.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/rec-html40/loose.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 4.01 //en" "http://www.w3.org/tr/html4/strict.dtd"> | 1 | valid |
<!doctype html public "-//ietf//dtd html 3.2//ru"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 3.2 final//ru"> | 1 | valid |
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> | 1 | invalid |
<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "dtd/xhtml1-strict.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.1//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml11.dtd"> | 1 | valid |
<!doctype html> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" <html> | 1 | invalid |
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml2/dtd/xhtml1-strict.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/2002/rec-xhtml1-20020801/dtd/xhtml1-transitional.dtd"> | 1 | valid |
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml/dtd/xhtml-transitional.dtd"> | 1 | valid |
По состоянию на 24.04.2009 |
Заметьте что доктайп <!doctype html public "-//w3c//dtd html 3.2 final//en"> не будет правильным в отличие от //ru. Правильно писать <!doctype html public "-//w3c//dtd html 3.2 final//en-US">.
Результат исследования:
Несмотря на то что мы проанализировали сайты исключительно компаний профессионально занимающихся созданием сайтов, результат с огрехами будет применителен ко всему сигменту рунета. 918 из 1592 компаний (58%) знают что существует такая штука как doctype. Но 340 из 918 (37%) пока не знают как им пользоваться. Всего же веб-стандартов придёрживаются 578 из 1592 (36%) компаний. У 15% сайт начинается с пробела (а ещё у многих с комментария), вот вам забота об эксплорере. В целом 37% это очень даже неплохо конечно. В конце следующего месяца я и коллеги постараемся сделать анализ doctype эдак 10000 сайтов из числа наиболее посещаемых например.
UPD: посмотрите свежий сбор статистики, за 16.06.2009.
Комментарии:
nnn
10.07.2009 20:48:48