Экономика стран

К сожалению, большинство людей, которые будут ими затронуты почти весь мир, не будут иметь никакого влияния на результат. Вести Экономика Дайджест иностранной прессы за 14 августа.
Вести Экономика Греции снова придется списывать долги Греция не сможет самостоятельно расплатиться по долгам, и понадобится новая реструктуризация долгов, чтобы спасти страну от банкротства.

SEO Friendly SPAs - ITNEXT

  1. Aplikacje jednostronicowe i SEO
  2. Ładne adresy URL
  3. Mapy witryn
  4. Buforowanie
  5. Wstępne renderowanie
  6. Renderowanie po stronie serwera
SEO jest niezbędny do uzyskania organicznego ruchu na Twojej stronie.

Udoskonalenia w zakresie optymalizacji wyszukiwarek mogą być bardzo przydatne w zwiększaniu ruchu w witrynach marketingowych, blogach i innych aplikacjach. Jednak coraz więcej takich witryn / aplikacji jest tworzonych przy użyciu aplikacji jednostronicowych (SPA) lub witryn, które są renderowane całkowicie w przeglądarce klienta.

Search Engine Optimization (SEO) to dyscyplina skupiająca się na tworzeniu stron internetowych w organicznych (nieopłaconych) wynikach wyszukiwania w wyszukiwarkach takich jak Google, Bing i Yahoo. Wzrósł również do mediów społecznościowych, takich jak Twitter, Facebook i Instagram. Jednak SEO obejmuje nie tylko tworzenie przyjaznych adresów URL i słów kluczowych oraz dodawanie ich do tych platform. Zawiera wszystko, od tego, jak linkujesz do swojej strony, do słów na samych stronach i tagów meta, które dołączasz do głowy. W rzeczywistości napisano na ten temat całe książki, a firmy istnieją wyłącznie po to, aby pomóc Ci w SEO. Mając to na uwadze, większość tematów specyficznych dla SEO nie zostanie tutaj omówiona. Zamiast tego skupię się przede wszystkim na rzeczach, które możesz zrobić w SPA za pomocą JavaScript, aby Twoja strona była bardziej przyjazna SEO. Wskazówki Google i Bing dla webmasterów zawierają proste porady dotyczące SEO. Zanim przejdziesz dalej, spójrz na te zasoby.

Wskazówki Google dla webmasterów:

com/webmasters/answer/35769?hl=en> https://support.google.com/webmasters/answer/35769?hl=en

Wskazówki dla webmasterów Bing:

https://www.bing.com/webmaster/help/webmaster-guidelines-30fba23a

Aplikacje jednostronicowe i SEO

SPA są inne niż tradycyjne strony internetowe. We wczesnych latach Internetu strona internetowa była po prostu plikiem HTML, który był obsługiwany z komputera w college'u, agencji rządowej lub firmie. Były łatwe do wyszukiwania, ponieważ cała zawartość była bezpośrednio osadzona w tym pliku, podobnie jak czytanie dokumentu w edytorze tekstu. Miała jasną hierarchię, podobnie jak dokument. Model obiektowy dokumentu (DOM), którego używa strona internetowa, nawet to odzwierciedla. Na przykład znaczniki <h1> do <h6> są nagłówkami, używanymi do uruchamiania części dokumentu. Znacznik <p> jest akapitem, a zazwyczaj istnieje wiele akapitów zawierających treść w <section>. I <table> jest używany do danych tabelarycznych. Jeśli potrzebujesz więcej informacji na temat samego HTML, przeczytaj MDN Wprowadzenie do HTML . Aby uzyskać więcej informacji o DOM, jak korzystać z niego za pomocą JavaScript czytaj MDN Wprowadzenie do DOM .

Renderowanie po stronie serwera zostało dodane później jako sposób na załadowanie treści na stronę przed podaniem jej do klienta. Pozwoliło to ludziom pisać blogi i serwisy informacyjne, a ostatecznie rozpocząć tworzenie aplikacji, które zaspokajają różne potrzeby biznesowe. Wraz ze wzrostem złożoności aplikacji ludzie musieli używać HTML do wyrażania rzeczy, które nie są bardzo dokumentalne. Stworzyło to potrzebę SEO, aby umożliwić wyszukiwarkom znalezienie treści w tych witrynach i aplikacjach.

Ponieważ jednak struktury JavaScript stały się bardziej rozpowszechnione, strony internetowe zmieniły się jeszcze bardziej dramatycznie. Funkcje takie jak nieskończone przewijanie, asynchroniczne ładowanie danych po załadowaniu HTML przez Ajax i inne biblioteki XHR oraz renderowanie po stronie klienta elementów DOM utrudniają wyszukiwarkom indeksowanie stron. SPAs mogą nawet aktualizować całe strony bez konieczności wysyłania kolejnego żądania do serwera lub nawet zmiany adresu URL.

Obecnie SPAs są powszechne, a wyszukiwarki wiedzą, jak je konsumować. Google stworzył i Microsoft przyjął Angular.js, Facebook zrobił to samo z React.js. Przebudowali także swoje funkcje wyszukiwania, aby móc w pełni załadować i przeszukać SPA. Ale to nie znaczy, że możesz po prostu zbudować jeden i po prostu pokazać go w wyszukiwarkach. Nie wchodząc w podstawy działania SEO, oto kilka rzeczy, które możesz zrobić, aby Twoje SPA działało z wyszukiwarkami.

Ładne adresy URL

Wiele frameworków po stronie klienta używa skrótów (adresów URL zawierających #, takich jak http (s): //www.example.com/#about) i hashbangs (http (s): //www.example.com/#! Key = value ) obsługiwać ich routing. Funkcjonalnie SPA zachowuje się tak samo jak zwykła strona internetowa. Adres URL zmienia się, a treść jest aktualizowana przy użyciu routera JavaScript lub w inny sposób. I choć może się wydawać, że roboty indeksujące Twoją witrynę mogą nie dbać o to, czy używasz skrótu, użytkownicy korzystający z witryny zobaczą bardziej przejrzysty i przyjazny dla użytkownika adres URL bez nich.

Ponadto niektóre roboty indeksujące, takie jak Google, interpretują adresy URL hashbangami #! jako wskaźnik, że istnieje alternatywny konwencjonalny adres URL zapewniający ten sam stan strony w czasie ładowania. Z tego powodu zaleca się używanie tylko hash http: //www.example.com/#/pagename lub HTML5 style hashless, takich jak http (s): //www.example.com/pagename, używając technologii takich jak PushState. PushState to sposób na zmianę adresu URL wyświetlanego w przeglądarce za pomocą JavaScript bez ponownego ładowania strony. Zmienia obiekt historii w następujący sposób: window.history.pushState (dane, „Tytuł strony”, „/ new-url”). W końcu masz ładny adres URL.

Innym powszechnie stosowanym trikiem URL jest ciąg zapytania. Używanie ciągu zapytania do takich rzeczy, jak kategorie, wyszukiwane hasła i inne parametry jest całkowicie dopuszczalne. Może być używany w połączeniu z dowolną z wyżej wymienionych technik manipulacji URL. Wyszukiwarki mogą różnicować http (s): //www.example.com/? Kategoria = osoby z http (s): //www.example.com/? Kategoria = samochody, zwłaszcza jeśli każdy adres URL jest zdefiniowany i zachęcany do bycia indeksowane w Twojej mapie witryny.

Mapy witryn

Mapy witryn są używane przez wyszukiwarki w celu lepszego zrozumienia zawartości witryny. Nie zawsze możesz tego potrzebować. Tak jakby Twoja strona była bardzo mała i dobrze połączona w całym tekście. Jeśli jednak Twoja witryna jest naprawdę duża lub słabo połączona, prawdopodobnie roboty sieciowe mogą przeoczyć nowe lub ostatnio zaktualizowane strony.

Jeśli jednak Twoja witryna ma duże archiwum stron z treścią, które są odizolowane lub nie są ze sobą dobrze powiązane, mapa witryny może być dobrą strategią. Na przykład, jeśli strony Twojej witryny nie odwołują się naturalnie do siebie za pomocą linków, możesz umieścić je w mapie witryny, aby upewnić się, że roboty sieciowe nie przeoczą tych stron. Ponadto, jeśli Twoja witryna jest nowa i zawiera niewiele linków zewnętrznych, roboty sieciowe mogą jej nie znaleźć. Lub, jeśli używasz metadanych, takich jak filmy lub treści. Przeszukiwacze zazwyczaj podążają z jednej strony na drugą i mogą nie wykrywać twoich stron lub treści, jeśli żadne inne witryny nie prowadzą do nich linków. W tym przypadku mapa witryny jest korzystna.

Aby bot mógł korzystać z mapy witryny, musisz utworzyć i hostować plik o nazwie sitemap.xml. Zawartość i struktura twojego pliku sitemap.xml nie jest tutaj opisana. Przeczytaj więcej na Dowiedz się więcej o mapach witryn - Pomoc Search Console .

Jeśli Twoja witryna jest hostowana statycznie, możesz po prostu umieścić plik sitemap.xml na poziomie głównym. Jeśli korzystasz ze struktury po stronie serwera, takiej jak Express, możesz hostować plik w ten sposób:

app.get ('/ sitemap.xml', (req, res, next) => {
res.sendFile ('public / sitemap.xml')
})

Istnieją inne sposoby hostowania pliku w zależności od struktury. Na przykład za pomocą Express możesz obsługiwać wszystko w folderze publicznym przy użyciu express.static. Widzieć Obsługa plików statycznych w Express po więcej informacji.

app.use (express.static (__ dirname + '/ public ”))

Aby poinformować boty o pliku mapy witryny, należy odwołać się do niego w pliku o nazwie robots.txt:

// robots.txt
Mapa strony: /sitemap.xml

Upewnij się również, że obsługujesz ten plik także w katalogu głównym lub w ramach takich jak Express:

app.get ('/ robots.txt, (req, res, next) => {
res.sendFile („public / robots.txt”)
})

Lub jeśli używasz express.static, po prostu umieść go w swoim folderze / public. Jest na to wiele sposobów i zależy to od serwera (Apache, Nginx, Express itp.).

Boty zawsze będą patrzeć na główny adres URL tego pliku. Upewnij się, że jest obsługiwany w http (s): //www.example.com/robots.txt.

Ponadto dostępne są narzędzia do dynamicznego renderowania map witryn. Popularnym wyborem węzła jest pakiet NPM mapa witryny .

Buforowanie

Innym łatwym sposobem na zwiększenie SEO jest szybsze ładowanie stron. Współczesne przeszukiwacze sieci dbają o czasy ładowania i priorytetowo traktują szybsze strony o podobnej zawartości powyżej wolniejszych. Ponieważ struktury JavaScript renderują po stronie i wszystkie zasoby są pobierane (czasami nawet czekają na zakończenie połączeń Ajax / XHR), są zazwyczaj wolniejsze niż wstępnie renderowane strony serwera. Polecam korzystanie z Google PageSpeed ​​Insights przetestować swoje strony.

Jednym ze sposobów przyspieszenia ładowania stron jest buforowanie zawartości, zwłaszcza jeśli nie jest to zawartość, która często się zmienia. Można to łatwo obsługiwać w Expressie.

Jeśli udostępniasz pliki w folderze statycznym, możesz po prostu użyć Express.static:

const cacheTime = 86400000 * 10 // 10 dni app.use (express.static (nazwa_katalogu + '/ public ”, {maxAge: cacheTime}))

Alternatywnie, jeśli używasz sendFile, możesz ustawić tam pamięć podręczną:

app.get ('/ robots.txt, {maxAge: cacheTime}, (req, res) => {
res.sendFile („public / robots.txt”)
})

Jeśli udostępniasz swoje pliki na CDN, będziesz musiał skonfigurować tam reguły buforowania. Jest to zalecane dla czysto statycznych stron i możesz wypróbować Amazon CloudFront, CloudFlare lub inne CDN. Ale jeśli pracujesz z Node, może to być bardzo proste i skalowalne rozwiązanie. Polecam przyjrzeć się bliżej regułom na stronie Express 4.x - Dokumentacja API .

Wreszcie, użycie gzip lub deflate do kompresji obsługiwanych treści może znacznie przyspieszyć proces. Wyraźnie można to łatwo uzyskać za pomocą kompresji.

$ npm install kompresja const kompresja = require ('kompresja')
const express = require ('express') const app = express () // kompresuje wszystkie odpowiedzi
app.use (compression ()) // dodaj wszystkie trasy

Zobacz dokumentacja do konfiguracji.

Wstępne renderowanie

Istnieje kilka narzędzi do wstępnego renderowania strony przed wysłaniem jej do klienta. Przyspiesza to również czas ładowania, co zwiększa SEO i ogólne wrażenia użytkownika. Dzięki takiemu podejściu uruchamiasz aplikację przed jej wdrożeniem, przechwytujesz dane wyjściowe strony i zastępujesz pliki HTML tym przechwyconym wyjściem. Zazwyczaj osiąga się to za pomocą przeglądarki bezgłowej (przeglądarki internetowej bez graficznego interfejsu użytkownika), takiej jak PhantomJS.

Wstępne renderowanie jest dobrym wyborem, ponieważ nie ma dodatkowego obciążenia serwera, a zatem jest szybsze i tańsze niż renderowanie po stronie serwera. Jest to również prostsza konfiguracja produkcji i pozwala na napisanie prostszego kodu aplikacji (nie ma potrzeby stosowania kodu izomorficznego). Jest więc mniej podatny na błędy i może być łatwiej przechowywany przez dłuższy czas. Dodatkowo nie wymaga serwera produkcyjnego Node.js.

Wstępne renderowanie nie zawsze jest dobrym wyborem. Na przykład nie działa dobrze dla stron, które wyświetlają stale zmieniające się dane, które muszą być ładowane dynamicznie w czasie ładowania lub dla stron, które zawierają treści specyficzne dla użytkownika. Zazwyczaj strony spełniające te wymagania i tak są mniej krytyczne dla wstępnego renderowania. Tylko często używane strony, które chcesz szybko obsłużyć, powinny być wstępnie renderowane. W przeciwnym razie renderowanie po stronie serwera (SSR) może być lepszą opcją. (Więcej informacji na temat SSR można znaleźć w następnej sekcji).

Oto przykład wstępnego renderowania aplikacji za pomocą wtyczki wstępnej-spa dla pakietu Webpack. Powszechnie używany pakiet JS, który ma wiele innych możliwości za pomocą wtyczek. Możesz znaleźć wiele innych narzędzi kompatybilnych z innymi językami, pakietami lub strukturami w zależności od potrzeb.

$ npm install --save-dev prerender-spa-plugin

Wtyczka pre-render tworzy instancję PhantomJS i uruchamia aplikację. Następnie wykonuje migawkę DOM i wyświetla migawkę do pliku HTML w folderze budowania pakietu Webpack. Powtarza ten proces dla każdej trasy, więc zbudowanie aplikacji może zająć trochę czasu, jeśli masz wiele stron.

Oto prosty przykład prostej konfiguracji pakietu Webpack za pomocą wtyczki pre-render.

// webpack.conf.js
const ścieżka = wymagaj („ścieżka”)
const PrerenderSpaPlugin = require ('prerender-spa-plugin')
module.exports = {
// ...
wtyczki: [
nowy PrerenderSpaPlugin (
// Bezwzględna ścieżka do skompilowanego SPA
path.join (__ dirname, './public'),
// Lista tras do prerenderowania
['/', '/ about', '/ contact']
)
]
}

W tym przykładzie tworzona jest nowa instancja wtyczki wstępnego renderowania i pozwalasz jej wiedzieć, w którym folderze ma zostać wyprowadzony, oraz listę tras, które przeglądarka PhantomJS ma odwiedzić podczas generowania plików HTML. Są to jedyne dwie wymagane opcje podczas konfigurowania wtyczki. Możesz również opcjonalnie przekazać bardziej zaawansowaną konfigurację do wtyczki.

// webpack.conf.js
const ścieżka = wymagaj („ścieżka”)
const PrerenderSpaPlugin = require ('prerender-spa-plugin')
module.exports = {
// ...
wtyczki: [
nowy PrerenderSpaPlugin (
// Bezwzględna ścieżka do skompilowanego SPA
path.join (__ dirname, './public'),
// Lista tras do prerenderowania
['/', '/ about', '/ contact'],
// (OPCJONALNY)
{
// opcje przejdź tutaj
}
)
]
}

Jeśli nie polegasz na asynchronicznie renderowanej treści, na przykład po żądaniu Ajax / XHR, żadna z tych opcji nie powinna być konieczna. Wszystkie synchroniczne skrypty są już wykonywane przed przechwyceniem zawartości strony. Każda z następujących opcji jest częścią opcjonalnego obiektu opcji.

Jeśli chcesz poczekać, aż na stronie pojawi się określone zdarzenie JavaScript:

captureAfterDocumentEvent: „niestandardowe zdarzenie po renderowaniu”

Następnie w pliku JavaScript wyślij zdarzenie:

document.dispatchEvent (nowe wydarzenie („niestandardowe zdarzenie po renderowaniu”))

Zamiast tego możesz poczekać, aż zostanie wykryty określony element HTML za pomocą document.querySelector.

captureAfterElementExists: '#content'

Lub opcjonalnie możesz poczekać, aż upłynie liczba milisekund po wykonaniu skryptów. Ważne jest, aby pamiętać, że może to spowodować niewiarygodne wyniki, gdy opiera się na komunikacji sieciowej lub innych operacjach z bardzo zmiennym czasem.

lang: javascript
captureAfterTime: 5000

Możesz nawet łączyć strategie, jeśli chcesz. Na przykład, jeśli czasami chcesz poczekać na zdarzenie, możesz utworzyć limit czasu, łącząc captureAfterTime z captureAfterDocumentEvent. Łącząc strategie, zawartość strony zostanie przechwycona po pierwszej uruchomionej strategii.

Zamiast głośno zawodzić w błędach JavaScript (domyślnie), możesz je po prostu zignorować.

lang: javascript
ignoreJSErrors: true

Aby zmienić ścieżkę pliku indeksu, zamiast domyślnego index.html w statycznym katalogu głównym:

lang: javascript
indexPath: path.resolve ('/ public / path / to / index.html')

Ponieważ PhantomJS sporadycznie może powodować sporadyczne problemy, wtyczka automatycznie ponowi próbę przechwycenia strony do 10 razy domyślnie. Możesz podnieść lub obniżyć ten limit, jeśli chcesz.

lang: javascript
max Próby: 10

Teraz musisz uniemożliwić PhantomJS nawigowanie poza adres URL przekazany do niego i uniemożliwić ładowanie osadzonych elementów iframe (np. Disqus i Soundcloud), które nie są idealne dla SEO i mogą powodować błędy JavaScript.

lang: javascript
navigationLocked: true

Poniższe opcje pokazują opcje konfiguracji dla PhantomJS, w rzadkich przypadkach, gdy potrzebne są specjalne ustawienia dla określonych systemów lub aplikacji.

lang: javascript
// http://phantomjs.org/api/command-line.html#command-line-options
phantomOptions: '--disk-cache = true', // http://phantomjs.org/api/webpage/property/settings.html
phantomPageSettings: {
loadImages: true
}, // http://phantomjs.org/api/webpage/property/viewport-size.html
phantomPageViewportSize: {
szerokość: 1280,
wysokość: 800
}

Teraz możesz ręcznie przekształcić kod HTML dla każdej strony po wstępnym renderowaniu, na przykład, aby ustawić tytuł strony i metadane w przypadkach skrajnych, w których nie możesz obsłużyć tego za pomocą rozwiązania routingu.

Argument kontekstu funkcji zawiera dwie właściwości:

  • html - wynikowy HTML po wstępnym renderowaniu
  • route - trasa aktualnie przetwarzana (np. „/”, „/ about” lub „/ contact”)

Cokolwiek zostanie zwrócone, zostanie wydrukowane do wstępnie renderowanego pliku.

lang: javascript
postProcessHtml: context => {
const tytuły = {
'/': 'Dom',
„/ o”: „Nasza historia”,
„/ kontakt”: „Skontaktuj się z nami”
}
return context.html.replace (
/ <title> [^ <] * </ title> / i,
'<title>' + tytuły [context.route] + '</title>'
)
}

Użycie tej wtyczki pozwoli ci tworzyć proste strony HTML przy użyciu dowolnej biblioteki JS, której używasz. Na przykład React, Vue, Angular, Riot lub dowolne inne, które mogą być przechowywane w katalogu na serwerze za pomocą Express lub dowolnego preferowanego serwera.

Zauważ, że wtyczka do renderowania wstępnego działa tylko ze strategiami routingu przy użyciu interfejsu API historii HTML5 (PushState). Żadne adresy URL z hashem (bang) nie będą działać przy użyciu tej metody. Upewnij się, że skonfigurowałeś router JS tak, aby korzystał z adresów URL takich jak http: //www.example.com/contact. Ponadto należy zawsze ładować swoje SPA, gdy DOM jest gotowy, umieszczając tag wewnątrz zdarzenia DOMContentLoaded.

Pamiętaj jednak, że nie jest to dobra opcja, jeśli planujesz uruchomienie dynamicznie zmieniających się stron, które są bardzo intensywne i zmieniają się w zależności od danych. Na przykład, jeśli chcesz generować dane dynamiczne na podstawie informacji o użytkowniku. Zamiast tego renderowanie po stronie serwera byłoby bardziej realną opcją dla takiej witryny.

Renderowanie po stronie serwera

Powyższe metody są najlepiej używane w aplikacjach, które mają być renderowane raz, a nie dynamicznie. Na przykład marketing stron internetowych, strona główna produktu lub aplikacja sprzedaży.

Aby uzyskać więcej informacji na temat renderowania po stronie serwera ze strukturami JavaScript, sprawdź ReactDomServer i Rendering po stronie serwera Vue . Dodatkowo większość innych frameworków JS ma teraz rozwiązania SSR. Na przykład dwie z moich ulubionych struktur SSR to NextJS i GatsbyJS . Dodatkowo, używając SSR silnik szablonów dla Express zawsze będzie działać i tak naprawdę robimy to dla nas Aureliusz strona główna. Aktualnie używamy MarkoJS dla Express który jest łatwy w użyciu i bardzo szybki.

Prosimy o komentarz i daj mi znać, co myślisz o tym przewodniku po SEO dla SPA. Jeśli jest coś, co chciałbyś dodać, lub pytania, które po prostu dałeś mi znać, mogę spróbować pomóc. Jeśli otrzymam wystarczającą ilość informacji zwrotnych, mogę zrobić konkretną kontynuację SSR.

Com/webmasters/answer/35769?
Com/?
Com/?
Навигация сайта
Реклама
Панель управления
Календарь новостей
Популярные новости
Информация
Экономика стран www.mp3area.ru © 2005-2016
При копировании материала, ссылка на сайт обязательна.