Наша команда-партнер Artmisto
Цей підручник покаже вам, як індексувати вашу програму на пошукових системах. Як автор я вважаю, що сервери повинні бути повністю незалежними від клієнта у віці API. Що прискорює розвиток для постійно зростаючого кола клієнтів. Це на плечах пошукових систем, щоб відповідати, і вони не повинні диктувати, як веб зберігається і доступ.
У 2009 році компанія Google випустила ідею уникли фрагментів .
Ідея просто стверджувати, що якщо пошукова система повинна стикатися з вашою програмою JavaScript, тоді ви маєте дозвіл перенаправити пошукову систему на іншу URL-адресу, яка обслуговує повністю рендеризованную версію сторінки (поточні пошукові системи не можуть виконати багато JavaScript (деякі люди спекулюють що Google Chrome народився з Пошуку Google, який бажає успішно відтворити кожну веб-сторінку, щоб отримати вміст, розміщений на сайті))
Як працює перенаправлення ботів?
Використовуючи сучасні безголосні браузери, ми можемо легко повернути повністю відтворений вміст на запит, перенаправляючи роботів за допомогою конфігурації наших веб-серверів. Ось зображення, зроблене Google, яке відображає налаштування.
Реалізація за допомогою Phantom.js
Phantom.js - це безкрупний веб-браузер. Ми збираємося налаштувати сервер node.js, який надає URL, він повністю відобразить вміст сторінки. Потім ми перенаправляємо ботів на цей сервер, щоб отримати правильний вміст.
Вам потрібно буде встановити node.js і phantom.js на вікно. Потім запустіть цей сервер нижче. Є два файли, один з яких є веб-сервером, а інший - phantomjs-скрипт, який відображає сторінку.
// web.js // Express - наш веб-сервер, який може обробляти запит var express = require ('express'); var app = express (); var getContent = функція (url, callback) {var content = ''; // Тут ми породимо процес phantom.js, першим елементом масиву // є наш скрипт phantomjs, а другим - url var phantom = require ('child_process'). Spawn ('phantomjs', ['phantom- server.js ', url]); phantom.stdout.setEncoding ('utf8'); // Наш скрипт phantom.js просто реєструє вивід і // ми маємо доступ до нього через stdout phantom.stdout.on ('data', function (data) {content + = data.toString ();}); phantom.on ('exit', функція (code) {if (code! == 0) {console.log ('У нас є помилка');} else {// після завершення нашого скрипта phantom.js call back //, який виводить вміст до зворотного виклику сторінки (content);}}); }; var respond = function (req, res) {// Оскільки ми використовуємо [P] в htaccess, ми маємо доступ до цього заголовка url = 'http: //' + req.headers ['x-forwarded-host'] + req. params [0]; getContent (url, function (content) {res.send (content);}); } app.get (/(.*)/, відповідь); app.listen (3000);Сценарій нижче phantom-server.js і буде відповідати за повну рендеринг вмісту. Ми не повертаємо вміст, поки сторінка не буде повністю виведена. Для цього ми підключаємо слухача ресурсів.
var page = require ('webpage'). create (); var system = require ('system'); var lastReceived = new Дата (). getTime (); var requestCount = 0; var responseCount = 0; var requestIds = []; var startTime = new Дата (). getTime (); page.onResourceReceived = function (response) {if (requestIds.indexOf (response.id)! == -1) {lastReceived = new Date (). getTime (); responseCount ++; requestIds [requestIds.indexOf (response.id)] = null; }}; page.onResourceRequested = function (request) {if (requestIds.indexOf (request.id) === -1) {requestIds.push (request.id); requestCount ++; }}; // Відкрити сторінку page.open (system.args [1], function () {}); var checkComplete = function () {// Ми не дозволяємо, щоб це зайняло більше 5 секунд, але // не повертається, поки всі запити не будуть завершені, якщо ((нова дата (). getTime () - lastReceived> 300 && requestCount === replyCount) || new Date (). getTime () - startTime> 5000) {clearInterval (checkCompleteInterval); console.log (page.content); phantom.exit (); }} // Давайте перевіримо, чи закінчена сторінка візуалізації var checkCompleteInterval = setInterval (checkComplete, 1);Після запуску цього сервера ми просто перенаправляємо ботів на сервер у конфігурації веб-сервера нашого клієнта.
Перенаправлення ботів
Якщо ви використовуєте apache, ми можемо відредагувати файл .htaccess таким чином, щоб запити Google проксірували на наш сервер phantom.js для середньої людини.
RewriteEngine на RewriteCond% {QUERY_STRING} ^ _escaped_fragment _ = (. *) $ RewriteRule (. *) Http: // веб-сервер: 3000 /% 1? [P]Ми могли б також включити інші RewriteCond, такі як агент користувача для перенаправлення інших пошукових систем, на які ми хочемо індексуватись.
Хоча Google не використовуватиме _escaped_fragment_, якщо ми не скажемо це, включаючи мета-тег; <meta name = "fragment" content = "!"> або за допомогою #! URL-адреси в наших посиланнях.
Швидше за все, вам доведеться використовувати обидва.
Томас Девіс
Я працюю з кількома проектами з відкритим кодом, а також працюю в промисловості безпілотних літаків
https://ajaxdavis.com/
RewriteEngine на RewriteCond% {QUERY_STRING} ^ _escaped_fragment _ = (. *) $ RewriteRule (. *) Http: // веб-сервер: 3000 /% 1?