Notionのページを殆どそのままWordPressの投稿に同期できるようにしたので、参考にした記事と試行錯誤の内容をメモしておきます。
同じことを考えている同好の士の助けになりますように。
経緯
発端
このブログを立ち上げて早3年……もう少しで4年が経ちますが、更新頻度がひどく低いです。 公開記事がたったの10件なので、1年に2.5件しか投稿できてない計算になります。 ぶっちゃけブログ用に借りたレンタルサーバー、ほとんど独自ドメインのメールサーバー化してます。メールアドレスを消さないためにレンタルサーバーを継続してるというなんともコスパが悪い状態。
投稿していないときの私の頭の中は
- せっかくレンタルサーバーを借りてブログも立ち上げてるのに、記事投稿が面倒で全然ブログ更新できてない
- WordPressはマークダウン記法+αかつブロックエディタだけど、Notionで下書きを書いてWordPressにコピペしても、画像はイチからWordPress側にアップロードし直さなきゃ行けなくて手間
- 普段使ってるNotionでブログ記事書いて、そのままWordPressに飛ばせたら良いのに
って感じだったので、この面倒を解決するために、画像ごとNotionの中身をWordPressに移行する方法を探していました。
WP Sync for Notionが良いらしい!
で、「WordPress Notion 連携」などでググったところ、次のブログに辿り着きました。
WP Sync for NotionというWordPress用プラグインを導入すれば、NotionのページをWordPressの記事にボタン一つで飛ばせる!とのこと。
元記事では導入方法を詳しく解説してくれているので、参考にしながらプラグインの導入やNotionのAPIキー取得などができました。
でも導入時に試行錯誤も
ただ、実際に自分の作業フローに組み込むにあたって、いくつか試行錯誤も必要だったので、悩んだ点と私の解決方法を残しておきます。
試行錯誤の経過
WordPressへのプラグイン導入とNotionのAPIキー取得、WP Sync for NotionへのAPIキー貼り付けまでは元ブログさんを参考にしてください。
Choose……同期元ページはどこにすべきか

このWP Sync for Notion、当然ですが無料版だとできることに制限があり、同期元をデータベースにすることができません。 私は投稿ネタをデータベースで管理して、こんな感じで思いつき→制作→公開の流れを管理しているので困りました。

一番手っ取り早い解決方法はPro版に課金することですが、Pro版は1サイト1年あたり200ドルするので、趣味で遊ぶブログに導入するにはコストが重い(既にレンタルサーバー代とかが固定でかかってるので……)。
結果的に、通常のページを同期元にすれば、子ページも含めて同期できるようだったので、「ブログ記事下書き置き場」というページを作って、「Include children’s page」を「Yes」に設定することにしました。
で、Notion側には次のようなページを作ってあります。 もちろん、このページについては、Notionの「接続」から、WP Sync for Notionと連携するために自分で作ったコネクトを繋いであります。

「ブログ記事下書き置き場」という親ページを用意して、その子ページとしてブログ記事たちを配置していく方法です。 この方法だと子ページに一々Notionの「接続」を設定する必要がないため、投稿までに必要なステップを減らすことができると思います。
なお、公開済みのページは「公開済み」というサブページでも作ってそこに格納しようかとも思いましたが、後述する理由からその運用はせず、同じ親ページ内で場所を変えるだけにしています。
Import As…

ぶっちゃけ悩まないと思いますが、
- ブログの投稿なので、Post Typeは「投稿」(固定ページではない)
- Post Statusは、WordPress側で最終チェックをしたいので「下書き」
- Post Authorは自分ひとりで管理してるブログなので自分自身
に設定するだけですね。Destinationは無料版だとPost typeしか選べないです。
Field mapping

悩んだというより、実現できることを試しただけですが…… 初期設定では、
- Notionページのタイトルを記事タイトルに
- Notionページの内容を記事本文に
するようになってます。これはこのままでいいでしょう。
私の場合、追加でNotionのPage covor(カバー画像)を、WordPressのFeatured image(アイキャッチ画像)に設定するようにしました。できました。 Notionのうちにアイキャッチまで設定しておければ、投稿前にWordPress側でやる作業を減らせるのでハッピーです。
ちなみに、WP Sync for NotionのPro版ならデータベースを同期できるので、多分投稿のタグとかもここで拾える気がします。やったことないけど。
Sync SettingsのStrategyどうしよう

ここでは、Strategyを
- Add(Notion側で追加された記事のみ同期)
- Add & Update(Notion側で追加された記事&更新された記事を同期)
- Add, Update & Delete(追加と更新に加えて、Notionで記事を削除したらWPからも削除)
の3つから選べます。
とりあえずDeleteは怖いので外すとして、Updateをするか迷いましたが、結局Addのみにすることにしました。 理由としては、Updateも入れてしまうと、WP側で頑張って最後の調整をして公開した記事も、またNotion側の状態にロールバックされて下書きに戻されてしまうためです。
例えば、NotionでURLをブックマークとして保存したらWP側には反映されない(URLさえ残らず、消えてしまう)とか、CallOutが使えないとか、そういう制約があるため、Notionで書いた記事も最後はWP側で最終チェックと簡単な整形が必要です。 だけど、Updateも生かしておくと、せっかくWP側で整形作業をした記事も、Notion側が最新と誤解して、整形前の状態に戻されてしまいます(もちろん、同期が掛かるので「下書き」に戻されます)。
なので、Addのみとし、次の運用にしています。
- Notionで下書きを完成させる
- 完成した下書きを「ブログ記事下書き置き場」に配置する
- WP Sync for Notionで同期する
- 同期済みで、もうNotion側では手を付ける必要がない下書きは、場所を移す
ここで、上の方で
なお、公開済みのページは「公開済み」というサブページでも作ってそこに格納しようかとも思いましたが、後述する理由からその運用はせず、同じ親ページ内で場所を変えるだけにしています。
と言っていた点についての後述です。 面倒なので試していませんが、サブページ内に移動した場合、WP Sync for Notionが
「このサブページに、前まで無かったページが追加されてる!!」
と誤解して、もう一度WPに下書き追加される気がしたので、サブページに移動する運用はやめました。 同じ記事を2回同期されちゃうと、その分WPのメディアライブラリに同じ画像が2回アップされて気持ち悪いの……。
Sync SettingsのTriggerどうしよう

Recurringにすれば、無料版でも毎日自動でNotionの内容をWPに同期してくれますが、渡しの場合は次の理由からManual onlyにしています。
- Addのみの場合、書きかけの記事がWP側に飛んでしまう
- AddとUpdateにすれば便利かもしれないが、結局先述のNotionに引っ張られてロールバックする問題がある
ちなみに、WP Sync for NotionをPro版にすればwebhookを利用して直ちに連携できるみたいです。 NotionもProに課金すればボタンからWebhookを使えるので、どっちもPro版な人はNotion側に同期ボタンを実装できそうですね。いいなぁ。
公開、とは。

公開って言ってますが、要は「設定を保存」です。別にこれを押しても何も公開されません。
で、結局どこを押せば同期されるの

画面右側にあるActionsから、Sync nowボタンを押せば、指定したページ自体と、その子ページが下書きとして追加されます。 なお、Sync nowがグレーアウトしている場合、上に書いた「公開(=設定を保存)」が未完了だと思うので、先に公開してください。
WP Sync for Notionでできること/できないこと
全ては試していませんが、確認した限り次のとおりです。
- H1〜3はもちろん、箇条書きリスト、数字つきリストも再現可能
- 罫線と2段組、3段組とかもOK
- トグルも再現できるが、2階層まで。使わないのを推奨
- Quoteは使えるがCallOutは使えない
- リンクはブックマークにすると読み込まれない。普通のリンクにしておいて、WP側で設定し直す必要あり
- 画像はキャプションも含めて自動で投稿できる
おまけ
親ページがWPに残り続けます
この運用だと、「ブログ記事の下書き置き場」自体もWPに同期されます。

Addのみにしているので、Notion側をいじっても同期されませんが、このページは完全に自分用のメモが置いてあるだけなので、WP側で公開にしちゃわないよう注意です。
結局コンテンツ管理どうしてるの

こんな感じで、思いつきからブログや動画投稿までをカンバン管理してるって書きましたが、これまで述べたとおり、ブログ記事はこのカンバンで管理しきれなくなりました。 結局、今の運用としては、
- カンバン表示のDBを使って、思いつきから制作ネタを選別
- カンバン表示のDBの中で制作
- 完成して投稿するタイミングになったら「ブログ記事の下書き置き場」に子ページを作って内容を全部コピペ
という流れになりました。
これなら、カンバンを活用した状態管理もできるので、手間はありますが今までの作業フローは崩さずにいられるはず。