Наша команда-партнер Artmisto
Гэты падручнік пакажа вам, як індэксаваць ваша прыкладанне ў пошукавых сістэмах. Як аўтар, я лічу, што серверы павінны быць цалкам незалежнымі ад кліента ва ўзросце API. Што паскарае развіццё для пастаянна расце масіва кліентаў. Менавіта на плечы пошукавых сістэм, каб адпавядаць, і яны не павінны дыктаваць, як палатно захоўваецца і даступна.
У 2009 годзе Google выпусціла ідэю ацалелыя фрагменты ,
Ідэя проста пра тое, што калі пошукавік павінен прыйсці праз прыкладанне JavaScript, то ў вас ёсць дазвол на перанакіроўваць пошукавую сістэму на іншую URL, які служыць цалкам апрацаваную версію старонкі (бягучыя пошукавыя сістэмы не могуць выконваць шмат JavaScript (Некаторыя людзі спекулююць што Google Chrome быў народжаны ад пошуку Google, якая хоча паспяхова аказваць кожную вэб-старонку, каб атрымаць ajaxed ўтрымання)).
Як перанакіроўваць боты працуюць?
Выкарыстоўваючы сучасныя браўзэры абезгалоўленае, можна лёгка вярнуць цалкам адлюстроўваецца змесціва кожнага запыту, перанаправіўшы ботамі, выкарыстоўваючы нашу канфігурацыю вэб-сервераў. Вось малюнак, зробленае з дапамогай Google, якая паказвае ўстаноўку.
Рэалізацыя з выкарыстаннем Phantom.js
Phantom.js з'яўляецца абезгалоўленых WebKit браўзэр. Мы збіраемся наладзіць сервер Node.js, што дадзены URL-адрас, ён будзе цалкам візуалізаваць змесціва старонкі. Тады мы будзем перанакіроўваць боты на гэты сервер, каб атрымаць правільнае змест.
Вам трэба будзе ўсталяваць Node.js і phantom.js на скрыню. Затым запусціце гэты сервер ніжэй. Ёсць два файла, адзін з якіх з'яўляецца вэб-сервер, а другі з'яўляецца phantomjs скрыпт, які адлюстроўвае старонку.
// web.js // Экспрэс наш вэб-сервер, які можа апрацоўваць запыт вар экспрэс = патрабуецца ( «экспрэс»); вар прыкладанне = экспрэс (); вар getContent = функцыя (URL, выклік) {вар ўтрыманне = ''; // Тут мы нераст працэс phantom.js, першы элемент масіва // наш phantomjs сцэнар і другі элемент нашага URL вар фантом = патрабуецца ( «child_process»). Міцэліем ( «phantomjs», [ 'phantom- server.js ', URL]); phantom.stdout.setEncoding ( 'utf8'); // Наш phantom.js скрыпт проста пратакаляванне выснову // і мы дасягаем яго тут праз стандартны вывад phantom.stdout.on ( «даныя», функцыя (дадзеныя) {ўтрыманне + = data.toString ();}); phantom.on ( 'выхад', функцыя (код) {калі (код == 0) {console.log ( 'У нас ёсць памылка!');} яшчэ {// як толькі наш phantom.js скрыпт завяршае працу, давайце заклікаць // зваротны выклік, які выводзіць змесціва на старонку зваротнага выкліку (кантэнту);}}); }; вар адказаць = функцыя (Req, Рэз) {// Паколькі мы выкарыстоўваем [P] у HTAccess мы маем доступ да гэтага загаловак URL = 'HTTP: //' + req.headers [ 'х-перасылаюцца-хост'] + REQ. PARAMS [0]; getContent (URL, функцыя (змест) {res.send (змест);}); } App.get (/(.*)/, рэагаваць); app.listen (3000);
Прыведзены ніжэй сцэнар з'яўляецца фантомным server.js і будзе адказваць цалкам прайгравання кантэнту. Мы не вяртаем змест, пакуль старонка цалкам аказаны. Мы уклініцца слухача рэсурсаў, каб зрабіць гэта.
вар старонка = патрабуецца ( «сайт») стварыць (). Сістэма патрабуе зменнай = ( «сістэмы»); вар lastReceived = новая дата () GetTime (). вар requestCount = 0; вар responseCount = 0; вар requestIds = []; вар = новы пачатковы прамежак Date () GetTime (). page.onResourceReceived = функцыя (адказ) {калі (requestIds.indexOf (response.id) == -1) {lastReceived = новая дата () GetTime (). responseCount ++; requestIds [requestIds.indexOf (response.id)] = NULL; }}; page.onResourceRequested = функцыя (запыт) {калі (requestIds.indexOf (request.id) === -1) {requestIds.push (request.id); requestCount ++; }}; // Адкрыць старонку page.open (system.args [1], функцыя () {}); вар checkComplete = функцыя () {// Мы не дазваляюць яму заняць больш часу, чым на 5 секунд, // але не вяртаюць, пакуль усе запыты не скончаны, калі ((новая дата () GetTime () -. lastReceived> 300 && requestCount === responseCount) || новы Date () GetTime () - пачатковы час> 5000) {clearInterval (checkCompleteInterval). console.log (page.content); phantom.exit (); }} // Пераканаемся, каб убачыць, калі старонка скончана рэндэрынгу вар checkCompleteInterval = setInterval (checkComplete, 1);
Пасля таго як мы гэты сервер і працуе, мы проста перанакіраваць ботаў на сервер у канфігурацыі нашага кліента вэб-сервера.
перанакіраванне бот
Калі вы выкарыстоўваеце Apache, мы можам адрэдагаваць .htaccess такім чынам, што запыты Google будуць проксированные на нашы сярэднія чалавек phantom.js сервера.
(. *) RewriteEngine на RewriteCond% {QUERY_STRING} ^ _escaped_fragment _ = (. *) $ RewriteRule HTTP: // вэб-сервер: 3000 /% 1? [Р]
Мы маглі б таксама ўключаць у сябе іншыя RewriteCond, напрыклад, агент карыстальніка для перанакіравання іншых пошукавых сістэм, якія мы хочам індэксавацца.
Хоць Google не будзе выкарыстоўваць _escaped_fragment_, калі не сказаць гэта альбо уключаючы мета-тэг; <META NAME = "фрагмент" змест = "!"> Ці з дапамогай #! URL-адрас у нашых спасылках.
Вы, хутчэй за ўсё, прыйдзецца выкарыстоўваць абодва.
Томас Дэвіс
Я працую з некалькімі праектамі з адкрытым зыходным кодам, а таксама працаваць у робат прамысловасці
https://ajaxdavis.com/
Як перанакіроўваць боты працуюць?
RewriteEngine на RewriteCond% {QUERY_STRING} ^ _escaped_fragment _ = (. *) $ RewriteRule HTTP: // вэб-сервер: 3000 /% 1?