Firebase-tools: Verwenden Sie Hosting mit prerender.io

Erstellt am 10. Okt. 2014  ·  93Kommentare  ·  Quelle: firebase/firebase-tools

Hallo

Ich frage mich, ob es eine Möglichkeit gibt, Firebase-Hosting in Verbindung mit einem Dienst wie prerender.io zu verwenden.
Auf diese Weise wäre es möglich, eine Webanwendung (dh AngularJS-App) mit SEO-Funktionen bereitzustellen.

Vielen Dank

question

Hilfreichster Kommentar

Ich wollte nur schnell einschalten, dass wir das definitiv auf unserem Radar haben. Es ist wichtig, aber auch viele andere Dinge (wie Kato aufgezählt hat). Wir haben einige Ideen, wie wir dieses Problem lösen können, aber es gibt einige Abhängigkeiten, die wir zuerst aus dem Weg räumen müssen. Versuchen Sie, geduldig zu bleiben und zu wissen, dass dies definitiv in unseren Gedanken ist!

Alle 93 Kommentare

Hallo,

Derzeit sind die Umschreib- / Umleitungsregeln von Firebase Hosting für das Vorrendern von Diensten nicht detailliert genug, aber einige unserer Kunden haben erfolgreich einen Pre-Rendering-Schritt in ihren Erstellungsprozess für ziemlich statische Sites mit HTML5 PushState eingebaut. Sie rendern jede Seite basierend auf der Einzelseiten-App vor, sodass der richtige Inhalt einem Crawler bereitgestellt wird. Wenn der Benutzer zu einer anderen Seite navigiert, übernimmt die Webanwendung und rendert sie ohne Seitenaktualisierung neu

Dies ist offensichtlich ziemlich kompliziert und offensichtlich nicht ideal, aber wir arbeiten daran, dies weniger schmerzhaft zu machen

hoffentlich hilft das

Chris

Mir ist klar, dass es erst zwei Monate her sind, aber gibt es ein Update dazu? Da ihr jetzt im Besitz von Google seid, würde ich davon ausgehen, dass Websites, die mit Firebase gehostet werden, von ihrem Suchdienst indiziert werden sollen.

Wir haben derzeit kein spezifisches Update dazu, nur dass SEO für uns offensichtlich wichtig ist und Firebase Hosting für Entwickler relevant bleibt. Ich hoffe, bald ein Update für Sie zu haben

Hallo Leute! Ich wollte nur wissen, wie der Status dieses Updates ist. kommt es bald? Ich verwende Firebase-Hosting und es ist großartig. Das einzige, was mich betrifft, ist SEO. Meine Website wird nirgendwo in Google angezeigt. Außerdem habe ich nach SEO-Integrationen mit Firebase gesucht und keine Lösung gefunden. Ich möchte wirklich alles an einem Ort aufbewahren, daher wäre es eine Schande, zu einem anderen Dienst zu wechseln, der meine Seiten für die Crawler-Engine von Google bereitstellen kann. Dies wäre eine enorme Verbesserung, da ich weiß, dass Firebase jetzt im Besitz von Google ist. Vielen Dank!

Auch noch an diesem Service interessiert. Vielen Dank!

Meine Stimme zum Thread hinzufügen - wäre toll, diese Funktion zu haben!

+1

Darauf warte ich auch.

Als Alternative möchte ich https://divshot.com + firebase verwenden.

+1

Aufgrund der kürzlich angekündigten Zusammenführung von DIvshot und Firebase tritt dieses Problem erneut auf. Ich bin tatsächlich zu Divshot gewechselt, um sowohl die kostenlosen benutzerdefinierten Domain- als auch die prerender.io-Funktionen zu nutzen. Wie wird Fireabse mit diesen Problemen umgehen? Werden Sie der kostenlosen Ebene benutzerdefinierte Domains hinzufügen? Was ist mit prerender.io?

Wir untersuchen Möglichkeiten, wie wir JS-Prerendering möglicherweise auf Firebase Hosting übertragen können, haben jedoch derzeit keine festen Pläne, dies zu teilen. (Persönliche Anmerkung: Ich möchte wirklich, dass es passiert).

Da Firebase der Meinung ist, dass alle Sites nur HTTPS sein sollten, verwalten wir die Bereitstellung von SSL-Zertifikaten im Auftrag unserer Benutzer. Die damit verbundenen Kosten verhindern, dass wir kostenloses benutzerdefiniertes Domain-Hosting anbieten können.

Vielen Dank für eine blitzschnelle Antwort (Wortspiel beabsichtigt).

Eine Art von SEO-Funktion ist für statische Web-App-Hosting-Plattformen mehr als erforderlich. Ich hoffe nur, dass es euch bis Mitte Dezember gelingt, das zum Laufen zu bringen. Andernfalls müssen viele Entwickler zu Hosting-Anbietern der alten Schule wechseln (leider auch ich) ).

Die zweite Antwort ist absolut sinnvoll und ich denke, ich springe nur auf die bezahlte Stufe. Es ist eine Schande, dass sie nicht die gleiche zusätzliche Skalierung bietet.

100% der Firebase-Hosting-Sites befinden sich auf Fastlys blitzschnellem CDN. Sie erhalten alle Vorteile des Hochleistungsplans von Divshot auch für den kostenlosen Plan (nur nicht für eine benutzerdefinierte Domain). Was die Bandbreite betrifft, so sind 10 GB eine Menge Band für eine statische Website.

Ich muss zugeben, dass ich nicht über Divshots Hochleistungsvorteile nachgedacht habe. Wie auch immer, es ist eine Schande, dass ich möglicherweise meine App migrieren und ein Backend vorbereiten muss (und neue Funktionen verzögern muss!), Während der CS-Abschluss fast meine gesamte Zeit in Anspruch nimmt. Während mein Projekt nicht so fortgeschritten ist, könnten andere enorme Verzögerungen erleiden, also hoffe ich erneut, dass Firebase uns dabei hilft, SEO-freundlich zu werden, oder dass Divshot den Abschluss verzögert. Ich verstehe, dass dies wahrscheinlich keine Option ist, aber wenn einige von uns migrieren, werden sie möglicherweise nie zurückkommen.

Herzlichen Glückwunsch @mbleigh zur Übernahme!

@ DamodarSojka , ich stimme dir vollkommen zu. Ich bin ein bestehender bezahlter Divshot-Benutzer. Das Vorrendern ist ein Muss für das Marketing / Teilen meiner Website auf Facebook. Wenn Firebase diese Funktion nicht bald anbietet, muss ich auf andere Webhosting-Dienste migrieren.

+1 für SEO-Fähigkeit

Wir zahlen auch Divshot-Kunden und Prerender-Support ist für uns erforderlich. Die Prerender-Unterstützung für Divshot ist nicht ideal (aufgrund der URL von Production.blabla.divshot.io nach der Freigabe), aber wenn es überhaupt keine Prerender-Unterstützung für Firebase gibt, können wir sie nicht verwenden. Vielen Dank.

Ebenso ist SEO von größter Bedeutung, unabhängig davon, ob Sie prerender.io oder eine andere vergleichbare Lösung verwenden. Dies muss in Firebase behoben werden, bevor Divshot heruntergefahren wird.

Yup hat immer noch Probleme mit SEO

+1 - Bezahlter Divshot-Kunde benötigt Prerender-Unterstützung für die Migration zu Firebase.

Völlig einverstanden. Firebase ist kein Divshot-Ersatz, wenn es keine Vorrenderfunktionen bietet. Ich bin ein bezahlter Divshot-Benutzer. Mit einer Kündigungsfrist von zwei Monaten wird Divshot geschlossen. Soll ich an der Migration zu einem anderen Dienst arbeiten? Muss ich meine Zeit mit der Konfiguration eines Servers verbringen? Oder konzentrieren Sie sich auf das, was ich tat? Ist das nicht die Idee des Dienstes? Sie müssen sich nicht mit Serverproblemen befassen? Bitte erläutern Sie, ob Firebase für den 14. Dezember eine Option sein wird oder ob ich mir Zeit nehmen soll, einen Server zu konfigurieren.

Herren, Mike hat bereits den Status dieser Funktion in vollem Umfang angegeben: Wir untersuchen Möglichkeiten, wie wir JS-Prerendering möglicherweise auf Firebase Hosting übertragen können, haben jedoch derzeit keine festen Pläne, dies zu teilen. (Persönliche Anmerkung: Ich möchte wirklich, dass es passiert).

Es gibt keine Zeitleiste. Wir wollen es genauso wie Sie.

Sie müssen selbst entscheiden, was Sie tun sollen. Wir haben keine öffentliche Straßenkarte. Wir können auf keiner Zeitachse Garantien geben, unabhängig von der Anzahl der Anforderungen oder Anfragen. Tut mir leid, es sind keine glücklichen, flauschigen Antworten, aber hoffentlich sind realistische Antworten für Ihre Planung nützlicher.

☼, Kato

Schön zu sehen, dass es dir wirklich wichtig ist :) Danke Jungs!

@mbleigh / @katowulf Eine Frage zu diesem Plan, JS-Prerendering auf Firebase zu bringen: Wie wird das JS-Prerendering besser, das die aktuelle SEO-Unterstützung von Firebase bietet?

Basierend auf dieser SO-Antwort bietet Firebase SEO bereits seit ng-conf 2015 an.

Ich habe also nicht die Vorteile, immer noch zu versuchen, Prerender.io auf Firebase zu verwenden.

@douglascorrea für Google SEO Die Verbesserungen werden marginal sein, aber (wie sich herausstellt) Google ist nicht der einzige Crawler da draußen: smile:

Der größte Gewinn hierfür sind Websites, die Facebook OpenGraph-Tags, Twitter-Karten und Nicht-Google-Suchmaschinen besser unterstützen möchten.

Vielen Dank an @mbleigh , es klärt die Dinge und lässt mich denken, dass wir diese Unterstützung wirklich wollen, oder eine Art Alternative, wie @drtriumph in seinem Kommentar sagte.

Ich suchte nach einer Lösung und fand die folgenden Details, die für andere Leser gut sein könnten:

  • Im Oktober 2015 lehnte Google die Empfehlung ab, _escaped_fragment_ und den Hashbang (! #) Zu verwenden. Für Google sollte daher jedes SPA den HTML5-Push-Status verwenden (HTML5-Modus bei AngularJS). Aber sie werden weiterhin Hashbang (! #) Unterstützen und es für eine Weile in ein entkommenes Fragment übersetzen.
  • Facebook und wahrscheinlich auch andere Crawler benötigen noch das entkommene_Fragment, die automatische Übersetzung von Hashbang in die _scaped_fragment-Notation von Facebook. Und wahrscheinlich tun andere Crawler dasselbe, da dies die vorherige Empfehlung von Google war.
  • Da Firebase noch keine Weiterleitungen unterstützt, die auf User-Agent basieren, besteht unsere Hoffnung weiterhin darauf, dass Crawler Hasbangs (! #) Wie folgt in Escape_Fragament übersetzen:
    Wenn Ihre URLs so aussehen:
    http://www.example.com/#!/user/1
    Greifen Sie dann wie folgt auf Ihre URLs zu:
    http://www.example.com/?_escaped_fragment_=/user/1

Für eine Weile könnte eine Idee, dies herauszufinden, folgende sein:

  • Verwenden Sie nicht html5 pushstate (html5-Modus in Angular) und verwenden Sie stattdessen Hashbang (! #)
  • Verwenden Sie prerender.io, um eine statische / zwischengespeicherte Version jeder Seite zu erstellen, die Sie in Ihrer Anwendung haben möchten (wie beim normalen Vorrenderprozess).
  • Entwickeln Sie ein Plugin, das diese zwischengespeicherte Version in einer Ordnerstruktur speichert, die mit dem Ordner ?_escaped_fragment_= beginnt, und erstellen Sie Ordner wie:
    Wenn Ihre URLs so aussehen:
    http://www.example.com/#!/user/1
    Der generierte Ordner wird
    ?_escaped_fragment_= +- /user +- /1

Dabei ist die 1-Datei die eigentliche HTML-Datei.

  • Stellen Sie diesen Ordner mit Firebase-Tools in Ihrem Root-Firebase-Ordner bereit (dieser Vorgang kann in einem Cron-Job oder ähnlichem automatisiert werden).

Wie ich denke, wird es funktionieren:

  • Wenn ein Crawler Ihre Hashbang-URL sieht, versucht er, die URL ?_escaped_fragment_= zu erreichen. Da wir tatsächlich HTML-Dateien in diesen Ordnern haben, wird die Firebase dann bereitgestellt und nicht zu index.html umgeleitet. Daher ist der vom Crawler gelesene HTML-Code die zwischengespeicherte Version und nicht die AngularJS-Version.

Um dies zu erreichen, müssen wir einen geplanten Job erstellen, der den Prerender für jede Seite ausführt, diesen Ordner speichert und die Firebase-Bereitstellung durchführt.

Da die Firebase-Bereitstellung keine teilweise Bereitstellung (synchronisierte oder inkrementelle Bereitstellung) unterstützt, sollten wir eine aktualisierte Kopie unserer Bereitstellung auf dem Server verwalten, der für diesen Prozess verantwortlich ist.

Ich werde versuchen, das einzurichten, und ich werde Sie wissen lassen, ob es funktioniert.

Können Sie uns bitte erlauben, "X-Prerender-Token" wie andere Header-Schlüssel zu setzen?
https://www.firebase.com/docs/hosting/guide/full-config.html
https://prerender.io/install-token

+1

@ srk9 Bitte reichen Sie ein separates Problem ein, anstatt diesen Thread erneut zu verwenden.

Warum ist dieses Problem geschlossen? Ich sehe keine Lösung veröffentlicht.

@ Douglascorrea , was ist mit deiner Idee passiert?

Vielen Dank,
- D.

Hallo @bethuneco , tut mir leid, dass gepostet habe.

Eigentlich wollte ich gerade einen Artikel schreiben, aber dann wurde mir klar, dass diese Lösung aus vielen "Maschinen" bestehen wird, damit sie in der Produktion funktioniert, und ich fühlte mich nicht wohl, sie zu "empfehlen", da ich nicht weiß, wie es wird sich in großem Maßstab verhalten.

Grundsätzlich benötige ich jedoch, wie bereits beschrieben, einen "Deployment / Prerendering" -Server, der bei jeder Bereitstellung alle Seiten vorrendert / verschrottet und den resultierenden HTML-Code in den oben beschriebenen Ordnern speichert (/? _ Escape_framgement_ / xxxx). Diese "realen / physischen" HTML-Dateien werden unsere "vorgerenderten" Seiten sein.

Jedes Mal, wenn ein Google- / Facebook- / Twitter-Crawler auf unsere Seite geht und das "Escape-Fragment" über das Präfix "? _Escaped_fragment" anfordert, verweist er tatsächlich auf einen echten Ordner mit echten HTML-Codes. Dieser HTML-Code wird dann indiziert.
Wenn ein echter Benutzer zur Anwendung wechselt, verwendet er nicht? _Scaped_fragment, sodass er die dynamische Seite erhält.

Das Problem ist, dass diese "Lösung" darin besteht, dass wir weiterhin HTMLs für jede oder jede weitere Seite generieren müssen. Wenn Ihre Anwendung beispielsweise ein einfaches CMS ist, müssen Sie für jeden neuen Beitrag / Artikel / jede neue Seite den Prozess ausführen, um die neue HTML-Seite zu generieren. Das Problem wird jedoch größer, wenn es sich beispielsweise um ein dynamisches soziales Netzwerk handelt, in dem jeder Benutzer Hunderte von "vorrenderbaren" Seiten generieren kann. Dann sollte Ihr Vorrender / interner Crawler die ganze Zeit ausgeführt werden. Und das kann in einer realen Welt ein Stopper sein.

Dies ist eine sehr "Trick" -Lösung, die für kleine Apps funktionieren könnte, aber nicht für wirklich große, da wir tatsächlich HTMLs generieren, um dort zu sein, wenn Crawler ausgeführt werden, und Crawler nicht automatisch zu unserem Prerender-Service umleiten, der sie online vorrendert (as Ein normaler Vorrenderprozess ist).

Daher sollten wir jetzt einen Nginx-Server als statischen Server verwenden, um vorrendern zu können, oder einen Divshot-Konkurrenten wie https://www.netlify.com/ , der sofort einsatzbereite Vorrender für Einzelseitenanwendungen bereitstellt .

@ Douglascorrea ,

Vielen Dank für diese erweiterte Erklärung. Sie sind die erste Person, die Netlify erwähnt, also werde ich das untersuchen.

Sie haben Recht, dass das Vorrendern nur für kleine Websites geeignet ist. Glücklicherweise ist meine App ziemlich klein (maximal ca. 1.200 Seiten), so dass das funktionieren könnte.

Die einfachste Lösung (und die, die Google vermeidet) ist das Vorrendern von Javascript und das Bereitstellen von HTML, wenn Roboterbenutzeragenten erkannt werden. Google hat bereits das Rendern außerhalb des Browsers demonstriert, sodass dies technisch nicht schwierig ist. Es ist eine strategische Herausforderung für sie, weil es einem Konkurrenten im Anzeigengeschäft zu helfen scheint.

Wenn etwas funktioniert, werde ich hier ein Update veröffentlichen.

Lassen Sie mich hier Klarheit für alle schaffen, die verwirrt sein könnten:

Unterstützt Firebase Hosting JS-Prerendering auf dem Server? Nein, das tut es nicht. Das serverseitige Vorrendern ist etwas, das wir unterstützen möchten und das auf unserer langfristigen Roadmap steht. Derzeit sind jedoch keine spezifischen Daten oder Zeitpläne bekannt zu geben. Wir wissen, dass dies ein Problem ist, insbesondere für diejenigen, die Facebook- oder Twitter-Karten verwenden, und wir hoffen, dass wir in Zukunft mehr darüber teilen können.

Kannst du nicht einfach zB X-Prerender-Token ? Nein, das wird nicht funktionieren. Das Vorrendern muss den tatsächlich vorgerenderten Inhalt unter der URL ?_escaped_fragment_= bereitstellen. Dies bedeutet, dass es sich nicht nur um den Header handelt, sondern auch um den Inhalt, den der Server kennen und ordnungsgemäß verarbeiten muss. Es gibt keine halbe Lösung, so viel wir uns wünschen.

Welche Art von Vorrendern ist möglich? Die einzige Art von echtem "Vorrendern", die Sie derzeit durchführen können, ist die statische Site-Kompilierung. Normalerweise geschieht dies mit etwas wie Jekyll, aber es ist sicherlich möglich, einen kopflosen Browser lokal zu verwenden, um eine dynamischere Site "vorzurenderen". Sie müssen jede URL vollständig rendern und dann bereitstellen, sodass dies im Moment kein fantastischer Anwendungsfall ist. Beachten Sie auch, dass das Erstellen von Dateinamen mit ?_escaped_fragment_ nicht möglich ist, da das CDN Abfrageparameter entfernt und dies im Allgemeinen kein unterstützter Anwendungsfall ist.

Ist dies eine strategische Sache von Google, um andere Crawler im Stich zu halten? Nein, absolut nicht. Wir möchten die Vorteile des Vorrenderns für Firebase Hosting nachdrücklich unterstützen. Es ist alles nur eine Frage der Zeit und der Ressourcen.

Ich musste wegen des Social-Media-Tags / alternativen SEO-Problems vom Firebase-Hosting wechseln. Es ist ein Deal-Breaker, wenn Nicht-Techniker bemerken, dass wir keine schönen Bilder auf unseren Links haben, wie alle anderen im Internet.

Sie können mit Phantomjs und Prerender-Middleware vorrendern. Es ist Open Source und funktioniert einwandfrei, aber ich habe mich für prerender.io entschieden, um Ops-Arbeit zu vermeiden. Bei der ersten Anforderung ist es etwas langsam, aber Sie können Seiten zwischenspeichern, indem Sie jede Seite vorbeugend anfordern.

Es ist auch schön, alle Seiten anzufordern, denn dann können Sie einige Tests durchführen und den HTML-Code analysieren, um sicherzustellen, dass die Tags und Inhalte korrekt gerendert werden.

Es gibt eine große Einschränkung. Prerender funktioniert nicht mit Live-Firebase-Daten. Wie könnte es? Firebase-Daten sind in Echtzeit, die Verbindung ist dauerhaft. Prerender ist einmalig, die Verbindung ist geschlossen. Es ist nicht möglich zu erkennen, wann das Rendern der Seite abgeschlossen ist, da Sie keine Anforderungen zählen können.

Ich hatte ein paar Ideen, um dies zu beheben:

  1. Stellen Sie mit jedem .on("value") Firebase-Abonnement eine GET-Anfrage. Überspringen Sie das Abonnement, wenn es sich um eine Vorrenderanforderung handelt. Überspringen Sie die GET-Anforderung, wenn es sich um einen normalen Benutzer handelt. Dies funktioniert nicht für .on("child_*") -Ereignisse.
  2. Setzen Sie das globale Prerender-Flag oben in Ihrer Haupteintragsdatei auf false setzen Sie das Flag für jede Seitenkomponente auf true sobald die Daten geladen wurden. Bei ordnungsgemäßem Design gibt es normalerweise einen Ladezustand und einen Fehlerzustand und einen Erfolgszustand. Setzen Sie daher in der Hilfsmethode für den Fehler- / Erfolgsstatus das Flag auf true .

Es ist ein Schmerz, aber nur wenige dynamische Seiten werden nicht richtig gerendert und müssen speziell behandelt werden. Ich denke immer noch, dass statische Vorteile die Kosten überwiegen.

@mbleigh freut sich auf das, was euch in Zukunft

Ich hoffe wirklich auf eine Problemumgehung. Der einzige Grund, warum ich Backend brauche, sind auch Twitter-Karten und Opengraphs. Sicher, das Backend bietet einige andere Vorteile für Apps mit nur einer Seite, wie z. B. isomorphes Rendern, aber das ist einfach schön zu haben. Twitter- und OG-Tags sind wichtig für jede App, die geteilt werden muss.

Könnte es möglicherweise eine Art Umschreibungsregel geben, die dem Firebase-Backend befiehlt, dieses oder jenes Objekt / HTML aus der Datenbank bereitzustellen?

Ein solches Objekt könnte im Voraus vorbereitet werden, da jede Freigabe mit dem Besuch der URL oder dem Übergeben einer Freigabeschaltfläche beginnt.

Ich war nur erstaunt über Firebase und stellte dann fest, dass ich es nicht verwenden kann, als ich diese Kommentare las.
Da ich auch einen Service wie Prerender brauche, um zu arbeiten. Also, was ist mit der Entwicklung auf diesem?

Bring es zusammen Google! Du bist eine freegin 'Suchmaschine !! :Lachen:

Aber im Ernst. Das ist so verdammt wichtig. Dies könnte das verdammt Wichtigste sein, was es je gab.

Ich weiß, es war ein Scherz, aber um das zu verdeutlichen, würde sich diese Bemerkung an die Google-Suche oder an Google Firebase richten? Nur eine davon ist eine Suchmaschine und nur eine davon bietet Firebase-Hosting (und das Vorkompilieren von Webseiten ist nicht genau das Ziel von beiden, obwohl ein klarer Mehrwert für Hosting darin besteht, mit Tools, die dies bereitstellen, besser zu funktionieren).

In einem verwandten Housekeeping-Hinweis geht es auch nicht um Firebase-Tools (dh diesen OSS-Issue-Tracker). Ich werde dafür sorgen, dass Ihre Stimme in die Prioritätsdiskussion aufgenommen wird. Die Mailingliste ist wahrscheinlich der beste Ort, um in Zukunft Anfragen nach Kernfunktionen zu stellen.

Vor allem haben wir das nicht vergessen. Es ist immer noch sehr wichtig für uns. Etwas weniger wichtig als die Integration in Google Cloud-Funktionen und die Bereitstellung grundlegender Erkenntnisse über Analytics, Crash Reporting und Test Labs, aber dennoch wichtig.

Ich werde dies noch einmal ansprechen, wenn wir das nächste Mal über Prioritäten sprechen. Wir freuen uns sehr, dass Sie dem Feedback Ihre Stimme hinzufügen. ☼☼☼

Danke für deine Bemühungen auf firebase @katowulf !!
Dies ist das einzige, was mich davon abhält, Firebase als "Host" für meine ng1-Anwendungen zu verwenden.

Du bist hier nicht allein. Andere sind auf die gleiche Einschränkung gestoßen. Da Google jetzt von JavaScript generierte Inhalte indizieren kann und einige spezielle Bestimmungen für die Indizierung von Firebase-Inhalten gelten, sollten nicht authentifizierte Firebase-Daten, die auf Ihre Seiten geladen werden, bereits indiziert werden. Volle Pre-Compiler-Unterstützung steht jedoch auf dem Radar.

@katowulf nur als Headsup (wenn Sie es noch nicht wussten oder sahen), aber das Hauptproblem ist nicht der Google Crawler. Ich denke, die Leute wissen das schon, wenn sie so etwas wie Prerender verwenden. Es sind die anderen Crawler wie zum Beispiel LinkedIn, Facebook, Twitter und mehr, die nicht zufrieden sind. Sie wollen statischen Inhalt

@samvloeberghs Ich denke jedoch, dass die Auswirkungen dieser Unterstützung durch Google darin bestehen, dass andere wahrscheinlich nachziehen. Ich wollte damit implizieren, dass dies ein Schritt in die richtige Richtung ist, um dies zu verbreiten (und dass es zumindest heute mit Google funktioniert).

Es ist unwahrscheinlich, dass FB / LinkedIn / Twitter der Fähigkeit von Google folgt, schnell voranzukommen, wie wir es möchten. Es wird immer einen großen Spieler dahinter geben, und wir können es einfach nicht ignorieren. Auf der anderen Seite löst Google das Problem, indem es an NG2 arbeitet, das eine serverseitige Kompilierung mit Angular Universal bietet :) 👍

Winkel zur Rettung! Moment mal, sagen Sie, dass maschinelles Lernen all dies nicht lösen wird?

Um meine 2 Cent anzubieten, stelle ich fest, dass Kunden Social-Media-Karten mindestens genauso schätzen wie SEO. In Bezug auf die jüngsten Projekte war Twitter / Facebook die Hauptmethode, mit der sich Marken durch das Teilen von Links zu ihrer Website bewerben.

Natürlich ist SEO immer noch kritisch, aber wäre ein Angriff auf Social Media-Karten eine einfachere / kurzfristigere Lösung? Da Webkarten nur Meta-Tags sind, können Sie die Struktur in firebase.json definieren (ähnlich den Sicherheitsregeln)? Firebase könnte dann die richtigen Meta-Tags für Twitter / Facebook-Crawler einfügen, obwohl ich sicher bin, dass es nicht so einfach ist 😄.

Trotzdem vielen Dank für die großartige Arbeit und die Unterstützung der Community. Wir freuen uns auf einige der aufregenderen Firebase-Funktionen (Cloud-Funktionen 👍!).

@katowulf , mein Kommentar war mehr als alles andere eine starke Beule ... ihr macht eine großartige Arbeit! Ich lenke meinen Scherz mehr auf Google als Ganzes. Ich glaube jedoch, dass Firebase die neue * Google-Abteilung ist, die dieses ganze Problem "SPA / PWA - SEO-Seitenwiedergabe" besitzen sollte.

Meine Gedanken dazu sind ...

Unabhängig davon, welche Produkte Google auf den Markt bringt, sollten sie mit allen Plattformen, die wir heute verwenden, einwandfrei funktionieren und herausragende Beispiele sein, die funktionieren und das Originalprodukt Google Search widerspiegeln.

SPAs gibt es schon eine Weile. Google hat 2 davon [Angular] & [Polymer]. Die Implementierung von SEO in ihnen (Meta Tags / OpenGraph / Schema) ist eine wichtige Blackbox (es sei denn, Sie sind ein Backend-Ninja). Es war eine gute Nachricht, dass die Google-Suche mit der Verarbeitung von JS begonnen hat, aber dies ist definitiv nur die halbe Miete (vielleicht weniger).

Firebase, ein Backend as a Service (BaaS), scheint die perfekte neue * Google-Gruppe zu sein, um das gesamte Rendern von SPA-Seiten wirklich zu glätten. Ich weiß, dass ihr euch darum kümmern werdet, aber ich bin der festen Überzeugung, dass dies eine wichtige Funktion mit höchster Priorität sein sollte.

Stellen Sie sich vor, Sie lesen diese Überschrift ...

FIREBASE PRÄSENTIERT ...
Neue und verbesserte Suchmaschinenoptimierung für alle Single-Page-Anwendungen (SPAs) und progressiven Web-Apps (PWAs)!

Entwickler würden sich versammeln: +1:

Ich wollte nur schnell einschalten, dass wir das definitiv auf unserem Radar haben. Es ist wichtig, aber auch viele andere Dinge (wie Kato aufgezählt hat). Wir haben einige Ideen, wie wir dieses Problem lösen können, aber es gibt einige Abhängigkeiten, die wir zuerst aus dem Weg räumen müssen. Versuchen Sie, geduldig zu bleiben und zu wissen, dass dies definitiv in unseren Gedanken ist!

Nun, das ist enttäuschend. Ich bin jetzt auf der Suche nach Firebase-Alternativen ...

Es ist fast 3 Jahre her ...

Gibt es hierzu Neuigkeiten.. ?

Sollte das nicht jetzt funktionieren, wo Firebase Divshot besitzt? PLZ aktualisieren!

Wir sind uns des Wunsches nach dieser Art von Funktionalität bewusst und es ist eine Priorität für uns, hier einige bessere Lösungen anzubieten. Ich habe noch keine Zeitleiste zu verkünden, aber wir haben euch nicht vergessen.

+1

:( :( :(

Wir kamen zu einem ähnlichen Ergebnis. Was hast du noch gesehen? ;)

Ich verwende nur Firebase-Funktionen als Endpunkt für den Freigabe-Link und leite dann mit JavaScript einen Link um.

Möglicherweise haben Sie dies gesehen oder nicht, aber Cloud-Funktionen sind jetzt in Firebase Hosting integriert !!!

Dies kann als unsere kanonische Lösung für das serverseitige Rendern mit Firebase Hosting angesehen werden. Genießen!

@mbleigh OK, wenn ich also eine globale Header-Datei mit Metadaten wie den folgenden habe, wird diese derzeit nicht im Frontend repliziert. Wenn ich die Cloud-Funktionen installiere, sollte dies alles sein, was ich brauche, um diese Funktion einzuschalten.

<meta name="description" content="{{ pageDescription }}">

Super, danke für das Update.

Am 17. Mai 2017, 17:39 Uhr, schrieb "Michael Bleigh" [email protected] :

Möglicherweise haben Sie dies gesehen oder nicht, aber die Cloud-Funktionen sind jetzt integriert
mit Firebase-Hosting https://firebase.google.com/docs/hosting/functions
!!!

Dies kann als unsere kanonische Lösung für das serverseitige Rendern angesehen werden
mit Firebase Hosting. Genießen!

- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-302268864 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbtWCdygdw4ozixK5_XcL2Dlznp4Jks5r65M-gaJpZM4CtPYG
.

Mir ist klar, dass dies möglicherweise nicht das beste Problem für diese Kommentare ist, aber die Google-Suche nach meinen Problemen hat mich dazu geführt, und es scheint eine aktive Diskussion zu geben. Bitte verzeihen Sie mir!

Was ich gerne sehen würde, um das Problem des Renderns offener Diagrammvorlagen für soziale Websites in auf Firebase gehosteten SPAs zu lösen, ist die Möglichkeit, den Lastausgleich über den Benutzeragenten durchzuführen.

Ich möchte Cloud-Funktionen verwenden können, um einige Vorlagendaten aus memcache / cloudql abzurufen und die Vorlagen-Tags auf der anfordernden sozialen Plattform zu rendern, aber für alle anderen Clients auf statisches Hosting zurückgreifen. Dann würden wir nicht für alle Anforderungen ein vollständiges serverseitiges Rendering benötigen.

@cdharris Totally, ATM, schrieb die gesamte Anfrage in eine Funktion um, die ich versucht habe, window.location zu verwenden, um die zusätzliche Weiterleitung (für den Kunden / Besucher) zum statischen Hosting vorzunehmen. Für meine SEO-Zwecke funktionierte dies möglicherweise nicht für soziale Zwecke würde es.

@mbleigh Gibt es eine Option, um Anfragen von Crawlern / sozialen

Die Entscheidung, was in einer Firebase-Funktion zurückgegeben werden soll, kann funktionieren. Wir können sagen: Kommt die Anfrage von Facebot? Geben Sie dann diese geöffneten Diagramm-Tags zurück. Wenn nicht, geben Sie die index.html zurück. Aber wie kann ich die verdammte index.html von einer Firebase-Funktion zurückgeben?

fs.readFileSync ('./ index.htm')

Am 13. September 2017, 04:34 Uhr schrieb "Birowsky" [email protected] :

Das Treffen der Inhaltsentscheidung in einer Firebase-Funktion kann funktionieren. Wir können sagen:
Kommt die Anfrage von Facebot? Geben Sie dann diese geöffneten Diagramm-Tags zurück. Wenn nicht,
Geben Sie die index.html zurück. Aber wie kann ich die verdammte index.html von a zurückgeben?
Firebase-Funktion?

- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329140134 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbrXQNbVMhRmeZQTbx3Z3vi0c1HXTks5sh728gaJpZM4CtPYG
.

@ Megamindbrian bedeutet dies, dass die Funktionen Zugriff auf die gehosteten Dateien haben? Ist es irgendwo dokumentiert? Trotzdem danke!

Ja. So erinnere ich mich, wie ich es benutzt habe. Gute Frage, ich versuche, Dokumente zu finden.

Am 13. September 2017, 7:09 Uhr schrieb "Birowsky" [email protected] :

@megamindbrian https://github.com/megamindbrian ist es impliziert, dass die
Funktionen haben Zugriff auf die gehosteten Dateien? Ist es irgendwo dokumentiert?
Trotzdem danke!

- -
Sie erhalten dies, weil Sie erwähnt wurden.

Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329179741 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbobjixHUterg61PAFmLc9v72C7kyks5sh-IogaJpZM4CtPYG
.

Hier einer
https://stackoverflow.com/questions/42960506/how-can-i-read-and-write-to-firebase-storage-from-with-cloud-functions-for-fir

Am 13. September 2017, 7:09 Uhr schrieb "Birowsky" [email protected] :

@megamindbrian https://github.com/megamindbrian ist es impliziert, dass die
Funktionen haben Zugriff auf die gehosteten Dateien? Ist es irgendwo dokumentiert?
Trotzdem danke!

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329179741 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbobjixHUterg61PAFmLc9v72C7kyks5sh-IogaJpZM4CtPYG
.

Dieser verwendet ein temporäres Verzeichnis, aber ich denke, es funktioniert auch mit Dateien
Sie haben neben Ihrem Projekt hochgeladen. Es könnte unveränderlich sein, weshalb
In diesem Beispiel wird die Datei ausgelagert, um sie an einem anderen Ort zu speichern
https://firebase.google.com/docs/storage/extend-with-functions

Am 13. September 2017, 7:12 Uhr schrieb "Brian Cullinan" [email protected] :

Hier eine https://stackoverflow.com/questions/42960506/how-can-i-
Lese- und Schreibzugriff auf Firebase-Speicher aus Cloud-Funktionen für Fir

Am 13. September 2017, 7:09 Uhr schrieb "Birowsky" [email protected] :

@megamindbrian https://github.com/megamindbrian ist es impliziert, dass die
Funktionen haben Zugriff auf die gehosteten Dateien? Ist es irgendwo dokumentiert?
Trotzdem danke!

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329179741 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbobjixHUterg61PAFmLc9v72C7kyks5sh-IogaJpZM4CtPYG
.

Entschuldigung, ich sehe immer noch keine richtige Einführung, wie die Funktionen konzeptionell mit den gehosteten Dateien verbunden sind. Wenn Sie es erklären möchten, habe ich einige Punkte für Sie: https://stackoverflow.com/q/46192570/592641

Ich konnte mir vorstellen, das mit Codebeispielen zu beantworten, aber es war nicht klar
dass Sie innerhalb Ihrer Funktion mit Inhalten aus einer Datei in antworten können
dein Projekt? Es ist keine Weiterleitung.
Ich werde noch etwas Code ausgraben.

Am 13. September 2017, 7:18 Uhr schrieb "Birowsky" [email protected] :

Entschuldigung, ich sehe immer noch keine richtige Einführung in die Funktionen
konzeptionell mit den gehosteten Dateien verbunden. Wenn Sie erklären möchten, habe ich
Einige Punkte für Sie: https://stackoverflow.com/q/46192570/592641

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329182385 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbnCSoaKUuVKUnfha5A-4K-p76kZ3ks5sh-QygaJpZM4CtPYG
.

@megamindbrian Ich habe gerade fs.readFileSync('./index.html') ausprobiert, aber leider ist die Datei nicht da. Ich hatte auch gehofft, die gehosteten Dateien in einem implizit generierten Speicherbereich zu finden, kein Glück. Wie würden Sie vorgehen?

Wenn Sie Ihr Hosting-Verzeichnis public in Ihrem Verzeichnis functions verschachteln, ist es dort verfügbar.

@Birowsky Yup , hier ist, wie ich eine Datei aus einer Cloud-Funktion lese, z. B. index.js:

const page = fs.readFileSync(__dirname + '/facebook-meta.html').toString();

Aber wenn Ihr Projektlayout ist:

project/
project/src (<- actual source of app)
project/functions ( <- firebase functions)
project/dist (<- build output)

Sie müssen die relevanten Dateien aus / dist in / functions kopieren

Diese Ausgabe hat almos 3 Jahre (bisher) und noch kein Glück zu diesem Zeitpunkt ????

Bedeutet wahrscheinlich, dass Google die Firebase mitten in der Unterstützung aller aufgibt
unsere Apps.

Unsere offizielle Lösung für diese Klasse von Problemen ist die Verwendung von Cloud-Funktionen
Server-seitiges Rendern für Inhalte, die für statische Elemente sichtbar sein müssen
Crawler:

https://firebase.google.com/docs/hosting/functions

Dies ist eine robustere und allgemeinere Lösung, die alle Arten von ermöglicht
coole Dinge!

Wenn Sie der Meinung sind, dass noch etwas fehlt, geben Sie uns bitte etwas
Ein detaillierter Anwendungsfall, damit wir darüber nachdenken können, wie wir ihn angehen können! :) :)

Am Do, 14. September 2017, 15:57 Uhr Brian Cullinan [email protected]
schrieb:

Bedeutet wahrscheinlich, dass Google die Feuerbasis verlassen hat, um alle zu unterstützen
unsere Apps.

Am Do, 14. September 2017, um 15:52 Uhr, tofanelli [email protected]
schrieb:

Diese Ausgabe hat almos 3 Jahre (bisher) und noch kein Glück zu diesem Zeitpunkt ????

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
<
https://github.com/firebase/firebase-tools/issues/33#issuecomment -329630338
,
oder schalten Sie den Thread stumm
<
https://github.com/notifications/unsubscribe-auth/AX5XbhBSDSl6TStSv7M02Dx0brb9MOPbks5sia44gaJpZM4CtPYG

.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329631266 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AAAD_iI6L-yu3RTECI88a2y_ZOzIxdDQks5sia9rgaJpZM4CtPYG
.

@mbleigh Können Sie Cloud-Funktionen bereits im Stammverzeichnis einer Firebase-Domäne verwenden?

Ja, wenn ich dich richtig verstehe. Haben Sie schon einmal Probleme gehabt?

Am Do, 14. September 2017, 18:38 Uhr Brian Cullinan [email protected]
schrieb:

@mbleigh https://github.com/mbleigh Können Sie Cloud-Funktionen auf einem verwenden ?
Firebase-Stammverzeichnis schon?

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-329653711 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AAAD_g7BV3TMM_5nVX92_-3ai_mZHfHBks5sidUvgaJpZM4CtPYG
.

@mbleigh

Dies ist eine robustere und allgemeinere Lösung, die alle Arten von coolen Dingen zulässt!

SSR macht unser System komplexer 😢
Ich denke, das Vorrendern ist nicht immer cooler, aber oft 💡
zB Facebook OGP, Twitter Cards, SEO für Nicht-Google

@mbleigh @megamindbrian Vielen Dank für Ihre Nachrichten. Ich habe mein Hosting veranlasst, alle Anfragen an meine Funktion und Antwort index.html richten, die in functions/build/index.html an Kunden gehostet werden. Aber ich weiß nicht, wie ich bestätigen soll, dass eine Anfrage von FaceBot kommt? Ich habe versucht, mithilfe von Facebook-Debugging-Tools auf die URL meiner Website zuzugreifen. Ich nahm an, dass die Cloud-Funktion ausgelöst wird, dies war jedoch nicht der Fall. Ich bin mit der Backend-Entwicklung nicht vertraut. Können Sie mir einen Hinweis geben? Vielen Dank.

Stellen Sie bei Verwendung des Facebook-Tools sicher, dass Sie die Schaltfläche verwenden, auf der etwas gelesen wird
wie "Holen Sie sich eine neue Kopie" in der Nähe der Vorschau.

Am Dienstag, den 17. Oktober 2017 um 08:29 Uhr schrieb Jude [email protected] :

@mbleigh https://github.com/mbleigh @megamindbrian
https://github.com/megamindbrian Vielen Dank für Ihre Nachrichten. ich habe
Mein Hosting leitete alle Anfragen an meine Funktion und Antwort
index.html, das in functions / build / index.html für Clients gehostet wird. Aber
Ich weiß nicht, wie ich bestätigen soll, dass eine Anfrage von FaceBot kommt. Ich habe versucht
Ich nahm an, dass ich Facebook-Debugging-Tools verwende, um auf die URL meiner Website zuzugreifen
Die Cloud-Funktion würde ausgelöst, war es aber nicht. Ich bin nicht vertraut mit
Backend-Entwicklung, können Sie mir einen Hinweis geben? Vielen Dank.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-337266581 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbrCQ3mowcUnJjWYWsaiScoN1y4l0ks5stMfcgaJpZM4CtPYG
.

- -
VERTRAULICHKEITSHINWEIS: Der Inhalt dieser und aller E-Mail-Nachrichten
Anhänge sind ausschließlich für den / die Adressaten bestimmt und können enthalten
vertrauliche und / oder privilegierte Informationen und können rechtlich geschützt sein
von der Offenlegung. Es wird dann mit Technologieunternehmen, Bots, Hackern, geteilt
Regierungsbehörden und Vermarkter. Die Sicherheit dieser Nachricht ist keine,
und es kann jederzeit auf Instagram geteilt werden. Wenn Sie damit einverstanden sind,
Bitte antworten. Es gibt nirgendwo wirklich Sicherheit oder Datenschutz. Wenn
Sie sind anderer Meinung, dass Sie vielleicht campen und mit Menschen von Angesicht zu Angesicht sprechen möchten
wie früher.

Gibt es irgendetwas in Ihren Firebase-Protokollen wie "Funktionsausführung gestartet"?

Am Dienstag, 17. Oktober 2017, um 08:37 Uhr, Brian Cullinan [email protected]
schrieb:

Stellen Sie bei Verwendung des Facebook-Tools sicher, dass Sie die Schaltfläche zum Lesen verwenden
so etwas wie "Holen Sie sich eine neue Kopie" in der Nähe der Vorschau.

Am Dienstag, den 17. Oktober 2017 um 08:29 Uhr schrieb Jude [email protected] :

@mbleigh https://github.com/mbleigh @megamindbrian
https://github.com/megamindbrian Vielen Dank für Ihre Nachrichten. ich habe
Mein Hosting leitete alle Anfragen an meine Funktion und Antwort
index.html, das in functions / build / index.html für Clients gehostet wird. Aber
Ich weiß nicht, wie ich bestätigen soll, dass eine Anfrage von FaceBot kommt. Ich habe versucht
Ich nahm an, dass ich Facebook-Debugging-Tools verwende, um auf die URL meiner Website zuzugreifen
Die Cloud-Funktion würde ausgelöst, war es aber nicht. Ich bin nicht vertraut mit
Backend-Entwicklung, können Sie mir einen Hinweis geben? Vielen Dank.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-337266581 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbrCQ3mowcUnJjWYWsaiScoN1y4l0ks5stMfcgaJpZM4CtPYG
.

- -
VERTRAULICHKEITSHINWEIS: Der Inhalt dieser und aller E-Mail-Nachrichten
Anhänge sind ausschließlich für den / die Adressaten bestimmt und können enthalten
vertrauliche und / oder privilegierte Informationen und können rechtlich geschützt sein
von der Offenlegung. Es wird dann mit Technologieunternehmen, Bots, Hackern, geteilt
Regierungsbehörden und Vermarkter. Die Sicherheit dieser Nachricht ist keine,
und es kann jederzeit auf Instagram geteilt werden. Wenn Sie damit einverstanden sind,
Bitte antworten. Es gibt nirgendwo wirklich Sicherheit oder Datenschutz. Wenn
Sie sind anderer Meinung, dass Sie vielleicht campen und mit Menschen von Angesicht zu Angesicht sprechen möchten
wie früher.

- -
VERTRAULICHKEITSHINWEIS: Der Inhalt dieser und aller E-Mail-Nachrichten
Anhänge sind ausschließlich für den / die Adressaten bestimmt und können enthalten
vertrauliche und / oder privilegierte Informationen und können rechtlich geschützt sein
von der Offenlegung. Es wird dann mit Technologieunternehmen, Bots, Hackern, geteilt
Regierungsbehörden und Vermarkter. Die Sicherheit dieser Nachricht ist keine,
und es kann jederzeit auf Instagram geteilt werden. Wenn Sie damit einverstanden sind,
Bitte antworten. Es gibt nirgendwo wirklich Sicherheit oder Datenschutz. Wenn
Sie sind anderer Meinung, dass Sie vielleicht campen und mit Menschen von Angesicht zu Angesicht sprechen möchten
wie früher.

@megamindbrian Funktion wurde ausgelöst, wenn ich mit einem Browser auf meine Website zugreife. Es wurde jedoch nicht ausgelöst, nachdem das Facebook-Tool zum Abrufen der Seitendaten verwendet wurde.

@judewang werfen Sie einen Blick auf https://firebase.google.com/docs/hosting/functions#when_is_cached_content_served

Für einen schnellen und schmutzigen Test können Sie versuchen, der getesteten URL einen zufälligen Abfrageparameter hinzuzufügen.

Die erste Frage war also, wie man Prerender verwendet. Diese Lösung löst nicht das Problem der Prerender-Integration, sondern das offene Diagramm für eine einzelne Seiten-App.

  1. In meinem Build-Skript kopiere ich public/index.html nach functions/hosting/index.html
  2. In firebase.json füge ich eine Umschreiberegel hinzu, um auf eine Cloud-Funktion namens "Host" zu verweisen.
"hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "host"
      }
    ]
  }
  1. Ich definiere eine Cloud-Funktion namens host . In den meisten Fällen wird nur die index.html -Datei zurückgegeben, die ich in functions/hosting/index.html kopiert habe. Wenn der Agent jedoch einer der bekannten Parser für offene Diagramme ist, gebe ich Datenbankdaten im offenen Diagrammformat basierend auf dem zurück Route.
exports.host = functions.https.onRequest((req, res) => {
  var userAgent = req.headers['user-agent'];
  if (userAgent.startsWith('facebookexternalhit/1.1') ||
    userAgent === 'Facebot' ||
    userAgent.startsWith('Twitterbot')){

    //getOpenGraph() parses the path, and gets some data from the firebase database to construct open graph data.
    // eg: <meta property="og:description" content="My super cool webpage." /> <meta property="og:title"...

    res.status(200).send(getOpenGraph(req.path));
  }
  else{
    //optional - turn on caching: res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
    res.status(200).send(fs.readFileSync('./hosting/index.html').toString());
  }
});

Ich denke das ist es. Hoffe das hilft einigen Leuten!

Ich muss sagen, dass dies enttäuschend ist. Neuere Konkurrenten wie https://www.netlify.com/features/ haben dies nicht

Firebase beendet es für Mobile / React Native, und ich genieße es wirklich als Plattform insgesamt, aber dies ist ein ziemlich großer Fehler für Web-Apps IMO.

Im Allgemeinen haben wir festgestellt, dass Inhalte, die vorgerendert werden müssen, auch Inhalte sind, die am besten durch serverseitiges Rendern bereitgestellt werden (aus Gründen der Leistung und des ersten Ladens). Generisches Prerendering steht aus diesem Grund nicht auf unserer unmittelbaren Roadmap.

Abgesehen davon hören wir uns das Feedback an, dass die Funktionsintegration flexibler sein soll, um "manchmal" die Ausführung von Funktionen zu ermöglichen. Da Firebase Hosting stark vom CDN-Caching abhängt, ist diese Art von Flexibilität für uns technisch schwierig zu erreichen. Wir werden weiterhin auf Feedback hören und versuchen, Wege zu finden, um die Plattform für Ihren Anwendungsfall zu verbessern. :Lächeln:

Eine Benutzeroberfläche in Firebase zum direkten Verbinden von Funktionen mit der Vorderseite einer Domäne
Name würde meinen Anwendungsfall beheben.

https: //us-central1-...dsaflk; sdafkljsdafkl; jsdf;
lkjsadfkljasdfkljsdaflk.cloudfunctions.net

Am Fr, 5. Januar 2018 um 15:33 Uhr, Michael Bleigh [email protected]
schrieb:

Im Allgemeinen haben wir festgestellt, dass auch Inhalte vorgerendert werden müssen
Inhalte, die am besten durch serverseitiges Rendern bereitgestellt werden (für Leistung und
Gründe für das erste Laden). Generisches Prerendering steht nicht auf unserer unmittelbaren Roadmap
aus diesem Grund.

Davon abgesehen hören wir uns das Feedback an, dass wir das wollen
Die Funktionsintegration soll flexibler sein, um "manchmal" Funktionen zu ermöglichen
Ausführung. Da Firebase Hosting stark auf CDN-Caching dieser Art angewiesen ist
Flexibilität ist für uns technisch schwer zu erreichen. Wir werden weitermachen
um auf Feedback zu hören und Wege zu finden, um die Plattform besser zu machen
Ihr Anwendungsfall. 😄

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/firebase/firebase-tools/issues/33#issuecomment-355683821 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AX5XbtVDQSPOIAZFyozujQQUektf2WM1ks5tHqM8gaJpZM4CtPYG
.

- -
"Ich habe Ingenieurwissenschaften studiert"

VERTRAULICHKEITSHINWEIS: Der Inhalt dieser und aller E-Mail-Nachrichten
Anhänge sind ausschließlich für den / die Adressaten bestimmt und können enthalten
vertrauliche und / oder privilegierte Informationen und können rechtlich geschützt sein
von der Offenlegung. Es wird dann mit Technologieunternehmen, Bots, Hackern, geteilt
Regierungsbehörden und Vermarkter. Die Sicherheit dieser Nachricht ist keine,
und es kann jederzeit auf Instagram geteilt werden. Wenn Sie damit einverstanden sind,
Bitte antworten. Es gibt nirgendwo wirklich Sicherheit oder Datenschutz. Wenn
Sie sind anderer Meinung, dass Sie vielleicht campen und mit Menschen von Angesicht zu Angesicht sprechen möchten
wie früher.

@mbleigh ist dieser Standpunkt nicht etwas gegen das Ethos von Serverless und der Verwendung eines BaaS / FaaS-Anbieters wie Firebase? Mit dem Trend zu SPAs in den letzten Jahren ist dies ein ziemlich häufiger Anwendungsfall, so dass er von Wettbewerbern wie Netlify und Roast angegangen wird. Obwohl sie kleiner sind, ist dies für das Hosting nur sinnvoll und bietet schnellere Ladezeiten sowie wichtige Erkennbarkeit und Freigabefähigkeit.

Anstatt zusätzlichen Entwicklungs- und Wartungsaufwand für Kunden, einen optionalen Prerender-Service oder zumindest die Möglichkeit zur Integration in einen Drittanbieter-Service wie prerender.io hinzuzufügen, wäre dies eine enorme Verbesserung.

Firebase ist wirklich eine großartige Plattform, scheint aber eher auf Mobilgeräte ausgerichtet zu sein, wobei Hosting für mich der einzige glanzlose Teil davon ist.

Vielen Dank für die schnelle Antwort.

@mbleigh

Im Allgemeinen haben wir festgestellt, dass Inhalte, die vorgerendert werden müssen, auch Inhalte sind, die am besten durch serverseitiges Rendern bereitgestellt werden (aus Gründen der Leistung und des ersten Ladens).

Abgesehen von @Pushplaybangs genauem Argument muss ich Ihrem Argument nicht zustimmen. Zum einen liegt es am Anwendungsentwickler (dh nicht an euch), Entscheidungen in diesem Bereich zu treffen. Bloße Überlegungen zur Seitenleistung müssen mit anderen ebenso wichtigen Architekturentscheidungen in Einklang gebracht werden.

Apps mit nur einer Seite oder Abschnitte von Apps müssen auf ein gewisses Maß an clientseitigem Rendering zurückgreifen, und leider können Crawler, einschließlich der von Google, solche Seiten noch nicht sehr gut indizieren. Nach Monaten fehlgeschlagener Versuche, meine Websites von Google ordnungsgemäß indizieren zu lassen, musste ich auf PrerenderIO zurückgreifen. Dies zwang mich, einen serverbasierten Ansatz von express.js beizubehalten, __ nur für das Indexierungsproblem__.

Stellen Sie sich eine Website mit einer Seite /product/**.html vor, auf der JEDES Produkt abhängig von der vom Kunden erkannten tiefen URL gerendert wird. Der Grund für dieses Design ist, dass das Laden einer separaten Seite für ein Produkt, selbst unter Berücksichtigung des Browser- und CDN-Caching, aus UX-Sicht nicht so reibungslos ist wie das Laden und Rendern der Daten eines anderen Produkts beim Ändern der URL. Kunden verbringen den größten Teil ihrer Zeit auf Produktseiten, wenn sie auf einer E-Commerce-Website nach Browsign-to-Buy suchen, und navigieren häufig über Links zu "verwandten Produkten" oder In-Page-Ajax-Suchlinks zu anderen Produkten.

Wir sind mit dem absurden (IMHO) _escaped_fragment_-Mechanismus festgefahren, damit wir nicht für das Tarnen bestraft werden ... fällt es Google schwer, Ingenieure mit sauberen Lösungen für dieses allgegenwärtige Problem einzustellen?

Ich finde sogar das völlige Fehlen eines Indexierungsbereichs für Websites / Webapps in der Dokumentation __unjustably__.
Mobile Apps könnten den Verbrauchermarkt dominieren, aber wie steht es mit B2B? Die meisten Büroabteilungen arbeiten auf Desktop-Computern. Die Indizierung von Desktop-Websites, um F & E- oder Einkaufsabteilungen zu erreichen, ist kein "nice to have", sondern für B2B-Zulieferunternehmen von entscheidender Bedeutung.

Wenn Firebase / Google nicht daran interessiert sind, weil auffällige Apps, die auf glänzenden Gadgets ausgeführt werden, mehr Umsatz erzielen, wäre es schön, dies zu wissen. 4 Jahre ausweichende Antworten auf loyale Technologie-Anwender sind für jedermanns Intelligenz ziemlich beleidigend.

Ranty? Ja, aber ich bin derjenige, der zusätzliche Infrastrukturkosten, zusätzliche Entwicklungszeiten und unerwartetes Verhalten von Crawlern für meine Kunden rechtfertigen muss.

Vier Jahre, in denen diese Ausgabe offen ist, scheinen ein bisschen albern zu sein. @cleverplatypus - könnte nicht mehr mit Ihren

Über diesen Problembereich haben wir insgesamt nicht aufgehört nachzudenken, aber wir haben noch keine unmittelbaren Pläne für das Vorrendern von entkommenen Fragmenten.

Ich erkenne, dass es definitiv Zeiten gibt, in denen eine statische Single-Page-App vom Vorrendern profitieren kann. Ich bin jedoch immer noch der Meinung, dass in den meisten (aber nicht allen) Fällen dieser Art von Websites besser noch serverseitiges Rendering bereitgestellt wird, mit dem das SPA von einer beliebigen URL aus gebootet werden kann.

Unser Ziel ist es, Firebase Hosting zu einer fantastischen Plattform zu machen, die alle Arten von Web-Erlebnissen bietet. Obwohl ich das offene und leidenschaftliche Feedback in diesem Thread schätze, verfügen wir nur über begrenzte Ressourcen und müssen Arbeiten priorisieren, von denen wir glauben, dass sie den größten Einfluss auf unseren Kundenstamm insgesamt haben. Wenn Sie dazu beitragen möchten, unsere Meinung über die Priorisierung eines Features zu ändern, für das Sie sich stark fühlen, ist es am besten, eine Feature-Anfrage einzureichen. Diese sind zusammengefasst und helfen uns bei der Arbeit, die von unserer Entwickler-Community gefordert wird.

Ich werde diesen Thread schließen, da ich nicht glaube, dass wirklich noch etwas für die Konversation übrig ist, aber ich möchte jeden, der von unserer Cloud-Funktionsintegration nicht gut bedient wird, ermutigen, eine Funktionsanforderung zum Vorrendern einzureichen Wir können direkt sehen, wie groß die Nachfrage ist!

Vielen Dank, dass Sie Firebase Hosting verwenden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen