Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Single Page Web Apps
Code

Menambahkan Berbagi Sosial dalam Aplikasi Single-Page Node.js

by
Difficulty:IntermediateLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Puuma (you can also view the original English article)

Satu halaman aplikasi (Spa) yang didukung oleh render sisi klien template, yang memberikan pengguna akhir pengalaman yang sangat dinamis. Baru-baru ini, Google mengumumkan bahwa mereka merangkak web page dan menjalankan JavaScript sebagai user biasa bisa, menghasilkan situs yang didukung oleh kerangka SPA (sudut, Ember dan Vue, untuk beberapa nama) yang dijelajahi tanpa penalti Google.

Melampaui pencarian, crawler web lain penting untuk visibilitas situs Anda — yakni kaya robot berbagi sosial yang bergantung pada meta tag masih buta untuk JavaScript.

Dalam tutorial ini, kita akan membangun rute alternatif dan render modul untuk server Express dan Node.js yang dapat Anda gunakan dengan kebanyakan SPA kerangka yang akan memungkinkan situs Anda untuk memiliki kaya berbagi di Twitter, Facebook dan Pinterest.

Kata Peringatan

Tutorial ini berurusan secara eksklusif dengan robot web yang ekstrak sosial berbagi informasi. Jangan mencoba teknik ini dengan web crawler mesin pencari. Search engine perusahaan dapat mengambil perilaku semacam ini serius dan memperlakukan itu sebagai spam atau penipuan perilaku, dan dengan demikian peringkat Anda dapat dengan tangki cepat.

Demikian pula, dengan kaya berbagi sosial informasi, pastikan Anda mewakili konten dalam cara yang sejalan dengan apa yang pengguna lihat dengan apa robot baca. Gagal untuk menjaga kesejajaran ini dapat mengakibatkan pembatasan dari situs media sosial.

Rich Social Sharing 

Jika Anda posting update di Facebook dan memasukkan sebuah URL, Facebook robot akan membaca HTML dan mencari OpenGraph meta tag. Berikut adalah contoh dari Envato Tuts + homepage:

Envato Tuts+ Social Share Screenshot

Memeriksa halaman, di tag head, berikut adalah relevan tag yang menghasilkan Tinjauan ini:

Pinterest menggunakan protokol yang sama sebagai Facebook, OpenGraph, sehingga mereka berbagi bekerja sama.

Pada kegugupan, konsep ini disebut "kartu", dan kericau memiliki beberapa varietas yang berbeda tergantung pada bagaimana Anda ingin menampilkan konten Anda. Berikut adalah contoh kartu Twitter dari GitHub:

Screenshot of Twitter Card generated by a GitHub page

Dan di sini adalah HTML yang menghasilkan kartu ini:

Catatan: GitHub menggunakan teknik yang sama untuk apa yang digambarkan dalam tutorial ini. Halaman HTML sedikit berbeda dalam tag dengan atribut name set ke twitter:deskripsi. Aku harus mengubah agen pengguna seperti dijelaskan nanti dalam artikel untuk mendapatkan benar meta tag.

The Rub With Client-Side Rendering 

Menambahkan meta tag bukanlah sebuah masalah jika Anda ingin hanya satu judul, deskripsi, atau gambar untuk seluruh situs. Hanya hard-code nilai-nilai ke dalam head dokumen HTML Anda. Mungkin,walaupun, Anda membangun sebuah situs yang jauh lebih kompleks dan Anda ingin kaya Anda berbagi sosial bervariasi berdasarkan URL (yang mungkin pembungkus di sekeliling API sejarah HTML5 yang kerangka memanipulasi).

Usaha pertama mungkin untuk membangun template Anda dan menambahkan nilai ke meta tag seperti yang Anda lakukan dengan konten apapun lainnya. Karena, saat ini, bot yang mengekstrak informasi ini tidak mengeksekusi JavaScript, Anda akan berakhir dengan template tag Anda, ketika  Anda yang mencoba untuk berbagi.

Untuk membuat situs tersebut dapat dibaca oleh bot, kami membangun middleware yang mendeteksi agen pengguna bot berbagi sosial, dan kemudian router alternatif yang akan menyajikan konten yang benar ke bot, menghindari penggunaan kerangka SPA Anda. 

Middleware Agen Pengguna

Klien (robot, crawler web, browser) mengirimkan string User Agent (UA) dalam header HTTP setiap permintaan. Ini seharusnya mengidentifikasi perangkat lunak klien; sementara browser web memiliki variasi besar string UA, bot cenderung lebih atau kurang stabil. Facebook, berkicau dan Pinterest menerbitkan dawai agen pengguna bot sebagai rasa hormat.

Di Express, UA string terkandung dalam permintaan objek sebagai agen-pengguna. Saya menggunakan ekspresi reguler untuk mengidentifikasi bots berbeda saya tertarik dalam melayani konten pengganti. Kami akan memuat ini di middleware. Middlewares adalah seperti rute, tetapi mereka tidak perlu jalan atau metode dan mereka (umumnya) lulus permintaan pada middleware lain atau untuk rute. Di Express, rute dan middlewares yang berurutan, jadi tempat ini di atas rute lain di Express app.

Ekspresi reguler di atas terlihat untuk "facebookexternalhit", "Twitterbot" atau "Pinterest" pada awal UA string. Jika ada, itu akan log UA ke konsol.

Berikut adalah seluruh server:

Pengujian Middleware Anda

Di Chrome, navigasikan ke server baru (yang harus http://localhost:8000 /). Buka DevTools dan nyalakan 'Mode perangkat' dengan mengklik ikon smartphone di atas kiri bagian dari panel pengembang.

Screenshot of Chrome DevTools showing the location of Device Mode

Di toolbar perangkat, menempatkan "Twitterbot/1.0" ke dalam kotak edit UA.

Screenshot of Chrome DevTools illustrating the location of the input box for user agents

Sekarang, reload halaman.

Pada titik ini, Anda akan melihat "Melayani SPA" di halaman, tetapi melihat output konsol app Express Anda, Anda akan melihat:

Twitterbot 1.0 adalah sebuah bot

Alternatif Routing

Sekarang kita dapat mengidentifikasi bot, mari kita membangun router alternatif. Express dapat menggunakan beberapa router, sering digunakan untuk partisi rute keluar oleh jalan. Dalam kasus ini, kita akan menggunakan router dalam cara yang sedikit berbeda. Router adalah pada dasarnya middlewares, sehingga mereka kecuali req, res, dan selanjutnya, seperti setiap middleware lainnya. Idenya di sini adalah untuk menghasilkan set yang berbeda dari rute yang memiliki jalur yang sama.

Middleware kami perlu berubah juga. Bukan hanya penebangan klien yang bot, kami akan sekarang mengirim permintaan ke router baru dan, penting, hanya lulus dengan next() jika gagal tes UA. Jadi, dalam singkat, bot mendapatkan satu router dan orang lain mendapatkan router standar yang berfungsi kode SPA.

Jika kita menguji menggunakan rutin yang sama seperti di atas, pengaturan UA Twitterbot/1.0 browser akan menunjukkan pada isi ulang:

Melayani HTML biasa dengan metatags

Sementara dengan UA Chrome standar Anda akan mendapatkan:

Melayani SPA

Meta Tag

Seperti yang kita telah diteliti di atas, berbagi sosial yang kaya bergantung pada meta tag di dalam kepala dokumen HTML Anda. Karena Anda sedang membangun sebuah SPA, Anda mungkin bahkan tidak punya mesin template yang diinstal. Untuk tutorial ini, kita akan menggunakan jade. Jade dalah cukup bahasa sederhana yang menggoda mana ruang dan tab yang relevan dan tag penutup tidak diperlukan. Kita dapat menginstalnya dengan menjalankan:

NPM menginstal jade

Dalam kode sumber server kami, tambahkan baris ini sebelum Anda app.listen.

App.set ('Lihat mesin', 'jade');

Sekarang, kita akan memasukkan informasi yang kita ingin melayani untuk bot hanya. Kami akan mengubah nonSPArouter. Karena kita telah membuat mesin lihat di app set, res.render akan melakukan render jade.

Mari kita mengatur template jade kecil untuk melayani bots berbagi sosial:

Sebagian besar template ini adalah meta tag, tetapi Anda juga dapat melihat bahwa saya memasukkan formasi dalam tubuh dokumen. Sebagai penulisan tutorial ini, tak satu pun dari bot berbagi sosial tampaknya benar-benar melihat apapun melampaui meta tag, tapi itu adalah praktik yang baik untuk menyertakan informasi dalam cara yang agak manusia dapat dibaca, harus jenis manusia memeriksa dilaksanakan di d kemudian makan.

Simpan template untuk app Anda lihat direktori dan nama itu bot.jade. Nama file tanpa ekstensi ('bot') akan menjadi argumen pertama fungsi res.render.

Sementara itu selalu ide yang baik untuk mengembangkan secara lokal, Anda akan perlu untuk mengekspos app Anda akhir lokasi untuk sepenuhnya men-debug Anda meta tag. Versi deployable server kecil kami terlihat seperti ini:

Juga mencatat bahwa saya menggunakan express.static middleware untuk melayani gambar dari /static direktori.

Debug Aplikasi Anda

Setelah Anda telah digunakan aplikasi Anda ke suatu tempat yang dapat diakses publik, Anda harus memverifikasi bahwa Anda meta tag bekerja seperti yang diinginkan.

Pertama, Anda dapat menguji dengan Facebook Debugger. Masukan URL Anda dan klik informasi mengikis Fetch baru.

Anda harus melihat sesuatu seperti:

Screenshot of the Facebook open graph debugger

Selanjutnya, Anda dapat melanjutkan untuk menguji kartu Twitter Anda dengan Validator Kartu Twitter. Untuk yang satu ini, Anda perlu untuk login dengan Twitter account.

Screenshot of the Twitter Card Validator

Pinterest menyediakan debugger , tetapi contoh ini tidak akan berfungsi di luar kotak karena Pinterest hanya mengizinkan "pin kaya" di URL selain situs Anda. 

Langkah Selanjutnya 

Dalam implementasi aktual Anda, Anda harus menangani integrasi sumber data dan perutean Anda.  Sebaiknya lihat rute yang ada dalam kode SPA Anda dan buat versi alternatif untuk semua yang Anda pikir dapat dibagikan. Setelah Anda menetapkan rute yang kemungkinan akan dibagikan, siapkan meta tag di template utama Anda yang berfungsi sebagai fallback Anda dalam situasi ketika seseorang membagikan halaman yang tidak Anda harapkan.

Meskipun Pinterest, Facebook, dan Twitter menyumbangkan sebagian besar pasar media sosial, Anda mungkin memiliki layanan lain yang ingin Anda integrasikan.  Beberapa layanan mempublikasikan nama robot berbagi sosial mereka, sementara yang lain tidak.  Untuk menentukan agen pengguna, Anda dapat console.log dan memeriksa keluaran konsol — coba ini terlebih dahulu di server non-produksi karena Anda mungkin mengalami kesulitan saat mencoba menentukan agen pengguna di situs yang sibuk.  Dari titik itu, Anda dapat menyesuaikan nama reguler di middleware kami untuk juga menangkap agen pengguna baru.

Berbagi media sosial yang kaya dapat menjadi cara yang bagus untuk menarik orang-orang ke dalam situs web Anda yang berbasiskan satu halaman aplikasi.  Dengan mengarahkan robot secara selektif ke konten yang dapat dibaca mesin, Anda dapat memberikan informasi yang tepat kepada robot. 

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.