Развитие SEO — смерть SEO?



Написать этот пост побудила сообщение Михаила Шакина SEO прогноз на 2011 год. Михаил, несомненно, самый известный специалист в области продвижения сайтов Рунета. Он систематизировал и грамотно записал те мысли, что уже несколько месяцев ходят в сети при анализе последних изменений Яндекса: Совершенствование алгоритмов поисковых систем снижает вес внешних коммерческих ссылок и повышает роль качественного содержания сайта.
У меня уже пару месяцев в голове бродит крамольная мысль о том, что работа -специалиста, в идеале, должна проводится на этапе создания сайта (координация действий разработчиков в целях учета требований поисковой оптимизации и создания некоего «кодекса контента» — списка ключевых слов и фраз и правил оформления статей для контент-менеджеров). И, естественно, он же работает на этапе запуска сайта в сети: регистрация в каталогах, рассылках и др. Причем, рекламная фраза «регистрация сайтов в миллионе каталогов» является бесполезной и, даже, вредной — регистрация должна быть исключительно в тематических каталогах, лишние нецелевые ссылки могут навредить.
В дальнейшем поддержка и продвижение сайта передается контент-менеджеру, в задачи которого входит написание интересных продающих статей и работа с посетителями и потенциальными клиентами на форуме сайта, на тематических форумах и социальных сетях.
SEO оптимизаторы must die? Да здравствуют копирайтеры?

Динамическое меню с jQuery



Сегодня хочу рассказать о динамическом формировании меню HTML-страницы.
Зачем это нужно? Предположим, вы создаете страничку, демонстрирующую фотоальбомы, и хотели бы формировать меню сайта в зависимости от таких альбомов. При этом изменять код каждый раз, когда добавится новый альбом или владелец сайта изменит название или структуру http://www.beloll.ru/wp-admin/edit.phpальбома исправлять код не самое лучшее решение. Гораздо удобнее использовать технику формирования динамического меню.
Итак, начнем.
Для обучения создадим файл topmenu.xml, в котором и будут храниться пункты будущего меню.

<?xml version="1.0" encoding="utf-8"?>
<menu title="Тестовая страница">
  <menuitem>
	<label>Меню1</label>
	<link>#page1</link>
  </menuitem>
  <menuitem>
  	<label>Меню2</label>
	<link>#page2</link>
  </menuitem>
  <menuitem>
  	<label>Меню3</label>
	<link>#page3</link>
  </menuitem>
 </menu>

Файл имеет простую структуру: кроме заголовка, который также можно отображать на странице, здесь содержатся названия пунктов меню и ссылки.
Читать полностью

Работаем c Google календарем на JavaScript.



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

Зачем это нужно? Хочется предоставить возможность ведения календаря многим людям, имеющим разную степень компьютерной грамотности и не разрабатывать  административную часть связанную с редактированием, поиском, добавлением событий. Пусть этим занимаются профессионалы Google, мы же воспользуемся результатами их труда.

В качестве средства работы с календарем используем и события календаря будем выводить на веб-страницу.
Для начала подготовим заготовку для нашей страницы:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  </head>
  <body>
    <div id="calendarTitle"></div>
    <div id="events"></div>
    <div id="content" style="width:100%;height:380px">Загрузка...  </div>
  </body>
</html>

Затем в заголовок страницы между тегами <head> и </head> добавляем код работы с календарем.
Первым делом подключаем библиотеку Google API:

<script type="text/javascript">
google.load("gdata", "2.x");

Первым параметром функции load идет название библиотеки, вторым — ее версия.
Затем описываем функцию инициализации библиотеки:

function init() {
// инициализируем Google библиотеку, устанавливая обработчик ошибок
  google.gdata.client.init(handleGDError);
// выводим календарь
loadCalendar();
}

Далее, обработчик ошибок:

function handleGDError(e) {
  document.getElementById('content').setAttribute('style',   'display:none');
  if (e instanceof Error) {
  // выводим модальное окно со строкой, файлом и текстом ошибки
    alert('Ошибка в строке ' + e.lineNumber +  ' в ' + e.fileName + '\n' + 'Сообщение: ' + e.message);
    // если доступно, выводим HTTP код ошибки и строку статуса
    if (e.cause) {
      var status = e.cause.status;
      var statusText = e.cause.statusText;
      alert(Ошибка HTTP ' + status + ' с текстом: ' +
statusText);
    }
  } else {
    alert(e.toString());
  }
}

Далее пишем функцию запроса к календарю:

function loadCalendar() {
  var calendarUrl = "http://www.google.com/calendar/feeds/u0upesqc5es2opgjslm9sao53840group.calendar.google.com/public/basic/"
  //Указываем фид (адрес) реального календаря  Google. Получить его можно в окне управления календарем.
  var service = new google.gdata.calendar.CalendarService("gdata-js-client-samples-simple");
  //Создаем сервис календаря (параметр функции - любая строка.
  var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
  //Создаем запрос к календарю. Это и дальнейшее очень напоминает работу с базой данных
  var startMin = google.gdata.DateTime.fromIso8601("2010-01-07T00:00:00.000-08:00");
  var startMax = google.gdata.DateTime.fromIso8601("2010-12-31T00:00:00.000-08:00");
  query.setMinimumStartTime(startMin);
  query.setMaximumStartTime(startMax);
  //Устанавливаем диапазон дат событий, которые хотим получить
  query.setOrderBy("starttime");
  query.setSortOrder("ascending");
  //Устанавливаем поле и порядок для сортировки данных
  query.setSingleEvents(false);
  //Устанавливаем способ выдачи событий календаря: true - отдельными событиями, false - списком
  service.getEventsFeed(query, listEvents, handleGDError);
  //Выполняем запрос и назначаем процедуру обработки данных в случае успеха, и знакомый нам обработчик ошибок
}

Далее идет собственно обработка событий календаря и вывод на страницу:

function listEvents(feedRoot) {
  var entries = feedRoot.feed.getEntries();
  var eventTable=document.getElementById('events');
  document.getElementById('jsSourceFinal').setAttribute('style',
      'display:none');
  if (eventTable.childNodes.length > 0) {
    eventTable.removeChild(eventTable.childNodes[0]);
  }
  document.getElementById('calendarTitle').innerHTML =   "Календарь: " + feedRoot.feed.title.$t;
  //Выводим название календаря
  var tr = eventTable.insertRow(i);
  tr.setAttribute('bgcolor','#ccffcc');
  var len = entries.length;
  var j = 0;
  for (var i = 0; i < len; i++) {
    var entry = entries[i];
    var title = entry.getTitle().getText();
    var place = entry.getContent().getText();
    var startDateTime = place.substring(6,place.indexOf('')-1).trim();
    place = place.substr(place.indexOf('Место:')+7);
    var age = place.substr(place.indexOf('Описание мероприятия:')+21);
    place = place.substr(0,place.indexOf('')-1).trim();
    var endDateTime = startDateTime.substr(startDateTime.indexOf('-')+1);
    endDateTime = endDateTime.substr(endDateTime.indexOf(',')+1).trim();
    endDateTime = endDateTime.substr(0,endDateTime.indexOf(' '));
    if (startDateTime.indexOf('-')>0){
      startDateTime = startDateTime.substr(0,startDateTime.indexOf('-')-1);
    }
    startDateTime = startDateTime.substr(startDateTime.indexOf(',')+1).trim();
    var startMonth = startDateTime.substr(startDateTime.indexOf(' ')+1,3).trim();
    startDateTime = startDateTime.substr(0,startDateTime.indexOf(' '));
    tr = eventTable.insertRow(j++);
    tr.setAttribute('bgcolor','ffffff');
    td = tr.insertCell(0);
    td.appendChild(document.createTextNode(startMonth));
    td = tr.insertCell(1);
    if(startDateTime==endDateTime){
      td.appendChild(document.createTextNode(startDateTime));
    }else{
      td.appendChild(document.createTextNode(startDateTime + '-' + endDateTime));
    }
    td = tr.insertCell(2);
    td.appendChild(document.createTextNode(title));
    td = tr.insertCell(3);
    td.appendChild(document.createTextNode(age));
    td = tr.insertCell(4);
    td.appendChild(document.createTextNode(place));
  }
}

Здесь мы работаем с краткой версией событий — это уменьшает трафик, но требует некоторых усилий по парсингу результата. Можно получать полноформатные события и в следующих статьях мы рассмотрим работу с таким форматом данных.
И в конце последней строкой скрипта запускаем процедуру инициализации, которая запустит механизм обработки календаря после загрузки библиотеки Google:
google.setOnLoadCallback(init);
Вот и все. В дальнейшем планирую рассказать о работе с Google календарем на PHP и Java.

Привет, мир!

Итак, это первая запись в моем новом блоге.

Я долго думал, как назвать блог. Я занимаюсь Интернет-технологиями. Это значит всем понемногу — программированием, дизайном, версткой, оптимизацией, написанием статей и многим другим. Очень часто для выполнения какой-либо работы приходится перекапывать тысячи интернет ресурсов в поисках полезной информации и этой найденной информацией хочется делиться с другими. Чтобы быть полезным для тех, кто будет решать аналогичные задачи.

Надеюсь в этом блоге читатели найдут для себя полезную информацию. Я же надеюсь систематизировать собственные знания и углубить их с помощью комментариев посетителей.

С наступающим всех новым 2011 годом!!!

Страница 4 из 41234
Наверх


Информация

Вы можете изменить это предложение в настройках темы в админке WordPress.