Laravelで「laravelium/sitemap」を追加して、XMLサイトマップを作成しました。
作成方法は「$sitemap->store」メソッドを使った静的ファイルの生成です。
その際に、ページ数が多いため、サイトマップインデックスを作成した所、「Google Search Console」に登録したらエラーになりました。
原因は、サイトマップインデックスの子サイトマップ「<loc>タグ」がフルパスでなく、相対パスだったからです。
「Google Search Console」ではフルパスにする必要があります。
結果として修正するため 「laravelium/sitemap」 本体に手を入れました。
※私は見つけられませんでしたが、もしかしたら、修正しなくても解決できる方法があるかもしれません
追記:パス用の変数とセットメソッドを用意
private $xml_save_path = null;
public function setXml_save_path($xml_save_path){
$this->xml_save_path = $xml_save_path;
}
修正1:storeメソッドの修正
// 追記1
public function store($format = 'xml', $filename = 'sitemap', $path = null, $style = null)
{
// turn off caching for this method
$this->model->setUseCache(false);
// use correct file extension
(in_array($format, ['txt', 'html'], true)) ? $fe = $format : $fe = 'xml';
if (true == $this->model->getUseGzip()) {
$fe = $fe.".gz";
}
// use custom size limit for sitemaps
if ($this->model->getMaxSize() > 0 && count($this->model->getItems()) > $this->model->getMaxSize()) {
if ($this->model->getUseLimitSize()) {
// limit size
$this->model->limitSize($this->model->getMaxSize());
$data = $this->generate($format, $style);
} else {
// use sitemapindex and generate partial sitemaps
foreach (array_chunk($this->model->getItems(), $this->model->getMaxSize()) as $key => $item) {
// reset current items
$this->model->resetItems($item);
// generate new partial sitemap
$this->store($format, $filename.'-'.$key, $path, $style);
// add sitemap to sitemapindex
if ($path != null) {
// if using custom path generate relative urls for sitemaps in the sitemapindex
//$this->addSitemap($filename.'-'.$key.'.'.$fe);
$this->addSitemap(url($this->xml_save_path.$filename.'-'.$key.'.'.$fe));
} else {
コントローラー
$sitemap = App::make('sitemap');
$sitemap->model->setMaxSize(1000); // 1xmlあたりのURL数
foreach($this->sitemap_url as $val){
$sitemap->add(URL::to($val), null, '1.0', 'daily');
}
// サイトマップXMLの保存先pathを指定
$xml_save_path = '/storage/sitemap/';
$sitemap->setXml_save_path($xml_save_path);
// サイトマップXML生成
$sitemap->store('xml', 'sitemap', public_path().$xml_save_path);