WordPress core has no QR feature, and a code pointing at a page doesn't need a plugin the way so much else on the platform does. A code made separately and downloaded as an image adds through the standard block editor the same way a photo does, no extra installation required.
The real wrinkle is file format: WordPress blocks SVG uploads to the Media Library by default, a long-standing security setting meant to stop malicious scripts hidden inside SVG files, so a QR code's vector version needs a different route than its raster PNG version. A PNG from any generator uploads and displays normally; SVG needs either a vetted plugin that allows the format or a Custom HTML block instead.
Adding a QR code to a WordPress page or post
Build the code
Static for a page whose content is settled; dynamic if the destination — a landing page, a downloadable file — might be swapped out later.
Download as PNG for the Media Library
PNG uploads through the standard Add Media flow with no configuration changes, since it isn't blocked by WordPress's default file-type restrictions.
Add it with the Image block
In the block editor, insert an Image block, upload the PNG, and resize it using the block's own width controls.
Use SVG only if uploads are already enabled
A site with a vetted plugin or code snippet allowing SVG can upload it the same way as PNG; otherwise, embed the SVG's markup directly inside a Custom HTML block instead of uploading the file.
Why SVG uploads are blocked in the first place
WordPress disallows SVG in the Media Library by default because an SVG file can contain embedded JavaScript, which is a real cross-site-scripting risk on a platform where anyone with upload access could otherwise introduce a script into a page. It's a deliberate security default, not a bug, and it applies regardless of what the SVG actually contains — including a harmless QR code.
PNG is the path of least resistance
For most sites, a QR code doesn't need vector scaling on a web page the way it might in a print layout — it's displayed at one size, and a PNG exported at that display size looks identical to an SVG version on screen. That makes PNG the practical default for a WordPress page unless the code also needs to be reused somewhere it will be resized or printed.
Getting SVG onto the page anyway
Two routes exist without touching core WordPress security settings carelessly: a well-maintained plugin that specifically allows and sanitizes SVG uploads, or pasting the SVG's own markup directly into a Custom HTML block, which sidesteps the Media Library's file-type check entirely since nothing is being uploaded as a file.
What the embedded code contains
A static code holds its destination directly in the image — a page URL, a download link — with nothing to update later. A dynamic code holds a short link that can be repointed if the underlying content moves.
https://example.com/latest-postDisplaying a code on a page versus printing it
A code shown only on screen doesn't need the same physical-size math as a printed one, but if the same code is also printed on a flyer or card, the usual floor applies: about 20 mm on a side, with scanning distance around ten times the printed width.
Print it at least 20 mm (2.0 cm) wide
Where WordPress uploads trip people up
Trying to upload SVG without checking the site's settings first
A default WordPress install rejects the file outright — worth confirming a vetted plugin allows it before assuming the upload will work.
Installing an unmaintained plugin just to enable SVG
A plugin that hasn't been updated in years to unblock a file type WordPress restricts for security reasons can introduce more risk than it solves.
Uploading a tiny PNG and letting the block editor stretch it
The Image block's resize handles can enlarge a small file well past its native resolution, softening the code's edges.
Static fits most published content
A code linking to a published post or page that already exists is fine as a free static code. A code meant to survive a site restructure, or reused across multiple posts with different intended destinations, is a better fit for a dynamic code.
How dynamic QR codes workWhere a code shows up on a WordPress site
- A blog post footer linking to a newsletter sign-up page.
- A product page on a WooCommerce store linking to a support page.
- A printed flyer promoting the site, linking back to a landing page.
- An About page linking to a downloadable media kit.