Notion to WordPress Images: Why They Break and How to Fix Them

You publish a blog post from Notion to WordPress. It looks perfect. An hour later, every image is broken. This is the most common failure in Notion-to-WordPress workflows, and it happens because of how Notion stores images internally.
Understanding why Notion to WordPress images break — and how to fix it permanently — saves you from discovering broken posts days after publishing.
Why Notion Images Expire
Notion doesn't serve images from permanent URLs. Every image uploaded to a Notion page is stored on Amazon S3 behind a temporary signed URL. The URL includes an authentication token with an expiration time — typically about one hour.
Here's what a Notion image URL looks like:
https://prod-files-secure.s3.us-west-2.amazonaws.com/abc123/
def456/image.png
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAT73L2G45...
&X-Amz-Date=20260418T120000Z
&X-Amz-Expires=3600
&X-Amz-Signature=a1b2c3d4...The X-Amz-Expires=3600parameter means this URL is valid for 3600 seconds (one hour). After that, the URL returns a 403 Forbidden error. The image is still stored in Notion — it's just not accessible through the old URL anymore. Notion generates a new signed URL each time you open the page.
The Broken Image Workflow
Here's the failure sequence that catches most people:
- You write a blog post in Notion with several images
- A sync tool or manual copy-paste moves the content to WordPress
- The WordPress post contains the Notion S3 URLs pointing to the images
- The post looks perfect — all images load correctly
- One hour passes. The S3 tokens expire.
- Every image in the WordPress post now shows a broken image icon
This also affects RSS feeds, email newsletters that pull from your blog, social media previews, and any cached version of the page. Once the URL expires, every surface that embedded it breaks.
The Fix: Upload Images to WordPress Media Library
The correct approach: during the sync process, download each image from Notion's temporary URL and upload it to your WordPress media library. Then replace the Notion URL in the post content with the permanent WordPress media URL.
WordPress media library URLs are permanent:
https://yourdomain.com/wp-content/uploads/2026/04/image.pngThis URL doesn't expire. It's hosted on your server, served from your domain, and works as long as your WordPress site is running. It's also better for SEO — images served from your own domain contribute to your site's authority.
Manual Fix: Download and Re-Upload
If you're manually copying content from Notion to WordPress, you need to handle each image individually:
- Open the Notion page and right-click each image
- Save the image to your computer
- In the WordPress editor, upload the image to the media library
- Insert the uploaded image into your post
- Repeat for every image in the post
This works for occasional posts with a few images. It doesn't scale to regular publishing or posts with many images. A 10-image post adds 15-20 minutes of manual image handling to every publish cycle.
Automated Fix: Use a Sync Tool That Handles Images
Notipo handles image transfer automatically during every sync. When you publish or update a Notion page, Notipo:
- Scans the Notion page content for all image blocks
- Downloads each image from Notion's S3 URL before it expires
- Uploads the image to your WordPress media library via the REST API
- Replaces the Notion URL in the post content with the WordPress media URL
- Caches the mapping (Notion image hash → WordPress media URL) for future syncs
The caching step matters for re-syncs. When you edit a post in Notion and sync again, Notipo checks which images are already in WordPress and skips them. Only new or changed images get uploaded. This keeps syncs fast and prevents duplicate files in your media library.
What About Zapier and Make?
Zapier and Make can create WordPress posts from Notion database changes, but they don't handle the image problem natively. The Notion trigger sends the page content with temporary S3 URLs. Those URLs are embedded directly in the WordPress post. They expire within an hour.
You can build extra workflow steps to download and re-upload each image, but it adds complexity and fragility. Image handling is the primary reason people move from Zapier/Make to dedicated sync tools for Notion-to-WordPress publishing.
Featured Images
The image expiry problem also affects featured images (the thumbnail shown in blog listings, social previews, and RSS feeds). If you set a Notion image as your featured image and the URL expires, your blog listing and social cards show a broken thumbnail.
Notipo solves this differently — it generates featured images automatically during the sync. Standard mode creates an image with your post title overlaid on an Unsplash background. AI mode (Pro plan) generates a unique image using Google Gemini. Either way, the featured image is uploaded to your WordPress media library with a permanent URL.
Checking for Broken Images
If you suspect broken images on existing posts, check your WordPress post content for Notion S3 URLs. Any URL containing prod-files-secure.s3 or X-Amz-Expires is a temporary Notion URL that will expire (or has already expired):
SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%prod-files-secure.s3%'
AND post_status = 'publish';Any posts returned by this query have images that are broken or will break soon. Re-sync them through your sync tool, or manually download and re-upload each image.
FAQ
Why do Notion images break after publishing to WordPress?
Notion stores images on Amazon S3 with temporary signed URLs that expire after approximately one hour. If your sync tool embeds the Notion URL directly in the WordPress post, the image link stops working as soon as the URL expires. The fix is to download each image during sync and upload it to your WordPress media library.
How do I transfer images from Notion to WordPress permanently?
Use a sync tool that downloads images from Notion's temporary URLs and re-uploads them to your WordPress media library during the publishing process. Notipo does this automatically on every sync, including re-syncs when you update a post. The WordPress media URL is permanent and doesn't expire.
Does Notipo re-upload images every time I update a post?
No. Notipo caches the mapping between Notion image hashes and WordPress media library URLs. On re-syncs, it skips images that are already in your media library and only uploads new or changed images. This keeps syncs fast and avoids duplicate files.
Can I fix broken Notion images on existing WordPress posts?
If images are already broken, you need to re-sync the post. In Notipo, trigger a manual sync for the affected post — it will re-download all images from Notion (if the Notion page still has them) and replace the expired URLs with permanent WordPress media URLs.
Get Started
Stop losing images to expired URLs. Create a free Notipo account and your Notion images will be permanently cached in your WordPress media library on every sync. See the getting started guide for the full setup, or read Notion to WordPress: 4 Ways to Publish Automatically for a comparison of all sync options.
Ready to publish from Notion?
Set up in 5 minutes. Free plan available — no credit card required.
Get Started Free