Wie wir alle wissen, ist die Vue SPA-Einzelseitenanwendung nicht SEO-freundlich. Natürlich gibt es entsprechende Lösungen. Bei der Suche nach Informationen gibt es wahrscheinlich die folgenden 4 Methoden. (Ich habe nur die erste und dritte Option verwendet) 1.Bereitstellung der serverseitigen Rendering-Anwendung von Nuxt (SSR-Server-Rendering) Informationen zum Server-Rendering: Laut der offiziellen Vue-Website gibt es Anforderungen an die Vue-Version und den Server, die die Node.JS-Umgebung unterstützen müssen. Vorteile: Bessere SEO, da Suchmaschinen-Crawler die vollständig gerenderte Seite direkt anzeigen können; Nachteile: (Fallstricke, die während der Entwicklung auftreten) 1. Zwei Ausführungsumgebungen für einen Codesatz verursachen verschiedene Probleme. Wenn beispielsweise auf der Serverseite kein Fenster oder Dokumentobjekt vorhanden ist, besteht die Lösung darin, ein Urteil hinzuzufügen und es nur auszuführen, wenn es sich um die Clientseite handelt: if (Prozess.Browser) { konsole.log(Fenster); } Um NPM-Pakete mit DOM-Operationen zu referenzieren, wie z. B. WowJS, können Sie die Importmethode nicht verwenden. Verwenden Sie stattdessen: if (Prozess.Browser) { var { WOW } = erfordern('wowjs'); erfordern('wowjs/css/libs/animate.css'); } 2.Nuxt asyncData-Methode, ruft Daten vor dem Initialisieren der Seite ab, ist jedoch nur auf Aufrufe von Seitenkomponenten beschränkt: // Mehrere Schnittstellen gleichzeitig laden: async asyncData ({ App, Abfrage }) { lass [resA, resB, resC] = warte auf Promise.all([ app.$axios.get('/api/a'), app.$axios.get('/api/b'), app.$axios.get('/api/c'), ]) zurückkehren { DatenA: resA.data, DatenB: resB.data, DatenC: resC.Daten, } } 3. Wenn Sie die v-if-Syntax verwenden, kann bei der Onlinebereitstellung auch dieser Fehler auftreten:
Gemäß Problem 1552 auf GitHub Nuxt müssen Sie die Syntax von v-if in v-show ändern. 2. Statische Nuxt-Anwendungsbereitstellung Wenn Nuxt.js statische Pakete generiert, werden dynamische Routen ignoriert. -| Seiten/ ---| index.vue ---| Benutzer/ -----| _id.vue Um statische Seiten mit dynamischem Routing zu generieren, müssen Sie die Werte der dynamischen Routing-Parameter angeben und sie im Routen-Array konfigurieren. // nuxt.config.js modul.exporte = { erzeugen: Routen: [ '/Benutzer/1', '/Benutzer/2', '/Benutzer/3' ] } } Führen Sie das Paket aus und Sie können die gepackte Seite sehen. // nuxt.config.js Axios von „Axios“ importieren Standard exportieren { erzeugen: Routen: Funktion () { returniere axios.get('https://my-api/users') .then((res) => { return res.data.map((Benutzer) => { zurückkehren { Route: '/users/' + Benutzer-ID, Nutzlast: Benutzer } }) }) } } } Jetzt können wir wie folgt auf die Nutzlast von /users/_id.vue zugreifen: async asyncData ({ Parameter, Fehler, Nutzlast }) { if (Nutzlast) return { Benutzer: Nutzlast} sonst return { Benutzer: warte auf backend.fetchUser(params.id) } } Wenn Ihr dynamisches Routing viele Parameter umfasst, z. B. Produktdetails, kann die Anzahl Tausende oder Zehntausende betragen. Es wird eine Schnittstelle benötigt, um alle IDs zurückzugeben und diese dann beim Verpacken zu durchlaufen und lokal zu verpacken. Wenn ein Produkt geändert oder aus den Regalen genommen wird, muss es erneut verpackt werden. Wenn die Menge groß ist, ist das Verpacken auch sehr langsam, was sehr unrealistisch ist. Vorteile:
unzureichend:
3. Vorrendern des Prerender-Spa-Plugins Wenn Sie es nur verwenden, um die SEO einiger Marketingseiten zu verbessern (z. B. /, /about, /contact usw.), benötigen Sie wahrscheinlich ein Vorrendering. Anstatt einen Webserver zum dynamischen Kompilieren von HTML im laufenden Betrieb zu verwenden, werden beim Prerendering zur Build-Zeit einfach statische HTML-Dateien für bestimmte Routen generiert. Der Vorteil besteht darin, dass sich das Vorrendern einfacher einrichten lässt und Sie Ihr Frontend als vollständig statische Site bereitstellen können. $ cnpm installiere Prerender-Spa-Plugin --save Vue CLI 3 vue.config.js-Konfiguration: const PrerenderSPAPlugin = erforderlich('prerender-spa-plugin'); const Renderer = PrerenderSPAPlugin.PuppeteerRenderer; const path = require('Pfad'); modul.exporte = { konfigurierenWebpack: config => { wenn (Prozess.env.NODE_ENV !== 'Produktion') zurückgeben; zurückkehren { Plugins: [ neues PrerenderSPAPlugin({ // Der Pfad der generierten Datei kann auch mit dem von webpakc gepackten Pfad übereinstimmen. //Der folgende Satz ist sehr wichtig! ! ! // Dieses Verzeichnis kann nur eine Ebene haben. Wenn die Verzeichnisebene größer als eine Ebene ist, wird während der Generierung keine Fehlermeldung angezeigt und es bleibt einfach beim Vorrendern hängen. staticDir: Pfad.join(__dirname,'dist'), // Entsprechend Ihrer eigenen Routing-Datei. Wenn beispielsweise a Parameter hat, müssen Sie es als /a/param1 schreiben. Routen: ['/', '/Produkt', '/Über'], // Das ist sehr wichtig. Wenn dieser Abschnitt nicht konfiguriert ist, wird keine Vorkompilierung durchgeführtrenderer: new Renderer({ injizieren: { foo: "Leiste" }, kopflos: falsch, // In main.js, document.dispatchEvent(new Event('render-event')), sollten die Ereignisnamen der beiden übereinstimmen. renderAfterDocumentEvent: 'Renderereignis' }) }), ], }; } } Fügen Sie in main.js Folgendes hinzu: neuer Vue({ Router, rendern: h => h(App), montiert () { document.dispatchEvent(neues Ereignis('Render-Ereignis')) } }).$mount('#app') Hinweis: Modus: „History“ muss im Router eingestellt sein. Vorteile: Die Änderungen sind gering, führen Sie einfach ein Plug-In ein und fertig; unzureichend: Dynamisches Routing kann nicht verwendet werden; 4. Phantomjs kümmert sich um Crawler Phantomjs ist ein Headless-Browser, der auf dem WebKit-Kernel basiert. Das heißt, er hat keine Benutzeroberfläche (UI). Es handelt sich also nur um einen Browser, aber menschliche Vorgänge wie Klicken und Umblättern müssen per Programmierung implementiert werden. Obwohl „PhantomJS die Einstellung der Entwicklung angekündigt hat“, hat es die SEO-Anforderungen für Vue bereits erfüllt. Diese Lösung ist eigentlich ein Bypass-Mechanismus. Das Prinzip besteht darin, durch die Nginx-Konfiguration zu bestimmen, ob es sich bei der Quell-UA des Zugriffs um einen Crawler-Zugriff handelt. Wenn dies der Fall ist, wird die Crawler-Anforderung der Suchmaschine an einen Knotenserver weitergeleitet, und dann wird PhantomJS verwendet, um das gesamte HTML zu analysieren und an den Crawler zurückzugeben. $ phantomjs spider.js 'www.baidu.com' Wenn Sie eine Menge HTML in der Befehlszeile sehen, herzlichen Glückwunsch, Sie haben PhantomJS gemeistert. Nach dem Starten oder Verwenden von Postman zum Hinzufügen des User-Agent-Werts zu Baiduspider im Anforderungsheader ist der Effekt derselbe. Bereitstellung und Start So installieren Sie Node-, PM2-, Phantomjs- und Nginx-bezogene Konfigurationen online: Upstream Spider_Server { Server Localhost:3000; } Server { hören Sie 80; Servername Beispiel.com; Standort / { Proxy_Set_Header Host $host:$Proxy_Port; Proxy_Set_Header X-Real-IP $Remote_Addr; proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; if ($http_user_agent ~* "Baiduspider|Twitterbot|Facebookexternalhit|Rogerbot|LinkedInbot|Embedly|Quora-Linkvorschau|ShowYouBot|OutBrain|Pinterest|SlackBot|VkShare|W3C_Validator|Bingbot|SosoSpider|Sogou Pic Spider|Googlebot|360Spider") { Proxy-Passwort http://Spider-Server; } } } Vorteile: Der Projektcode muss überhaupt nicht geändert werden. Entwickeln Sie ihn einfach gemäß dem ursprünglichen SPA. Im Vergleich zur Entwicklung von SSR sind die Kosten nicht zu hoch. unzureichend: Für die Bereitstellung ist Knotenserver-Unterstützung erforderlich. ZusammenfassenWenn Sie eine große Website erstellen, z. B. ein Einkaufszentrum, zögern Sie nicht, direkt zum SSR-Server-Rendering zu wechseln. Natürlich warten entsprechende Fallstricke auf Sie. Wenn die Community reifer ist und Ihr Englisch besser ist, können alle Probleme gelöst werden. Wenn es sich nur um ein persönliches Blog oder eine Unternehmenswebsite handelt, sind die anderen drei in Ordnung. Damit ist dieser Artikel über die vier Lösungen für Vue Single-Page-SEO abgeschlossen. Weitere relevante Vue Single-Page-SEO-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Analyse der Verwendung und des Prinzips der Docker Swarm-Clusterverwaltung
Das sogenannte Verbindungslimit in Nginx ist tats...
Hinweis: Andere Maschinen (IP) können ohne Autori...
Ich bin einmal auf eine Aufgabe gestoßen, bei der...
Installation, Konfiguration, Start, Anmeldung und...
Was ist k3d? k3d ist ein kleines Programm zum Aus...
1. Umgebung und Vorbereitung 1. Ubuntu 14.04 2.Do...
Vorwort Bei Verwendung der MySQL-Datenbank muss s...
Verwendung der AES-Verschlüsselung Verschlüsselun...
Wenn Sie Navicat direkt für die Verbindung über I...
1 Hintergrund JDK1.8-u181 und Tomcat8.5.53 wurden...
1. Nach dem Betreten des Containers Katze /etc/ho...
Tomcat selbst optimieren Tomcat-Speicheroptimieru...
Die Linux-Betriebssysteme der RHEL/CentOS-Reihe v...
Mit dem Tag <TH> werden die Eigenschaften e...
Die Leistung Ihrer Website oder Ihres Dienstes hä...