n8nでWordPressの重複投稿を防ぐ方法|ステータス管理でやさしく解説

n8nでWordPressへの記事投稿を自動化すると、とても便利です。

でも自動化では、

「同じ記事が2回投稿される」

というトラブルに注意が必要です。

たとえば、

WordPressへの投稿は成功した
↓
Googleスプレッドシートの更新だけ失敗した
↓
記事がまだ「入稿待ち」のまま
↓
もう一度n8nを実行
↓
同じ記事を再投稿

ということがあります。

そこで大切なのが、

ステータス管理

です。

この記事では、

n8nでWordPress記事の重複投稿を防ぐ方法

入稿待ち・処理中・完了の使い分け

Post IDの保存

IFノードでの確認

再実行するときの注意点

まで、初心者向けにやさしく解説します。

なぜWordPressで重複投稿が起きるの?

まず、

「なぜ同じ記事が2回投稿されるのか」

を理解しておきましょう。

たとえばGoogleスプレッドシートに、

  • タイトル
  • 本文
  • 入稿ステータス

を保存しているとします。

記事Aの状態が、

入稿ステータス
=入稿待ち

だったとします。

n8nが記事Aを取得し、WordPressへ投稿します。

ここまでは成功しました。

しかし、そのあとGoogle Sheetsを、

入稿待ち
↓
完了

へ変更する処理だけ失敗したとします。

すると、

WordPress
=記事Aが存在する

Google Sheets
=まだ入稿待ち

というズレが起きます。

n8nをもう一度実行すると、

「入稿待ちの記事がある」

と判断して、記事Aをもう一度投稿する可能性があります。

自動化では「途中まで成功」がある

人間が作業すると、

記事を投稿した

と覚えていることができます。

でもn8nは、設定したデータを見て判断します。

Google Sheetsに、

入稿待ち

と書いてあれば、

「まだ処理していない」

と判断する可能性があります。

そのため自動化では、

処理前

処理中

処理後

をデータとして残すことが重要です。

おすすめは3段階のステータス管理

初心者にもおすすめなのが、

入稿待ち
↓
処理中
↓
完了

という3段階です。

意味は次の通りです。

入稿待ち
=まだ処理していない

処理中
=n8nが現在処理している

完了
=WordPressへの投稿まで成功した

です。

なぜ「処理中」が必要なの?

入稿待ちと完了だけでも管理はできます。

でも、

入稿待ち
↓
WordPress投稿
↓
完了

という流れだと、WordPress投稿後にエラーが起きたとき、

どこまで進んだのか

わかりにくくなります。

そこで最初に、

入稿待ち
↓
処理中

へ変更します。

すると途中で止まっても、

「この行は一度処理を始めている」

とわかります。

基本のワークフロー

おすすめの流れは、

Google Sheets
↓
入稿待ちの記事を取得
↓
Google Sheets
処理中へ変更
↓
OpenAIなどの処理
↓
WordPress
下書き投稿
↓
Google Sheets
完了へ変更
↓
Post ID保存

です。

こうすると、

処理開始前
=入稿待ち

処理途中
=処理中

成功
=完了

という状態がわかります。

Googleスプレッドシートの例

たとえば次のような列を作ります。

  • A列
    タイトル
  • B列
    本文
  • C列
    入稿ステータス
  • D列
    WP投稿済み
  • E列
    Post ID
  • F列
    エラー内容

最初は、

タイトル
n8n初心者向け解説

入稿ステータス
入稿待ち

WP投稿済み
未

Post ID
空欄

エラー内容
空欄

という状態です。

処理開始時に「処理中」へ変更する

n8nが記事を取得したら、すぐに、

入稿ステータス
=処理中

へ変更します。

これで、

「この記事は今処理している」

という目印になります。

たとえばn8nを誤ってもう一度実行しても、

入稿待ちだけ取得する設定なら、

処理中の記事は対象から外せます。

入稿待ちだけ取得する

Google Sheetsノードでは、

入稿ステータス
=入稿待ち

だけを対象にします。

すると、

記事A
入稿待ち
→取得

記事B
処理中
→取得しない

記事C
完了
→取得しない

という状態にできます。

これだけでも重複処理をかなり減らせます。

WordPress投稿が成功したら完了にする

WordPressへの投稿が成功したあとに、

入稿ステータス
=完了

WP投稿済み
=済

へ変更します。

重要なのは順番です。

先に完了へ変更してからWordPressへ投稿するのはおすすめできません。

なぜ先に完了へしないの?

たとえば、

Google Sheets
完了へ変更
↓
WordPress投稿
↓
失敗

となった場合です。

すると、

Google Sheets
=完了

WordPress
=記事なし

という状態になります。

管理表では成功したように見えてしまいます。

そのため、

WordPress投稿成功
↓
完了へ変更

という順番が基本です。

Post IDを保存する

WordPressで記事を作成すると、その記事には一意のIDが付きます。

WordPress REST APIの投稿データにはidがあり、投稿を作成したときのレスポンスから取得できます。:chatgpt-content-reference{index=”0″}

たとえば、

Post ID
=845

です。

この845をGoogle Sheetsへ保存します。

Post IDが重複防止に役立つ理由

Post IDが入っているということは、

「WordPress側に記事が作成された可能性が高い」

と判断できます。

たとえば、

入稿ステータス
=処理中

WP投稿済み
=未

Post ID
=845

だったとします。

この場合、

ステータス更新は途中で止まった

でもWordPress投稿は成功している

可能性があります。

Post IDを保存しておけば、再投稿する前に確認できます。

IFノードで二重チェックする

WordPress投稿の直前にIFノードを入れる方法もあります。

たとえば条件を、

  • 入稿ステータス
    =入稿待ち
  • AND
  • WP投稿済み
    ≠済
  • AND
  • Post ID
    =空欄

にします。

つまり、

まだ処理していない

まだ投稿済みになっていない

WordPressのPost IDもない

この3つをすべて満たした記事だけ投稿します。

ANDとは?

ANDは、

「全部の条件を満たす」

という意味です。

たとえば、

入稿待ち
AND
Post IDが空欄

なら、

両方ともOK

の場合だけ次へ進みます。

重複投稿を防ぐ場合は、

1つの条件だけでなく複数の条件を見る

方が安全です。

IFノードのイメージ

流れは、

Google Sheets
↓
IF
↓
条件OK
↓
WordPress

条件NG
↓
処理しない

です。

たとえばすでにPost IDが入っていれば、

False

側へ流してWordPress投稿をしないようにできます。

「完了」だけを見るより安全

もし条件が、

入稿ステータス
=入稿待ち

だけだと、

何らかの理由でステータス更新に失敗したときに再投稿される可能性があります。

そこで、

入稿ステータス

WP投稿済み

Post ID

を合わせて確認します。

複数の情報で確認することで、重複投稿のリスクを下げられます。

row_numberも保存しておく

Google Sheetsを更新するときは、

どの行を変更するか

も重要です。

そのため、

row_number

を使う方法があります。

たとえば、

row_number
=8

なら、

8行目の記事

という意味です。

最初に取得したrow_numberを最後まで使えば、同じ記事の行を更新しやすくなります。

別の記事を更新すると危険

row_numberを間違えると、

記事AをWordPressへ投稿

したのに、

記事Bを完了

にしてしまう可能性があります。

すると次回、

記事A
=まだ入稿待ち

になり、

再投稿される原因になります。

そのため、

正しい行を更新する

ことも重複投稿対策の1つです。

管理IDを作る方法もある

Google Sheets側に、

管理ID

を作っておくのもおすすめです。

たとえば、

ART-001

ART-002

ART-003

のようにします。

このIDは、

「どの記事なのかを見分けるための番号」

です。

WordPressのPost IDとは別に管理できます。

管理IDとPost IDの違い

管理ID
=自分で決める記事番号

Post ID
=WordPressが自動で付ける記事番号

です。

たとえば、

管理ID
=ART-001

Post ID
=845

という形です。

両方保存しておくと管理しやすくなります。

WordPress側で記事が存在するか確認する方法

さらに安全にしたい場合は、WordPress側を確認してから投稿する方法もあります。

WordPress REST APIには、

GET /wp/v2/posts/<id>

で特定のPost IDの記事を取得する仕組みがあります。:chatgpt-content-reference{index=”1″}

つまりGoogle SheetsにPost IDが入っているなら、

「このIDの記事は本当に存在するか」

を確認できます。

Post IDが存在したら新規投稿しない

たとえば、

Post ID
=845

がGoogle Sheetsに入っていたとします。

WordPressへ、

845の記事がありますか?

と確認します。

記事が存在するなら、

新規投稿しない

という処理にできます。

これは一段進んだ重複対策です。

タイトルだけで重複チェックするのは危険

初心者は、

「同じタイトルの記事があるか確認すればいいのでは?」

と思うかもしれません。

でもタイトルは、

同じになる場合がある

途中で変更される場合がある

少し表記が変わる場合がある

ため、完全な目印には向きません。

できれば、

Post ID

管理ID

ステータス

などを使う方が安全です。

スラッグを使う方法もある

WordPressにはslugという値があります。

slugはURLの一部になる文字列です。

WordPressの投稿APIでもslugは投稿の項目として扱われています。:chatgpt-content-reference{index=”2″}

たとえば、

n8n-wordpress-auto

のような値です。

自分で一意のslugを管理する設計なら、重複チェックの補助に使うこともできます。

ただし初心者は、まずPost IDとステータス管理から始める方が簡単です。

エラー列を作る

Google Sheetsに、

エラー内容

という列を作ると便利です。

正常なら空欄。

失敗したら、

  • WordPress接続エラー
  • OpenAI処理失敗
  • Google Sheets更新失敗

などを入れます。

これで、

どこで止まったのか

を確認しやすくなります。

エラーが出たらすぐ「入稿待ち」に戻さない

ここも注意したいポイントです。

途中でエラーが出た記事を、自動で、

処理中
↓
入稿待ち

へ戻す設計にすると、

WordPress投稿後のエラーだった場合に再投稿される可能性があります。

まず、

Post IDがあるか

WP投稿済みか

WordPressに記事があるか

を確認してから再実行する方が安全です。

再実行するときの確認方法

たとえば、

入稿ステータス
=処理中

になっている記事があったとします。

再実行前に、

Post ID
空欄か

WP投稿済み
未か

WordPressに記事があるか

を確認します。

Post IDが空欄

WordPress投稿前に止まった可能性があります。

原因を直して再実行できます。

Post IDが入っている

WordPress投稿後に止まった可能性があります。

まずWordPressの記事を確認します。

すでに記事があれば、新規投稿ではなく、

Google Sheetsを完了へ直す

だけで済むかもしれません。

WordPress投稿後のレスポンスをすぐ保存する

より安全にするなら、

WordPress投稿
↓
Post ID保存
↓
その他の処理

という順番にする方法があります。

つまり投稿成功後、なるべく早くPost IDをGoogle Sheetsへ保存します。

そのあと、

画像処理

追加設定

通知

などを行います。

後ろの処理で失敗しても、

Post IDは残っている

ため、重複判定しやすくなります。

「完了」の意味を決めておく

自動化では、

何をもって完了とするか

を最初に決めておくことも重要です。

たとえば、

WordPress下書き作成成功
=完了

なのか、

アイキャッチ設定まで成功
=完了

なのか、

Google Sheets更新まで成功
=完了

なのかです。

おすすめは、自分のワークフローに合わせて明確に決めることです。

ステータスを細かくする方法

自動化が大きくなったら、

入稿待ち

処理中

WP投稿済み

画像処理中

完了

エラー

のように増やす方法もあります。

ただし最初から細かくしすぎると複雑です。

初心者なら、

入稿待ち

処理中

完了

の3つから始めれば十分です。

複数記事を処理するときはさらに注意

Google Sheetsに10件の記事がある場合、

1件ずつ順番に処理

することがあります。

このときも、

1件成功
↓
その行を完了へ更新
↓
次の記事

という流れがおすすめです。

最後に10件まとめて完了にすると、途中で止まったときにどこまで成功したかわかりにくくなります。

Loop Over Itemsを使う場合

たとえば、

Google Sheets
↓
Loop Over Items
↓
1記事取得
↓
処理中
↓
WordPress投稿
↓
Post ID保存
↓
完了
↓
次の記事

という構成です。

1件ずつ状態を更新していけば、途中でエラーになっても確認しやすくなります。

Schedule Triggerを使う場合は必須に近い

毎日自動実行する場合は、重複対策が特に重要です。

たとえば、

毎朝8時
↓
Google Sheets
↓
入稿待ちの記事を取得
↓
WordPress投稿

というワークフローです。

ステータス管理が正しくできていないと、翌朝も同じ記事を投稿する可能性があります。

自動実行するほど、

処理済みかどうかを記録する

仕組みが重要になります。

完全自動投稿より下書きがおすすめ

重複投稿が起きた場合、

公開記事

として2本出るより、

下書き

で止まっていた方が被害を小さくできます。

初心者なら、

status
=draft

でWordPressへ送るのがおすすめです。

WordPressの投稿APIでは、投稿statusとしてdraftやpublishなどが用意されています。:chatgpt-content-reference{index=”3″}

下書きで内容を確認してから公開すれば安心です。

重複投稿を100%防げる?

ステータス管理を入れれば、かなり安全にできます。

ただし、

  • 通信エラー
  • サーバーエラー
  • 複数ワークフローの同時実行
  • 手動操作
  • 外部サービスの不具合

など、さまざまな要因があります。

そのため、

「絶対に重複しない」

というより、

複数のチェックを入れて重複しにくくする

という考え方が大切です。

おすすめの3重チェック

初心者でも作りやすいのは、

  1. 入稿ステータスを見る
  2. WP投稿済みを見る
  3. Post IDを見る

です。

たとえば、

入稿ステータス
=入稿待ち

WP投稿済み
=未

Post ID
=空欄

この3つを満たした場合だけ投稿します。

さらに安全にするならWordPress側も確認

より慎重にするなら、

Post IDがある場合
↓
WordPress REST APIで記事確認

というチェックも追加します。

WordPress REST APIでは、投稿の作成・取得・更新がIDを使って行えます。:chatgpt-content-reference{index=”4″}

これで、

Google Sheets

だけでなく、

WordPress側

も確認できます。

自動化で大切なのは「何度実行しても壊れにくい」こと

便利な自動化は、

1回成功する

だけでは十分ではありません。

間違えてもう一度実行しても、

同じ記事が増えない

データが壊れない

どこまで終わったかわかる

という設計が大切です。

この考え方は、

「同じ処理をもう一度行っても結果が大きく壊れない」

という自動化設計につながります。

ココナラのn8nテンプレートについて

私は、

「ChatGPTで作った記事をWordPressへ半自動入稿するn8nテンプレート Lite」

をココナラで公開しています。

Google Sheetsで記事を管理し、

n8n
↓
WordPress下書き

という流れを作るためのテンプレートです。

WordPress自動入稿では、

記事を送れる

ことだけでなく、

どの記事を処理したか

投稿後にどう記録するか

再実行したらどうするか

まで考えることが重要です。

今回の記事で紹介したステータス管理は、そのための基本になります。

テンプレートを使う場合もステータス確認は必要

テンプレートを使えば重複投稿が絶対になくなるわけではありません。

自分の環境に合わせて、

  • Google Sheets
  • ステータス名
  • 対象行
  • WordPress Credential
  • Post ID保存先

などを正しく設定する必要があります。

また、本番運用前にテスト記事で動作確認しましょう。

初心者はこの順番で作ろう

重複投稿対策は、次の順番で作るとわかりやすいです。

  1. Google Sheetsに「入稿ステータス」を作る
  2. 初期値を「入稿待ち」にする
  3. 入稿待ちの記事だけ取得する
  4. 処理開始時に「処理中」へ変更する
  5. WordPressへ下書き投稿する
  6. Post IDを取得する
  7. Post IDをGoogle Sheetsへ保存する
  8. WP投稿済みを「済」にする
  9. 入稿ステータスを「完了」にする
  10. 再実行して同じ記事が投稿されないか確認する

まずは1記事だけでテストしてください。

まとめ

n8nでWordPressの記事投稿を自動化するときは、

重複投稿対策

も一緒に作ることが大切です。

おすすめの基本は、

入稿待ち
↓
処理中
↓
WordPress投稿
↓
Post ID保存
↓
完了

という流れです。

さらに、

WP投稿済み

Post ID

IFノード

を組み合わせて、

まだ投稿されていない記事だけ

WordPressへ送るようにします。

特に重要なのは、

WordPress投稿後にPost IDを保存する

ことです。

Post IDが残っていれば、途中でエラーになっても、

「すでにWordPressに記事があるのでは?」

と確認できます。

自動化では、

正常に動くこと

だけでなく、

途中で失敗したときにどうなるか

まで考えることが重要です。

まずは、

入稿待ち
処理中
完了

の3つのステータスから始めてみましょう。

注意事項

n8n、Google Sheets、WordPressはアップデートによって画面や設定方法が変更される場合があります。

この記事では、重複投稿を減らすための基本的な設計例を紹介しています。すべての環境で重複投稿を完全に防げることを保証するものではありません。

本番運用では、

  • 通信エラー
  • 同時実行
  • Google Sheets更新失敗
  • WordPress側の処理成功後のエラー

なども考慮してください。

WordPressへの新規投稿に成功したあとGoogle Sheets更新だけ失敗した場合は、再実行前にPost IDやWordPress管理画面を確認してください。

大量の記事を扱う前に、テスト記事1件で、

  • 正常終了
  • 途中エラー
  • 再実行

の3パターンを確認することをおすすめします。

参考・公式情報

  • ・WordPress Developer Resources「Posts – REST API Handbook」
  • ・WordPress Developer Resources「REST API Reference」
  • ・n8n公式ドキュメント「Google Sheets」
  • ・n8n公式ドキュメント「IF」
  • ・n8n公式ドキュメント「Loop Over Items」
  • ・n8n公式ドキュメント「Expressions」
  • ・n8n公式ドキュメント「Error handling」

n8nやWordPressは継続的に更新されるため、実際の画面や設定項目が異なる場合は、各サービスの最新公式ドキュメントも確認してください。

次に読む記事

自分で組み立てる時間を減らしたい方へ

この記事の手順を自分で試す方法に加え、設定の土台として使える販売テンプレートも用意しています。

ご自身の環境に合わせた初期設定が必要です。OpenAIを使う商品ではAPI利用料金が別途かかります。購入前に販売ページの対応範囲をご確認ください。