WordPressのトラックバックができない二つの理由

WordPressから他のサイトにトラックバックをしようとしたのに反映されていない、前からは気になっていたのですが、その対策を調べて考え、実行し解決しました。

主な理由は二つです。

  1. 相手のサイトのサーバに対するTimout時間が短いためにうまく伝わらない。
  2. プラグインにスパム扱いを防ぐためのwordpress ping optimezerが入っている。

二つについて同時に述べているサイトもなかったので記事にしました。また、使われている用語も混乱するものなので整理しました。お役に立てれば幸いです。

 

スポンサーリンク
//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (adsbygoogle = window.adsbygoogle || []).push({});

 

前提

私がトラックバックをできなかったのは以下の二つのサービスです。

  1. ブログ村への記事の通知機能
  2. 食べログへのグルメ記事の通知機能

1はできたりできなかったりしていて不思議だと思ってました。できないので何度か更新しましたが、それでもできませんでした。

2は、一つ目の記事からできなかったので、徹底調査をすることとしました。食べログ側にも確認しましたが、Wordpressやプラグインに熟知しているわけではないのて、私と同じ解決策は提示は無理でした...(別の方法を提案されましたが、未実施です)

この両方については成功すると思いますが、その他のサイトについては検証していませんので申し訳ありませんが、成功するか否かはわかりません。

なお、参考までにトラックバックが出来ていたら以下の画面が出てきます。この画面でできているかいないかを判断します。赤の箇所で「送信済み」となり、トラックバックされているURLが表示されます。

 

 

出来てない場合は、以下の画面となります。赤の箇所に送信済みと表示されません。これがないということはトラックバックが成功してないので、記事を公開する時に必ず確認しておいた方が良いです。

 

 

 

用語の確認

この問題を解決するのにトラックバックやpingという言葉が出てくるのですが、解説はいろいろと出ていますが、それが扱っている内容と異なっているので混乱しました。

整理した内容を以下に示します。

トラックバック

主流の定義: ブログの機能の一つで、別のウェブログへリンクを張った際に、リンク先の相手に対してリンクを張ったことを通知する仕組みのこと。

これでは実は理解できません....

今回の定義: 相手のサイト(ブログ村、食べログ)に自分のブログの記事を張ってもらう(紹介してもらう)こと。

二つの使われ方がすることをご理解ください。(統一してくれればいいんですが)

 

ping

WordPress Ping Optimizerが関係しているので、「えっ、トラックバックなのになぜPingのプラグインが?」と疑問だと思います。 また、そのpingもいろいろと使われ方があるので、ここで整理します。

  1. ping
    コンピュータ同士が通信できているか確認するプログラム名。これが一番有名ですが、今回の件には関係ありません。
  2. wordpressで設定するping送信先
    これは投稿設定で良く設定するものです。ここに登録したサイトに「ブログができましたよ」と通知するサービスです。これはpingソフトを使っているわけではないので、別の名称(プログ通知送信など)を使った方が良いのですが、恐らく米国でそう呼ばれたのでしょう。米国で呼ばれる名称は、実態と違うものがそのまま利用されるということが結構あるので、そういうものだと思ってください。
  3. トラックバックping
    トラックバックのメカニズムはトラックバックpingとも呼ばれています。よって、トラックバックはWordpress Ping Optimizerで扱っている範囲となるのです。

 

 

回復方法

問題は

問題のひとつは、相手のサーバにアクセスした場合に、通信に時間がかかった時にそれ以上の通信をしない「Timeout」という時間が設定されていますが、それが短いために、通信が失敗することがまず一つ目です。

この時間を少し長くすることが対策のひとつです。時間を長くしても、通信が実際行えたら、処理としては終了するのであまり気にせず長くすれば良いです。

問題のふたつめですが、Wordpress Ping Optimizerは、上記で説明したping送信先と、トラックバックpingについて、繰り返して通信すると、相手のサーバに「Spam扱い」されてしまうので、二度目以降に記事を更新して再送信しようとしても、再送信されない機能を持ってます。

そのため、何度やってもダメなのです。

 

回復ステップ

以下のステップで説明します。

1.Timeout時間の変更

2.Wordpress  Ping Optimizerで再送信

 

1.Timeout時間の変更

サイトをいろいろと調べましたが、二つの方法がありますが、両方とも対応しておきます。

なお、wordpressの版あるいは、Worpress用のテーマによっては記述箇所が異なるので、一般的な対応方法を説明します。

ここからの対応は、FTPソフトを利用をすることになります。(FFFTPやfilezilla)

使用されたことのない方はこれらの使用方法と設定を調査するところからの開始となります。

 

スポンサーリンク
//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (adsbygoogle = window.adsbygoogle || []).push({});

cron.phpの修正

Timeout時間を長めに設定します。0.01秒から30秒に変更です。

wp-includesフォルダにある、cron.phpを編集します。

以下は、FFFTPを使用しています。サーバ上のcron.php(右側)をまず左側のローカルフォルダにコピーします。

 

 

そして編集ソフトで開きます。以下はTerapadを使用しています。

Ctll+Fで、検索ウィンドゥ(左上)を持して、timeoutという文字を検索します。そうすると今の設定は、0.01秒となってます。これを3秒に変えます。そうすると、

まず、これで一つ目の設定は終わりまです。

 

comment.phpの修正

つぎに、同様にtimeout設定がある、comment.phpの修正です。上記の修正だけでは問題が解決できなかったので、こちらのファイルも同時に修正することとしました。

場所ですが、wp-includesフォルダにあるので、先ほどと同様FTPで入手して編集します。

同じようにtimeoutを検索します。そしてそれらをすべて"30"に値を変えていきます。

以下では二つの画面のみ紹介ですが、他の部分もすべて30に変更します。

 

これでここまでの処理は一旦終了です。

 

2.Wordpress  Ping Optimizerで再送信

つぎに、トラックパックできなかった記事の再送信です。

まず、設定で画面左下のWordpress Ping Oprimizerを選択します。

そうすると、一番下の赤の四角で、NOT Pingingというのが見えますね。これはPing通信がされなかったとの証拠になります。

 

そこで、緑の枠の「Ping Now」をクリックします。そうすると、ポップアップがされます。

 

Pingしすぎるとスパム扱いされるとの警告がありますが、OKを押し、ping通信と、トラックバックping送信をします。

この繰り返し送信は、30分位あけた方がスパム扱いされないとの説があります。本当のところの時間はサイトによるのでどうかはわかりません。

そうして、トラックバックされなかった記事を見ると、以下のように、送信済みのメッセージが出ています! これでやっと成功です!

 

他のトラックバックできなかった記事も、送信済みになっていると思いますが、気になる記事を確認してみてください。

 

追記:

この設定をして、次の投稿でもトラックバックができてなかったら、Wordpress Ping  Optimizerで、一番下の

Ping Logで、Clear Log (xx Records)をしてみてください。

そうすると、投稿記事でトラックバックがされます。

何かの過去の履歴を持ってしまっていて、トラックバックされないこともあるようです。

 

まとめ

WordPressから他のサイトにトラックバックをしようとしたのに反映されていない,その対策を調べて考え、実行し解決しました。

主な理由は二つでした。

1)相手のサイトのサーバのTimout時間が短いためにうまく伝わらない。

2)プラグインにスパム扱いを防ぐためのwordpress ping optimezerが入っている。

ブログ村や食べログはこの設定でトラックバックができるようになりましたが、他のサイトでもこの方法で解決できれば幸いです。

 

スポンサーリンク
//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (adsbygoogle = window.adsbygoogle || []).push({});

 

  • B!