ページのタイトル、メタの説明、メタキーワードを設定して、[読み込み時]セクションにカスタムコードアクションを追加することで ChronoForms v4ページのSEOを改善しようとしています。
<?php
if ($form->data['LongTitle']) {
$document = JFactory::getDocument();
$document->setTitle($form->data['LongTitle']);
}
if ($form->data['MetaDescription']) {
$document = JFactory::getDocument();
$document->setDescription($form->data['MetaDescription']);
}
if ($form->data['MetaKeywords']) {
$document = JFactory::getDocument();
$document->setMetaData('keywords', $form->data['MetaKeywords']);
}
?>
setDescription
およびsetMetaData
は正常に機能しますが、setTitle
は機能しません。
https://stackoverflow.com/a/31458607/1983389 のように、特にChronoFormsコンテンツプラグイン(この例のように)。
On Loadセクションにメタタガー(シック)アクションを追加しようとしました
メタタガーオプションには、メタ説明とメタキーワードがOKに設定されているがページタイトルが設定されていない場合と同じ問題があります。
コンテンツプラグインの順序を変更しようとしました
私は最後にChronoFormsコンテンツプラグインを移動しようとしましたが、これは役に立ちませんでした。
Regular Labs Sourcerer を使用してコードを記事に追加しようとしました
記事にコードを直接追加しようとしましたが、これはうまくいきませんでした:
{chronoforms}Tour{/chronoforms}
{source}
<?php
$tour = JRequest::getVar('Tour');
$db = JFactory::getDBO();
$db->setQuery("SELECT cf_id,LongTitle FROM #__chronoforms_data_Tours WHERE cf_id='$tour'");
$result = $db->loadObject();
$tourname = $result->LongTitle;
if ($tourname) {
$document = JFactory::getDocument();
$document->setTitle($tourname);
}
?>
{/source}
JavaScriptで救出
ページタイトルはJavaScriptを介して設定できます https://stackoverflow.com/a/24881134
ChronoFormsで、次のコードを使用して、「Load JS」アクションを「On Load」セクションに追加します。
window.onload=function() {
changeTitle ('<?php echo $form->data['LongTitle']; ?>')
}
function changeTitle (newTitle) {
document.title=newTitle;
}
これは機能し、 どうやら GoogleはJavaScriptによって挿入されたコンテンツをクロールします。
他の検索エンジンはJavaScriptが挿入されたコンテンツを表示しない可能性があるため、これはおそらくベストプラクティスではなく、この方法は、ページタイトルを更新するためのより良い方法がない場合にのみ推奨されます。
私はこの貧弱な回避策よりもいくつかの良い答えを見つけてうれしいです。
以下を変更できます。
joomla\components\com_chronoforms6\chronoforms6.php
行の前に追加
$output = new JoomlaGCLoader2('front', 'chronoforms6', 'chronoforms', $chronoforms6_setup);
$doc = JFactory::getDocument();
$app = JFactory::getApplication();
$menu = $app->getMenu()->getActive()->id;
if ( $app->getMenu()->getActive()->params->get('menu-meta_description') != ''){
$doc->setDescription($app->getMenu()->getActive()->params->get('menu-meta_description'));
}
if ( $app->getMenu()->getActive()->params->get('menu-meta_keywords') != ''){
$doc->setMetadata('keywords', $app->getMenu()->getActive()->params->get('menu-meta_keywords'));
}
よろしく。