🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SEO

SEO(Search Engine Optimization)は、検索エンジンでウェブページがランキング上位に上がるように工夫する様々なテクニックの事です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

3240閲覧

wordpressのmetaタグやtitleタグが、二重に出力されてしまう

huu

総合スコア5

SEO

SEO(Search Engine Optimization)は、検索エンジンでウェブページがランキング上位に上がるように工夫する様々なテクニックの事です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2021/03/13 04:58

前提・実現したいこと

wordpressでプラグインを使わずに、メタディスクリプションなどが出力されるように設定したんですが、二重に出力されてしまうので重複しないようにしたいです。

発生している問題・エラーメッセージ

デベロッパーツールで確認すると、下記のように重複してしまう。 <title>ハローワールド</title> <link rel="alternate" type="application/rss+xml" title="Hello world! のコメントのフィード" href="http://WordPress/hello-world/feed/" /> <link rel="canonical" href="http://WordPress/hello-world/" /> <meta name="description" content="ハローワールドの投稿です。"> <meta name="robots" content="noindex"> <!-- OGP設定 --> <meta property="og:title" content="Hello world!" /> <meta property="og:description" content="WordPress へようこそ。こちらは最初の投稿です。編集または削除し、コンテンツ作成を始めてください。" /> <meta property="og:type" content="article" /> <meta property="og:url" content="http://WordPress/hello-world/" /> <meta property="og:image" content="http://WordPress/wp-content/uploads/image.jpg" /> <meta property="og:site_name" content="WordPress" /> <meta property="og:locale" content="ja_JP" /> <meta name="twitter:card" content="summary_large_image" /> <!-- /OGP設定 --> <title>ハローワールド</title> <link rel="alternate" type="application/rss+xml" title="Hello world! のコメントのフィード" href="http://WordPress/hello-world/feed/" /> <link rel="canonical" href="http://WordPress/hello-world/" /> <meta name="description" content="ハローワールドの投稿です。"> <meta name="robots" content="noindex"> <!-- OGP設定 --> <meta property="og:title" content="Hello world!" /> <meta property="og:description" content="WordPress へようこそ。こちらは最初の投稿です。編集または削除し、コンテンツ作成を始めてください。" /> <meta property="og:type" content="article" /> <meta property="og:url" content="http://WordPress/hello-world/" /> <meta property="og:image" content="http://WordPress/wp-content/uploads/image.jpg" /> <meta property="og:site_name" content="WordPress" /> <meta property="og:locale" content="ja_JP" /> <meta name="twitter:card" content="summary_large_image" /> <!-- /OGP設定 -->

該当のソースコード

//SEOカスタムフィールドの設定 class Custom_Field_4536 { function __construct() { add_filter( 'document_title_parts', [ $this, 'title_update' ] ); if(!is_admin()) return; add_action( 'add_meta_boxes', [ $this, 'init' ] ); add_action( 'transition_post_status', [ $this, 'save' ], 10, 3 ); } function init() { $list = [ 'SEO対策' => 'seo_custom_fields', ]; $args = [ 'public' => true, '_builtin' => false, ]; $post_types = get_post_types( $args, 'names' ); foreach($list as $title => $id) { add_meta_box( $id, $title, $id, 'post', 'normal', 'high'); add_meta_box( $id, $title, $id, 'page', 'normal', 'high'); foreach ( $post_types as $post_type ) { add_meta_box( $id, $title, $id, $post_type, 'normal', 'high'); } } } function save($new_status, $old_status, $post) { if (($old_status == 'auto-draft' || $old_status == 'draft' || $old_status == 'pending' || $old_status == 'future') && $new_status == 'publish') { return $post; } else { add_action('save_post', function($post_id) { $list = [ 'description', 'noindex', 'nofollow', 'sns_title', 'seo_title', ]; foreach($list as $name) { if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; if(isset($_POST['action']) && $_POST['action'] == 'inline-save') return $post_id; if(!empty($_POST[$name])) update_post_meta($post_id, $name, $_POST[$name] ); else delete_post_meta($post_id, $name); } }); } } function title_update($title) { global $post; $seo_title = get_post_meta($post->ID,'seo_title',true); if(is_singular() && $seo_title) $title['title'] = $seo_title; return $title; } } new Custom_Field_4536(); // 設定項目の作成 function seo_custom_fields() { global $post; $list = [ 'seo_title' => 'SEO用タイトル(タイトルタグ書き換え)', 'sns_title' => 'SNS用タイトル', ]; foreach($list as $name => $description) { ?> <div class="input-wrapper-4536"> <div id="<?php echo $name; ?>-counter" class="counter"></div> <label for="<?php echo $name; ?>" class="label-4536"><?php echo $description; ?></label> <input name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_html(get_post_meta($post->ID, $name, true)); ?>" size="60" class="input-4536" type="text" /> <div style="clear:both;"></div> </div> <?php } ?> <div class="input-wrapper-4536"> <div id="description-counter" class="counter"></div> <label for="description" class="label-4536">ページの説明(推奨:120文字ほど)※何も入力しない場合、先頭の文字が自動で使われます。</label> <textarea name="description" id="description" cols="60" rows="6" class="input-4536"><?php echo esc_html(get_post_meta($post->ID, 'description', true)); ?></textarea> <div style="clear:both;"></div> </div> <?php $list = [ 'noindex' => 'NOINDEX(検索結果への表示をブロックします)', 'nofollow' => 'NOFOLLOW(リンクを除外します)ほとんどの場合、チェックを入れる必要はありません。', ]; foreach($list as $name => $description) { $check = (get_post_meta($post->ID, $name ,true) == 1) ? 'checked' : '/' ; ?> <div class="input-wrapper-4536"> <label for="<?php echo $name; ?>" class="label-4536"><?php echo $description; ?></label> <span class="checkbox-4536"> <input type="checkbox" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="1" <?php echo $check; ?> > </span> <div style="clear:both;"></div> </div> <?php } ?> <?php } // 設定の反映 add_action( 'wp_head', function() { global $post; $noindex = get_post_meta($post->ID,'noindex',true); $nofollow = get_post_meta($post->ID,'nofollow',true); $robots = ''; if($noindex && $nofollow) $robots = '<meta name="robots" content="noindex,nofollow">'; if($noindex && !$nofollow) $robots = '<meta name="robots" content="noindex">'; if(description_4536()) echo '<meta name="description" content="'.description_4536().'">'; if(is_singular()) { //記事ページ echo $robots; } }); //ディスクリプション設定 function description_4536() { if(is_home()) { $description = get_bloginfo('description'); } elseif(is_singular() || is_front_page()) { // 記事ページ //カスタムフィールドで設定したディスクリプション $custom_description = get_post_meta(get_the_ID(), 'description', true); $custom_description = strip_tags(str_replace(array("\r\n", "\r", "\n"), '', $custom_description)); $custom_description = mb_strimwidth($custom_description, 0, 240, "...", "utf-8"); $auto_description = get_post(get_the_ID())->post_content; $auto_description = strip_tags(str_replace(array("\r\n", "\r", "\n"), '', $auto_description)); $auto_description = mb_strimwidth($auto_description, 0, 240, "...", "utf-8"); //条件によって読み込むディスクリプションを変更 $post_description = ($custom_description) ? $custom_description : $auto_description; $description = $post_description; } if($description) return esc_html($description); } // OGPタグ/Twitterカード設定を出力 function my_meta_ogp() { if( is_front_page() || is_home() || is_singular() ){ /*初期設定*/ // Twitterのアカウント名 (@xxx) $twitter_site = ''; // Facebook APP ID $facebook_app_id = ''; /*初期設定 ここまで*/ global $post; $ogp_title = ''; $ogp_descr = ''; $ogp_url = ''; $ogp_img = ''; $insert = ''; if( is_singular() ) { //記事&固定ページ setup_postdata($post); $ogp_title = $post->post_title; $ogp_descr = mb_substr(get_the_excerpt(), 0, 100); $ogp_url = get_permalink(); wp_reset_postdata(); } elseif ( is_front_page() || is_home() ) { //トップページ $ogp_title = get_bloginfo('name'); $ogp_descr = get_bloginfo('description'); $ogp_url = home_url(); } //og:type $ogp_type = ( is_front_page() || is_home() ) ? 'website' : 'article'; //og:image if ( is_singular() && has_post_thumbnail() ) { $ps_thumb = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full'); $ogp_img = $ps_thumb[0]; } else { $ogp_img = 'http://WordPress/wp-content/themes/image.jpg'; //デフォルト画像 } //出力するOGPタグをまとめる $insert .= '<!-- OGP設定 -->'; $insert .= '<meta property="og:title" content="'.esc_attr($ogp_title).'" />' . "\n"; $insert .= '<meta property="og:description" content="'.esc_attr($ogp_descr).'" />' . "\n"; $insert .= '<meta property="og:type" content="'.$ogp_type.'" />' . "\n"; $insert .= '<meta property="og:url" content="'.esc_url($ogp_url).'" />' . "\n"; $insert .= '<meta property="og:image" content="'.esc_url($ogp_img).'" />' . "\n"; $insert .= '<meta property="og:site_name" content="'.esc_attr(get_bloginfo('name')).'" />' . "\n"; $insert .= '<meta property="og:locale" content="ja_JP" />' . "\n"; $insert .= '<meta name="twitter:card" content="summary_large_image" />'; if ($facebook_app_id != "") { $insert .= '<meta property="fb:app_id" content="' . $facebook_app_id . '">' . "\n"; } $insert .= '<!-- /OGP設定 -->'; echo $insert; } } //END my_meta_ogp add_action('wp_head','my_meta_ogp');//headにOGPを出力

試したこと

一つずつ削除しようと思い、
function.phpに
remove_action( 'wp_head', '_wp_render_title_tag', 1 );
を追記したが、タイトルが表示されなくなった。

その他解決方法を検索したが、プラグインを使用している場合の解決策ばかりでプラグインを使用しない場合の解決策が見つからなかった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

該当のソースコードを別のテーマに追加して試してみ。
それで問題なければ該当のソースコードは問題ないって事で、他に追加したコードが原因だったり<?php wp_head(); ?>が重複してる可能性は無いか?

投稿2021/03/13 08:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

huu

2021/03/13 14:08

別のテーマで試したら問題なかったので、header.phpを確認したら wp_head();が重複していました。 助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問