SEOTools adalah paket untuk Laravel 5.8+ dan Lumen yang menyediakan bantuan untuk beberapa teknik SEO umum.
Status Pembuatan Saat Ini
Statistik
Untuk informasi lisensi, periksa file LISENSI.
Langkah pertama adalah menggunakan composer untuk menginstal paket dan secara otomatis memperbarui file composer.json
Anda, Anda dapat melakukannya dengan menjalankan:
composer require artesaos/seotools
Catatan : Jika Anda menggunakan Laravel 5.5, langkah 2 dan 3, untuk penyedia dan alias, tidak diperlukan. SEOTools mendukung Penemuan Paket baru Laravel.
Anda perlu memperbarui konfigurasi aplikasi Anda untuk mendaftarkan paket sehingga dapat dimuat oleh Laravel, cukup perbarui file config/app.php
Anda dengan menambahkan kode berikut di akhir bagian 'providers'
Anda:
config/app.php
<?php
return [
// ...
' providers ' => [
Artesaos SEOTools Providers SEOToolsServiceProvider::class,
// ...
],
// ...
];
Buka file /bootstrap/app.php
dan tambahkan baris ini:
<?php
// ...
$ app = new Laravel Lumen Application (
dirname ( __DIR__ )
);
// ...
$ app -> register ( Artesaos SEOTools Providers SEOToolsServiceProvider::class);
// ...
return $ app ;
Catatan: fasad tidak didukung di Lumen.
Anda mungkin mendapatkan akses ke layanan alat SEO menggunakan fasad berikut:
ArtesaosSEOToolsFacadesSEOMeta
ArtesaosSEOToolsFacadesOpenGraph
ArtesaosSEOToolsFacadesTwitterCard
ArtesaosSEOToolsFacadesJsonLd
ArtesaosSEOToolsFacadesJsonLdMulti
ArtesaosSEOToolsFacadesSEOTools
Anda dapat menyiapkan alias versi pendek untuk fasad ini di file config/app.php
Anda. Misalnya:
<?php
return [
// ...
' aliases ' => [
' SEOMeta ' => Artesaos SEOTools Facades SEOMeta::class,
' OpenGraph ' => Artesaos SEOTools Facades OpenGraph::class,
' Twitter ' => Artesaos SEOTools Facades TwitterCard::class,
' JsonLd ' => Artesaos SEOTools Facades JsonLd::class,
' JsonLdMulti ' => Artesaos SEOTools Facades JsonLdMulti::class,
// or
' SEO ' => Artesaos SEOTools Facades SEOTools::class,
// ...
],
// ...
];
Dalam tipe terminal Anda
php artisan vendor:publish
atau
php artisan vendor:publish --provider= " ArtesaosSEOToolsProvidersSEOToolsServiceProvider "
Lumen tidak mendukung perintah ini, untuk itu Anda harus menyalin file
src/resources/config/seotools.php
keconfig/seotools.php
proyek Anda
Dalam file konfigurasi seotools.php
Anda dapat menentukan properti dari nilai default dan beberapa perilaku.
defaults
- Nilai apa yang ditampilkan jika tidak ditentukan nilai apa pun untuk tampilan halaman. Jika nilainya false
, tidak ada yang ditampilkan.webmaster
- Apakah pengaturan nilai tag untuk alat webmaster utama. Jika Anda null
tidak ada yang ditampilkan.defaults
- Merupakan properti yang akan selalu ditampilkan dan ketika tidak ada nilai lain yang ditetapkan. Anda dapat menambahkan tag tambahan yang tidak disertakan dalam file konfigurasi asli.defaults
- Merupakan properti yang akan selalu ditampilkan dan ketika tidak ada nilai lain yang ditetapkan. Anda dapat menambahkan tag tambahan yang tidak disertakan dalam file konfigurasi asli.defaults
- Merupakan properti yang akan selalu ditampilkan dan ketika tidak ada nilai lain yang ditetapkan. Anda dapat menambahkan tag tambahan yang tidak disertakan dalam file konfigurasi asli. Catatan: fasad tidak didukung di Lumen.
<?php
$ seotools = app ( ' seotools ' );
$ metatags = app ( ' seotools.metatags ' );
$ twitter = app ( ' seotools.twitter ' );
$ opengraph = app ( ' seotools.opengraph ' );
$ jsonld = app ( ' seotools.json-ld ' );
$ jsonldMulti = app ( ' seotools.json-ld-multi ' );
// The behavior is the same as the facade
echo app ( ' seotools ' )-> generate ();
Dengan SEOMeta Anda dapat membuat meta tag ke head
Dengan OpenGraph Anda dapat membuat tag OpenGraph di head
Dengan Twitter Anda dapat membuat tag OpenGraph di head
<?php
namespace App Http Controllers ;
use Artesaos SEOTools Facades SEOMeta ;
use Artesaos SEOTools Facades OpenGraph ;
use Artesaos SEOTools Facades TwitterCard ;
use Artesaos SEOTools Facades JsonLd ;
// OR with multi
use Artesaos SEOTools Facades JsonLdMulti ;
// OR
use Artesaos SEOTools Facades SEOTools ;
class CommonController extends Controller
{
public function index ()
{
SEOMeta:: setTitle ( ' Home ' );
SEOMeta:: setDescription ( ' This is my page description ' );
SEOMeta:: setCanonical ( ' https://codecasts.com.br/lesson ' );
OpenGraph:: setDescription ( ' This is my page description ' );
OpenGraph:: setTitle ( ' Home ' );
OpenGraph:: setUrl ( ' http://current.url.com ' );
OpenGraph:: addProperty ( ' type ' , ' articles ' );
TwitterCard:: setTitle ( ' Homepage ' );
TwitterCard:: setSite ( ' @LuizVinicius73 ' );
JsonLd:: setTitle ( ' Homepage ' );
JsonLd:: setDescription ( ' This is my page description ' );
JsonLd:: addImage ( ' https://codecasts.com.br/img/logo.jpg ' );
// OR
SEOTools:: setTitle ( ' Home ' );
SEOTools:: setDescription ( ' This is my page description ' );
SEOTools:: opengraph ()-> setUrl ( ' http://current.url.com ' );
SEOTools:: setCanonical ( ' https://codecasts.com.br/lesson ' );
SEOTools:: opengraph ()-> addProperty ( ' type ' , ' articles ' );
SEOTools:: twitter ()-> setSite ( ' @LuizVinicius73 ' );
SEOTools:: jsonLd ()-> addImage ( ' https://codecasts.com.br/img/logo.jpg ' );
$ posts = Post:: all ();
return view ( ' myindex ' , compact ( ' posts ' ));
}
public function show ( $ id )
{
$ post = Post:: find ( $ id );
SEOMeta:: setTitle ( $ post -> title );
SEOMeta:: setDescription ( $ post -> resume );
SEOMeta:: addMeta ( ' article:published_time ' , $ post -> published_date -> toW3CString (), ' property ' );
SEOMeta:: addMeta ( ' article:section ' , $ post -> category , ' property ' );
SEOMeta:: addKeyword ([ ' key1 ' , ' key2 ' , ' key3 ' ]);
OpenGraph:: setDescription ( $ post -> resume );
OpenGraph:: setTitle ( $ post -> title );
OpenGraph:: setUrl ( ' http://current.url.com ' );
OpenGraph:: addProperty ( ' type ' , ' article ' );
OpenGraph:: addProperty ( ' locale ' , ' pt-br ' );
OpenGraph:: addProperty ( ' locale:alternate ' , [ ' pt-pt ' , ' en-us ' ]);
OpenGraph:: addImage ( $ post -> cover -> url );
OpenGraph:: addImage ( $ post -> images -> list ( ' url ' ));
OpenGraph:: addImage ([ ' url ' => ' http://image.url.com/cover.jpg ' , ' size ' => 300 ]);
OpenGraph:: addImage ( ' http://image.url.com/cover.jpg ' , [ ' height ' => 300 , ' width ' => 300 ]);
JsonLd:: setTitle ( $ post -> title );
JsonLd:: setDescription ( $ post -> resume );
JsonLd:: setType ( ' Article ' );
JsonLd:: addImage ( $ post -> images -> list ( ' url ' ));
// OR with multi
JsonLdMulti:: setTitle ( $ post -> title );
JsonLdMulti:: setDescription ( $ post -> resume );
JsonLdMulti:: setType ( ' Article ' );
JsonLdMulti:: addImage ( $ post -> images -> list ( ' url ' ));
if (! JsonLdMulti:: isEmpty ()) {
JsonLdMulti:: newJsonLd ();
JsonLdMulti:: setType ( ' WebPage ' );
JsonLdMulti:: setTitle ( ' Page Article - ' . $ post -> title );
}
// Namespace URI: http://ogp.me/ns/article#
// article
OpenGraph:: setTitle ( ' Article ' )
-> setDescription ( ' Some Article ' )
-> setType ( ' article ' )
-> setArticle ([
' published_time ' => ' datetime ' ,
' modified_time ' => ' datetime ' ,
' expiration_time ' => ' datetime ' ,
' author ' => ' profile / array ' ,
' section ' => ' string ' ,
' tag ' => ' string / array '
]);
// Namespace URI: http://ogp.me/ns/book#
// book
OpenGraph:: setTitle ( ' Book ' )
-> setDescription ( ' Some Book ' )
-> setType ( ' book ' )
-> setBook ([
' author ' => ' profile / array ' ,
' isbn ' => ' string ' ,
' release_date ' => ' datetime ' ,
' tag ' => ' string / array '
]);
// Namespace URI: http://ogp.me/ns/profile#
// profile
OpenGraph:: setTitle ( ' Profile ' )
-> setDescription ( ' Some Person ' )
-> setType ( ' profile ' )
-> setProfile ([
' first_name ' => ' string ' ,
' last_name ' => ' string ' ,
' username ' => ' string ' ,
' gender ' => ' enum(male, female) '
]);
// Namespace URI: http://ogp.me/ns/music#
// music.song
OpenGraph:: setType ( ' music.song ' )
-> setMusicSong ([
' duration ' => ' integer ' ,
' album ' => ' array ' ,
' album:disc ' => ' integer ' ,
' album:track ' => ' integer ' ,
' musician ' => ' array '
]);
// music.album
OpenGraph:: setType ( ' music.album ' )
-> setMusicAlbum ([
' song ' => ' music.song ' ,
' song:disc ' => ' integer ' ,
' song:track ' => ' integer ' ,
' musician ' => ' profile ' ,
' release_date ' => ' datetime '
]);
//music.playlist
OpenGraph:: setType ( ' music.playlist ' )
-> setMusicPlaylist ([
' song ' => ' music.song ' ,
' song:disc ' => ' integer ' ,
' song:track ' => ' integer ' ,
' creator ' => ' profile '
]);
// music.radio_station
OpenGraph:: setType ( ' music.radio_station ' )
-> setMusicRadioStation ([
' creator ' => ' profile '
]);
// Namespace URI: http://ogp.me/ns/video#
// video.movie
OpenGraph:: setType ( ' video.movie ' )
-> setVideoMovie ([
' actor ' => ' profile / array ' ,
' actor:role ' => ' string ' ,
' director ' => ' profile /array ' ,
' writer ' => ' profile / array ' ,
' duration ' => ' integer ' ,
' release_date ' => ' datetime ' ,
' tag ' => ' string / array '
]);
// video.episode
OpenGraph:: setType ( ' video.episode ' )
-> setVideoEpisode ([
' actor ' => ' profile / array ' ,
' actor:role ' => ' string ' ,
' director ' => ' profile /array ' ,
' writer ' => ' profile / array ' ,
' duration ' => ' integer ' ,
' release_date ' => ' datetime ' ,
' tag ' => ' string / array ' ,
' series ' => ' video.tv_show '
]);
// video.tv_show
OpenGraph:: setType ( ' video.tv_show ' )
-> setVideoTVShow ([
' actor ' => ' profile / array ' ,
' actor:role ' => ' string ' ,
' director ' => ' profile /array ' ,
' writer ' => ' profile / array ' ,
' duration ' => ' integer ' ,
' release_date ' => ' datetime ' ,
' tag ' => ' string / array '
]);
// video.other
OpenGraph:: setType ( ' video.other ' )
-> setVideoOther ([
' actor ' => ' profile / array ' ,
' actor:role ' => ' string ' ,
' director ' => ' profile /array ' ,
' writer ' => ' profile / array ' ,
' duration ' => ' integer ' ,
' release_date ' => ' datetime ' ,
' tag ' => ' string / array '
]);
// og:video
OpenGraph:: addVideo ( ' http://example.com/movie.swf ' , [
' secure_url ' => ' https://example.com/movie.swf ' ,
' type ' => ' application/x-shockwave-flash ' ,
' width ' => 400 ,
' height ' => 300
]);
// og:audio
OpenGraph:: addAudio ( ' http://example.com/sound.mp3 ' , [
' secure_url ' => ' https://secure.example.com/sound.mp3 ' ,
' type ' => ' audio/mpeg '
]);
// og:place
OpenGraph:: setTitle ( ' Place ' )
-> setDescription ( ' Some Place ' )
-> setType ( ' place ' )
-> setPlace ([
' location:latitude ' => ' float ' ,
' location:longitude ' => ' float ' ,
]);
return view ( ' myshow ' , compact ( ' post ' ));
}
}
<?php
namespace App Http Controllers ;
use Artesaos SEOTools Traits SEOTools as SEOToolsTrait ;
class CommonController extends Controller
{
use SEOToolsTrait;
public function index ()
{
$ this -> seo ()-> setTitle ( ' Home ' );
$ this -> seo ()-> setDescription ( ' This is my page description ' );
$ this -> seo ()-> opengraph ()-> setUrl ( ' http://current.url.com ' );
$ this -> seo ()-> opengraph ()-> addProperty ( ' type ' , ' articles ' );
$ this -> seo ()-> twitter ()-> setSite ( ' @LuizVinicius73 ' );
$ this -> seo ()-> jsonLd ()-> setType ( ' Article ' );
$ posts = Post:: all ();
return view ( ' myindex ' , compact ( ' posts ' ));
}
}
Tip Pro : Berikan parameter
true
untuk mendapatkan kode yang diperkecil dan mengurangi ukuran file.
< html >
< head >
{!! SEOMeta::generate() !!}
{!! OpenGraph::generate() !!}
{!! Twitter::generate() !!}
{!! JsonLd::generate() !!}
// OR with multi
{!! JsonLdMulti::generate() !!}
<!-- OR -->
{!! SEO::generate() !!}
<!-- MINIFIED -->
{!! SEO::generate(true) !!}
<!-- LUMEN -->
{!! app('seotools')- > generate() !!}
</ head >
< body >
</ body >
</ html >
< html >
< head >
< title > Title - Over 9000 Thousand! </ title >
< meta name =' description ' itemprop =' description ' content =' description... ' >
< meta name =' keywords ' content =' key1, key2, key3 ' >
< meta property =' article:published_time ' content =' 2015-01-31T20:30:11-02:00 ' >
< meta property =' article:section ' content =' news ' >
< meta property =" og:description " content =" description... " >
< meta property =" og:title " content =" Title " >
< meta property =" og:url " content =" http://current.url.com " >
< meta property =" og:type " content =" article " >
< meta property =" og:locale " content =" pt-br " >
< meta property =" og:locale:alternate " content =" pt-pt " >
< meta property =" og:locale:alternate " content =" en-us " >
< meta property =" og:site_name " content =" name " >
< meta property =" og:image " content =" http://image.url.com/cover.jpg " >
< meta property =" og:image " content =" http://image.url.com/img1.jpg " >
< meta property =" og:image " content =" http://image.url.com/img2.jpg " >
< meta property =" og:image " content =" http://image.url.com/img3.jpg " >
< meta property =" og:image:url " content =" http://image.url.com/cover.jpg " >
< meta property =" og:image:size " content =" 300 " >
< meta name =" twitter:card " content =" summary " >
< meta name =" twitter:title " content =" Title " >
< meta name =" twitter:site " content =" @LuizVinicius73 " >
< script type =" application/ld+json " > { "@context" : "https://schema.org" , "@type" : "Article" , "name" : "Title - Over 9000 Thousand!" } </ script >
<!-- OR with multi -->
< script type =" application/ld+json " > { "@context" : "https://schema.org" , "@type" : "Article" , "name" : "Title - Over 9000 Thousand!" } </ script >
< script type =" application/ld+json " > { "@context" : "https://schema.org" , "@type" : "WebPage" , "name" : "Title - Over 9000 Thousand!" } </ script >
</ head >
< body >
</ body >
</ html >
Menggunakan kode yang sama di banyak tempat bisa jadi membosankan, itulah sebabnya paket ini menyertakan sifat Macroable. Sifat ini memungkinkan fungsionalitas tambahan ditambahkan ke kelas yang tidak ditentukan dalam definisi kelas, menggunakan sifat sederhana.
Misalnya, bayangkan Anda perlu menambahkan judul meta dan deskripsi untuk halaman Anda. Anda dapat menambahkan fungsi Macroable di AppServiceProvider atau membuat file khusus untuk tujuan ini, dan menentukan fungsi Anda seperti yang ditunjukkan dalam cuplikan kode:
SEOTools:: macro ( ' webPage ' , function ( string $ title , string $ description ) {
SEOMeta:: setTitle ( $ title );
SEOMeta:: setDescription ( $ description );
SEOMeta:: setCanonical ( ' http://current.url.com ' );
OpenGraph:: setDescription ( $ description );
OpenGraph:: setTitle ( $ title );
OpenGraph:: setUrl ( ' http://current.url.com ' );
OpenGraph:: addProperty ( ' type ' , ' webpage ' );
});
Di pengontrol Anda, Anda dapat menggunakan kode berikut untuk memanfaatkan fungsi ini:
SEOTools:: webPage ( ' Page title ' , ' Page description ' );
<?php
use Artesaos SEOTools Facades SEOMeta ;
SEOMeta:: addKeyword ( $ keyword );
SEOMeta:: addMeta ( $ meta , $ value = null , $ name = ' name ' );
SEOMeta:: addAlternateLanguage ( $ lang , $ url );
SEOMeta:: addAlternateLanguages (array $ languages );
SEOMeta:: setAlternateLanguage ( $ lang , $ url );
SEOMeta:: setAlternateLanguages (array $ languages );
SEOMeta:: setTitleSeparator ( $ separator );
SEOMeta:: setTitle ( $ title );
SEOMeta:: setTitleDefault ( $ default );
SEOMeta:: setDescription ( $ description );
SEOMeta:: setKeywords ( $ keywords );
SEOMeta:: setRobots ( $ robots );
SEOMeta:: setCanonical ( $ url );
SEOMeta:: setPrev ( $ url );
SEOMeta:: setNext ( $ url );
SEOMeta:: removeMeta ( $ key );
// You can chain methods
SEOMeta:: setTitle ( $ title )
-> setDescription ( $ description )
-> setKeywords ( $ keywords )
-> addKeyword ( $ keyword )
-> addMeta ( $ meta , $ value );
// Retrieving data
SEOMeta:: getTitle ();
SEOMeta:: getTitleSession ();
SEOMeta:: getTitleSeparator ();
SEOMeta:: getKeywords ();
SEOMeta:: getDescription ();
SEOMeta:: getCanonical ( $ url );
SEOMeta:: getPrev ( $ url );
SEOMeta:: getNext ( $ url );
SEOMeta:: getRobots ();
SEOMeta:: reset ();
SEOMeta:: generate ();
<?php
use Artesaos SEOTools Facades OpenGraph ;
OpenGraph:: addProperty ( $ key , $ value ); // value can be string or array
OpenGraph:: addImage ( $ url ); // add image url
OpenGraph:: addImages ( $ url ); // add an array of url images
OpenGraph:: setTitle ( $ title ); // define title
OpenGraph:: setDescription ( $ description ); // define description
OpenGraph:: setUrl ( $ url ); // define url
OpenGraph:: setSiteName ( $ name ); //define site_name
// You can chain methods
OpenGraph:: addProperty ( $ key , $ value )
-> addImage ( $ url )
-> addImages ( $ url )
-> setTitle ( $ title )
-> setDescription ( $ description )
-> setUrl ( $ url )
-> setSiteName ( $ name );
// Generate html tags
OpenGraph:: generate ();
<?php
use Artesaos SEOTools Facades TwitterCard ;
TwitterCard:: addValue ( $ key , $ value ); // value can be string or array
TwitterCard:: setType ( $ type ); // type of twitter card tag
TwitterCard:: setTitle ( $ type ); // title of twitter card tag
TwitterCard:: setSite ( $ type ); // site of twitter card tag
TwitterCard:: setDescription ( $ type ); // description of twitter card tag
TwitterCard:: setUrl ( $ type ); // url of twitter card tag
TwitterCard:: setImage ( $ url ); // add image url
// You can chain methods
TwitterCard:: addValue ( $ key , $ value )
-> setType ( $ type )
-> setImage ( $ url )
-> setTitle ( $ title )
-> setDescription ( $ description )
-> setUrl ( $ url )
-> setSite ( $ name );
// Generate html tags
TwitterCard:: generate ();
<?php
use Artesaos SEOTools Facades JsonLd ;
JsonLd:: addValue ( $ key , $ value ); // value can be string or array
JsonLd:: setType ( $ type ); // type of twitter card tag
JsonLd:: setTitle ( $ type ); // title of twitter card tag
JsonLd:: setSite ( $ type ); // site of twitter card tag
JsonLd:: setDescription ( $ type ); // description of twitter card tag
JsonLd:: setUrl ( $ type ); // url of twitter card tag
JsonLd:: setImage ( $ url ); // add image url
// You can chain methods
JsonLd:: addValue ( $ key , $ value )
-> setType ( $ type )
-> setImage ( $ url )
-> setTitle ( $ title )
-> setDescription ( $ description )
-> setUrl ( $ url )
-> setSite ( $ name );
// Generate html tags
JsonLd:: generate ();
<?php
use Artesaos SEOTools Facades JsonLdMulti ;
JsonLdMulti:: newJsonLd (); // create a new JsonLd group
JsonLdMulti:: isEmpty (); // check if the current JsonLd group is empty
JsonLdMulti:: select ( $ index ); // choose the JsonLd group that will be edited by the methods below
JsonLdMulti:: addValue ( $ key , $ value ); // value can be string or array
JsonLdMulti:: setType ( $ type ); // type of twitter card tag
JsonLdMulti:: setTitle ( $ type ); // title of twitter card tag
JsonLdMulti:: setSite ( $ type ); // site of twitter card tag
JsonLdMulti:: setDescription ( $ type ); // description of twitter card tag
JsonLdMulti:: setUrl ( $ type ); // url of twitter card tag
JsonLdMulti:: setImage ( $ url ); // add image url
// You can chain methods
JsonLdMulti:: addValue ( $ key , $ value )
-> setType ( $ type )
-> setImage ( $ url )
-> setTitle ( $ title )
-> setDescription ( $ description )
-> setUrl ( $ url )
-> setSite ( $ name );
// You can add an other group
if (! JsonLdMulti:: isEmpty ()) {
JsonLdMulti:: newJsonLd ()
-> setType ( $ type )
-> setImage ( $ url )
-> setTitle ( $ title )
-> setDescription ( $ description )
-> setUrl ( $ url )
-> setSite ( $ name );
}
// Generate html tags
JsonLdMulti:: generate ();
// You will have retrieve <script content="application/ld+json"/>
Memfasilitasi akses ke semua Penyedia SEO
<?php
use Artesaos SEOTools Facades SEOTools ;
SEOTools:: metatags ();
SEOTools:: twitter ();
SEOTools:: opengraph ();
SEOTools:: jsonLd ();
SEOTools:: setTitle ( $ title );
SEOTools:: getTitle ( $ session = false );
SEOTools:: setDescription ( $ description );
SEOTools:: setCanonical ( $ url );
SEOTools:: addImages ( $ urls );
Ada banyak fitur terkait SEO yang mungkin Anda perlukan untuk proyek Anda. Meskipun paket ini memberikan dukungan untuk paket dasar, paket lainnya berada di luar cakupannya. Anda harus menggunakan paket terpisah untuk integrasinya.
Paket ini tidak mendukung pembuatan file peta situs. Silakan pertimbangkan penggunaan salah satu paket berikut untuk itu:
laravelium/peta situs
spatie/laravel-peta situs
Paket ini tidak menangani konsistensi URL terlepas dari tidak adanya atau adanya simbol garis miring di bagian akhir. Silakan pertimbangkan penggunaan salah satu paket berikut jika Anda membutuhkannya:
iluminch/url-trailing-slash
fsasvari/laravel-trailing-slash
Paket ini menyediakan pembuatan markup HTML mikrodata. Jika Anda perlu membuat HTML seperti berikut:
< div itemscope >
< p > My name is
< span itemprop =" name " > Elizabeth </ span > . </ p >
</ div >
Anda harus menanganinya sendiri.
Catatan: saat ini markup mikrodata dianggap sudah ketinggalan zaman. Disarankan untuk menggunakan Data Tertaut JSON, yang didukung oleh ekstensi ini.
Paket ini tidak mendukung pembuatan RSS feed atau komposisi meta data terkait. Silakan pertimbangkan penggunaan salah satu paket berikut untuk itu: