{"id":34609,"date":"2026-09-05T19:29:03","date_gmt":"2026-09-05T19:29:03","guid":{"rendered":"https:\/\/www.dotcom-monitor.com\/blog\/?p=34609"},"modified":"2026-09-05T19:30:39","modified_gmt":"2026-09-05T19:30:39","slug":"monitor-embedded-pdf","status":"publish","type":"post","link":"https:\/\/www.dotcom-monitor.com\/blog\/monitor-embedded-pdf\/","title":{"rendered":"How To Monitor Embedded PDF Viewers On Your Website"},"content":{"rendered":"<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-34610\" src=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/hero-embedded-pdf-viewer-monitoring.webp\" alt=\"A browser window showing a web page where the embedded PDF viewer area has failed to render the document\" width=\"1200\" height=\"800\" srcset=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/hero-embedded-pdf-viewer-monitoring.webp 1200w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/hero-embedded-pdf-viewer-monitoring-300x200.webp 300w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/hero-embedded-pdf-viewer-monitoring-1024x683.webp 1024w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/hero-embedded-pdf-viewer-monitoring-768x512.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>Your uptime monitor reports 200 OK. The page loads. And the contract your customer came to read is a gray rectangle where the document should be.<\/p>\n<p>Embedded PDF viewers fail in ways that page-level checks never see. The container page is healthy. The viewer inside it is not. Nobody files a ticket, because the people who hit the broken page assume it&#8217;s their browser and leave.<\/p>\n<p>This guide covers what breaks, why standard uptime checks miss it, and what to put in place so you find out before your readers do.<\/p>\n<p><strong>What&#8217;s in this guide<\/strong><\/p>\n<ul>\n<li><a href=\"#what-counts-as-an-embedded-pdf-viewer\">What Counts As An Embedded PDF Viewer?<\/a><\/li>\n<li><a href=\"#why-a-standard-uptime-check-misses-a-broken-viewer\">Why A Standard Uptime Check Misses A Broken Viewer<\/a><\/li>\n<li><a href=\"#how-embedded-pdf-viewers-fail\">How Embedded PDF Viewers Fail<\/a><\/li>\n<li><a href=\"#where-broken-pdf-viewers-cost-you\">Where Broken PDF Viewers Cost You<\/a><\/li>\n<li><a href=\"#how-to-monitor-an-embedded-pdf-viewer\">How To Monitor An Embedded PDF Viewer<\/a><\/li>\n<li><a href=\"#what-to-assert-on-and-how-often\">What To Assert On, And How Often<\/a><\/li>\n<li><a href=\"#the-bottom-line\">The Bottom Line<\/a><\/li>\n<li><a href=\"#heading-faq\">Frequently Asked Questions<\/a><\/li>\n<\/ul>\n<h2 id='what-counts-as-an-embedded-pdf-viewer'  id=\"boomdevs_1\" id=\"what-counts-as-an-embedded-pdf-viewer\">What Counts As An Embedded PDF Viewer?<\/h2>\n<p>Three setups cover almost everything you&#8217;ll find in an enterprise site.<\/p>\n<p><strong>Browser-native embeds.<\/strong> An <code>&lt;iframe&gt;<\/code>, <code>&lt;embed&gt;<\/code>, or <code>&lt;object&gt;<\/code> tag pointing at a PDF URL. Chrome, Edge, Firefox, and Safari each render it with their own built-in viewer, and each behaves a little differently.<\/p>\n<p><strong>Adobe PDF Embed API.<\/strong> A free JavaScript library from Adobe. Your page loads <code>https:\/\/acrobatservices.adobe.com\/view-sdk\/viewer.js<\/code>, passes a client ID, and calls <code>previewFile()<\/code> with the document URL. Adobe offers four embed modes: full window, sized container, in-line, and lightbox.<\/p>\n<p><strong>Third-party viewer libraries.<\/strong> PDF.js, Apryse WebViewer, Nutrient, and similar SDKs that render pages into a canvas element you control.<\/p>\n<p>All three share one thing. The document never arrives in the response that delivered the page. It&#8217;s fetched separately afterward, sometimes by the browser&#8217;s own viewer and sometimes by JavaScript you loaded from a third party, and often from a different host than the page itself.<\/p>\n<h2 id='why-a-standard-uptime-check-misses-a-broken-viewer'  id=\"boomdevs_2\" id=\"why-a-standard-uptime-check-misses-a-broken-viewer\">Why A Standard Uptime Check Misses A Broken Viewer<\/h2>\n<p>An HTTP uptime check requests the page and reads the response. It gets a 200 and a block of HTML containing an empty <code>&lt;div id=\"adobe-dc-view\"&gt;<\/code>. That check passes. It will keep passing every five minutes for as long as the page returns HTML.<\/p>\n<p>But everything that decides whether a reader sees the document happens after that response:<\/p>\n<ol>\n<li>The browser fetches the viewer script from a third-party host.<\/li>\n<li>The script initializes and claims its container element.<\/li>\n<li>Adobe validates your client ID against the domain you registered.<\/li>\n<li>The viewer requests the PDF, often from a different origin than the page.<\/li>\n<li>The first page renders into the container.<\/li>\n<\/ol>\n<p>An HTTP check sees none of that. It&#8217;s the same blind spot that shows up with <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/third-party-content-monitoring\/\">third-party content monitoring<\/a> generally. The parts of the page you didn&#8217;t build are the parts your monitoring is least likely to cover.<\/p>\n<figure id=\"attachment_34617\" aria-describedby=\"caption-attachment-34617\" style=\"width: 1200px\" class=\"wp-caption alignnone\"><img decoding=\"async\" class=\"size-full wp-image-34617\" src=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/uptime-check-vs-reader-view.webp\" alt=\"Diagram comparing what an HTTP uptime check sees (a 200 response with an empty container div) against what the reader sees (a failed PDF viewer)\" width=\"1200\" height=\"686\" srcset=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/uptime-check-vs-reader-view.webp 1200w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/uptime-check-vs-reader-view-300x172.webp 300w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/uptime-check-vs-reader-view-1024x585.webp 1024w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/uptime-check-vs-reader-view-768x439.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><figcaption id=\"caption-attachment-34617\" class=\"wp-caption-text\">An HTTP check validates the container page. The reader is looking at the document that loads into it.<\/figcaption><\/figure>\n<h2 id='how-embedded-pdf-viewers-fail'  id=\"boomdevs_3\" id=\"how-embedded-pdf-viewers-fail\">How Embedded PDF Viewers Fail<\/h2>\n<h3 id='the-document-url-breaks'  id=\"boomdevs_4\">The Document URL Breaks<\/h3>\n<p>The common cause, and the least dramatic. A CMS migration renames the file path. A signed S3 or Azure Blob URL expires. Someone tidies up a storage bucket. The page still renders, the viewer still initializes, and the fetch returns a 404 that shows up in your CDN logs and the browser console but nowhere anyone is watching.<\/p>\n<h3 id='cors-blocks-the-download'  id=\"boomdevs_5\">CORS Blocks The Download<\/h3>\n<p><a href=\"https:\/\/developer.adobe.com\/document-services\/docs\/overview\/pdf-embed-api\/howtos\/\" target=\"_blank\" rel=\"noopener\">Adobe&#8217;s own documentation<\/a> flags this: CORS issues occur when you pass PDF content as a URL and the viewer has to download the file from another domain. The fixes are to host the page and the document on the same domain, or to enable CORS headers on the PDF resource. Either way, a security review that tightens headers on your document host can break every embedded viewer on the site without touching a line of page code.<\/p>\n<h3 id='the-client-id-stops-matching-the-domain'  id=\"boomdevs_6\">The Client ID Stops Matching The Domain<\/h3>\n<p>This one catches teams off guard. Adobe validates the client ID once rendering has begun, and if the ID is used on a domain other than the one you registered, the preview is blocked with an error message. Launch a new subdomain, move to a new marketing site, or promote a staging build with the staging client ID still in it, and the viewer fails on exactly the pages you just shipped.<\/p>\n<h3 id='the-viewer-script-never-loads'  id=\"boomdevs_7\">The Viewer Script Never Loads<\/h3>\n<p>Your page depends on a script served from someone else&#8217;s CDN. A Content Security Policy update, a corporate proxy, an ad blocker, or an outage at the script host all produce an empty container. If your CSP is the culprit, the directive to check is usually <code>script-src<\/code> for the viewer script and <code>frame-src<\/code> or <code>connect-src<\/code> for the document fetch.<\/p>\n<h3 id='authentication-expires-behind-the-document'  id=\"boomdevs_8\">Authentication Expires Behind The Document<\/h3>\n<p>Documents behind a login are reached in different ways depending on the viewer: signed URLs, session cookies passed through with credentials, or a bearer token in a custom header where the SDK supports one. A plain <code>&lt;iframe&gt;<\/code> can&#8217;t attach custom headers at all, which is why authenticated documents usually end up on signed URLs. Whichever route you&#8217;re on, tokens expire and cookie scope changes after an SSO migration, and the viewer receives a 401 it displays as nothing. The same care applies here as with <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/monitoring-applications-that-require-identity-management-authentication\/\">monitoring applications that require authentication<\/a>.<\/p>\n<h3 id='the-pdf-uses-features-the-viewer-doesn-t-support'  id=\"boomdevs_9\">The PDF Uses Features The Viewer Doesn&#8217;t Support<\/h3>\n<p>The Adobe PDF Embed API doesn&#8217;t support XFA forms, digital signature fields, barcode fields, or form fields that run JavaScript calculations. That list matters most in exactly the places XFA is still common: government applications, insurance claims, and legal filings built years ago in Adobe LiveCycle. Those documents open fine in desktop Acrobat, then show readers a warning dialog instead of a usable form once they&#8217;re embedded. Adobe also caps file rendering at five minutes, after which the viewer shows a <code>Preview Rendering Failed<\/code> error.<\/p>\n<h2 id='where-broken-pdf-viewers-cost-you'  id=\"boomdevs_10\" id=\"where-broken-pdf-viewers-cost-you\">Where Broken PDF Viewers Cost You<\/h2>\n<p>Most of these failures land during a publishing push, which is also when the documents matter most.<\/p>\n<p><strong>Investor relations.<\/strong> Quarterly results go live on a fixed date and time. The press release page publishes fine. The 10-Q embedded below it points at a path the finance team changed an hour earlier.<\/p>\n<p><strong>Benefits and insurance.<\/strong> Open enrollment runs a few weeks a year. Plan summaries, formularies, and coverage documents get republished in bulk, and a single storage permission change can blank out hundreds of embedded viewers at once.<\/p>\n<p><strong>Government and public sector.<\/strong> Permit applications, tax forms, and public notices carry the heaviest concentration of legacy form features, and they&#8217;re published by teams who often can&#8217;t see the site&#8217;s error logs.<\/p>\n<p><strong>Regulated product documentation.<\/strong> Safety data sheets, device manuals, and certificates of analysis are frequently contractual obligations. A viewer that stops rendering is a compliance problem, not only a UX one.<\/p>\n<p><strong>Brand and sales collateral.<\/strong> One-pagers, case studies, and brand guideline PDFs sit on landing pages and partner portals that nobody revisits after launch. They also get rebuilt more often than anything else on this list. A <a href=\"https:\/\/www.adobe.com\/express\/create\/logo\" target=\"_blank\" rel=\"noopener\">refreshed logo<\/a> or a new template means a new file, a new path, and an embed still pointing at the version you replaced.<\/p>\n<blockquote><p>If a document only gets traffic during a two-week window each year, a check that runs all year is the only thing that will tell you it broke in month seven.<\/p><\/blockquote>\n<h2 id='how-to-monitor-an-embedded-pdf-viewer'  id=\"boomdevs_11\" id=\"how-to-monitor-an-embedded-pdf-viewer\">How To Monitor An Embedded PDF Viewer<\/h2>\n<p>You need two layers: a cheap check on the document file itself, and a real-browser check that proves the viewer rendered it. Here&#8217;s the order to build them in.<\/p>\n<p><strong>Step 1: Inventory the pages that embed documents.<\/strong> Search your codebase or CMS for <code>adobe-dc-view<\/code>, <code>viewer.js<\/code>, <code>previewFile<\/code>, <code>&lt;embed<\/code>, <code>&lt;object<\/code>, and <code>.pdf<\/code> in iframe sources. Check CMS component settings too, since many enterprise sites build the document URL from a field rather than writing it into markup. Most teams find more embeds than they expected, including pages nobody owns anymore.<\/p>\n<p><strong>Step 2: Monitor the document URL directly.<\/strong> Point an HTTP check at the PDF file and assert on the response. A 200 status is the baseline. Add a size floor so a zero-byte file or an HTML error page fails the check, and where you can, assert that the body starts with <code>%PDF-<\/code> rather than relying on the <code>Content-Type<\/code> header, since plenty of document hosts serve PDFs as <code>application\/octet-stream<\/code>. Use GET rather than HEAD, because some storage endpoints reject HEAD outright.<\/p>\n<p><strong>Step 3: Load the container page in a real browser.<\/strong> HTTP checks can&#8217;t run JavaScript, so the viewer never initializes. <a href=\"https:\/\/www.dotcom-monitor.com\/products\/web-page-monitoring\/\">Web page monitoring<\/a> with Dotcom-Monitor loads the page in a real browser and gives you the full request timeline, so you can see the viewer script and the document fetch exactly as a reader&#8217;s machine issued them. That timeline catches the failures a separate file check can&#8217;t: CORS rejections, blocked requests, and cookies that didn&#8217;t survive a SameSite change.<\/p>\n<p><strong>Step 4: Assert on something the viewer produced.<\/strong> This is the step that makes the check meaningful, and it&#8217;s the step that takes the most care, because PDF viewers hide their contents in different ways. PDF.js exposes a text layer you can assert on directly. Adobe&#8217;s SDK and canvas-based viewers render pages as images, so assert on the surrounding chrome instead: the page-count indicator, the toolbar, or the rendered page container. Browser-native <code>&lt;iframe&gt;<\/code> embeds expose almost nothing to the DOM, so fall back to the network result for the PDF request plus a visual check on the region. Record the page with the <a href=\"https:\/\/www.dotcom-monitor.com\/features\/everystep\/\">EveryStep Web Recorder<\/a>, then add a negative assertion for the error states, so text like &#8220;Preview Rendering Failed&#8221; or &#8220;Failed to load PDF document&#8221; marks the check as failed. Dotcom-Monitor&#8217;s <a href=\"https:\/\/www.dotcom-monitor.com\/features\/assertions-monitoring\/\">content assertions<\/a> handle both directions.<\/p>\n<p><strong>Step 5: Cover the authenticated path separately.<\/strong> If documents sit behind a login, record the sign-in and the document view together as one <a href=\"https:\/\/www.dotcom-monitor.com\/products\/web-application-monitoring\/\">web application monitoring<\/a> transaction, which is just a multi-step browser script. Store credentials in a secure vault rather than in the script. For internal portals that aren&#8217;t reachable from the public internet, run the same script from <a href=\"https:\/\/www.dotcom-monitor.com\/features\/private-agents\/\">private agents<\/a> inside your network.<\/p>\n<p><strong>Step 6: Monitor the dependencies you don&#8217;t own.<\/strong> Point an HTTP check at the viewer script URL, and if your documents come from an object store or a document service, add an <a href=\"https:\/\/www.dotcom-monitor.com\/products\/api-monitoring\/\">API monitoring<\/a> check on that endpoint. When the embedded viewer fails, these separate a third-party outage from a change on your side. Put <a href=\"https:\/\/www.dotcom-monitor.com\/products\/ssl-certificate-monitoring\/\">SSL certificate monitoring<\/a> on the document host too, since an expired cert on a separate file domain breaks the fetch while your main site stays green.<\/p>\n<p><strong>Step 7: Set thresholds on render time, not just page load.<\/strong> A 40 MB scanned document that takes 25 seconds to display is broken as far as a reader is concerned. Use the <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/optimizing-web-performance-understanding-waterfall-charts\/\">waterfall charts<\/a> from a few successful runs to find your normal render time, then alert on meaningful deviation from it.<\/p>\n<p><strong>Step 8: Route the alerts to whoever owns the documents.<\/strong> The content team publishes the PDFs, so the content team needs the alert. Configure <a href=\"https:\/\/www.dotcom-monitor.com\/features\/alerts\/\">alerting rules<\/a> to notify them alongside IT, and require two consecutive failures before paging anyone so a single slow render doesn&#8217;t wake someone up.<\/p>\n<figure id=\"attachment_34624\" aria-describedby=\"caption-attachment-34624\" style=\"width: 1200px\" class=\"wp-caption alignnone\"><img decoding=\"async\" class=\"size-full wp-image-34624\" src=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/pdf-viewer-failure-points.webp\" alt=\"Diagram of four monitoring checkpoints across the container page, viewer script, document fetch, and rendered output\" width=\"1200\" height=\"686\" srcset=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/pdf-viewer-failure-points.webp 1200w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/pdf-viewer-failure-points-300x172.webp 300w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/pdf-viewer-failure-points-1024x585.webp 1024w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/09\/pdf-viewer-failure-points-768x439.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><figcaption id=\"caption-attachment-34624\" class=\"wp-caption-text\">A page-level check covers the first hop. The three after it are where embedded documents actually break.<\/figcaption><\/figure>\n<h2 id='what-to-assert-on-and-how-often'  id=\"boomdevs_12\" id=\"what-to-assert-on-and-how-often\">What To Assert On, And How Often<\/h2>\n<p>Frequency should track how much the document matters and how fast you&#8217;d want to know.<\/p>\n<div class=\"table-wrap\">\n<table>\n<thead>\n<tr>\n<th>What you check<\/th>\n<th>Type of check<\/th>\n<th>Assert on<\/th>\n<th>Suggested interval<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>The PDF file itself<\/td>\n<td>HTTP<\/td>\n<td>200 status, <code>%PDF-<\/code> body, size floor<\/td>\n<td>5 minutes<\/td>\n<\/tr>\n<tr>\n<td>Viewer script availability<\/td>\n<td>HTTP<\/td>\n<td>200 status, response time ceiling<\/td>\n<td>5 minutes<\/td>\n<\/tr>\n<tr>\n<td>Public document page<\/td>\n<td>Real browser<\/td>\n<td>Viewer element present, no error text<\/td>\n<td>15 minutes<\/td>\n<\/tr>\n<tr>\n<td>Authenticated document page<\/td>\n<td>Browser transaction<\/td>\n<td>Login works, document renders<\/td>\n<td>30 minutes<\/td>\n<\/tr>\n<tr>\n<td>Document host certificate<\/td>\n<td>SSL<\/td>\n<td>Valid chain, 30-day expiry warning<\/td>\n<td>Daily<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Treat those intervals as a starting point and tighten them during earnings weeks, enrollment windows, and bid deadlines, when a broken document costs the most.<\/p>\n<p>Run the browser checks from more than one location. A document served through a CDN can be fine in Virginia and missing from the edge node in Frankfurt, and a single-location check will never show you that. Running <a href=\"https:\/\/www.dotcom-monitor.com\/solutions\/synthetic-monitoring\/\">synthetic monitoring<\/a> from a global network is how you find out that readers in one region can&#8217;t open a file everyone else can.<\/p>\n<h2 id='the-bottom-line'  id=\"boomdevs_13\" id=\"the-bottom-line\">The Bottom Line<\/h2>\n<p>An embedded PDF viewer is a small application sitting inside your page, with its own script dependency, its own document fetch, its own authentication, and its own failure modes. A check that stops at the page&#8217;s HTTP response covers none of it.<\/p>\n<p>Five things fix it. Watch the document URL with a cheap HTTP check. Load the page in a real browser and assert on something the viewer produced. Add a negative assertion for the known error strings. Cover the authenticated path and the third-party script. Send the alert to the people who publish the documents.<\/p>\n<p>Do that, and the next time a storage policy change blanks out every embedded contract on your site, you&#8217;ll hear about it in minutes instead of from a customer three weeks later.<\/p>\n<section class=\"final-cta\">\n<h2 id='see-what-your-readers-actually-see'  id=\"boomdevs_14\" id=\"see-what-external-checks-catch\">See What Your Readers Actually See<\/h2>\n<p>Dotcom-Monitor runs real-browser checks from a global network, so you find out when an embedded document stops rendering instead of hearing it from a customer. Script the login, assert on what the viewer produced, and route the alert to the team that publishes the file.<\/p>\n<p><a href=\"https:\/\/userauth.dotcom-monitor.com\/Account\/FreeTrialSignUp?SolutionType=Monitoring\">Start a free trial of Dotcom-Monitor<\/a> and get your first embedded document check running today.<\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>A 200 response does not mean your PDF loaded. See how to monitor embedded PDF viewers with scripted checks, content assertions, and smart alerting.<\/p>\n","protected":false},"author":39,"featured_media":34610,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[882],"tags":[],"class_list":["post-34609","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-882"],"_links":{"self":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/posts\/34609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/comments?post=34609"}],"version-history":[{"count":0,"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/posts\/34609\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/media\/34610"}],"wp:attachment":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/media?parent=34609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/categories?post=34609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/wp-json\/wp\/v2\/tags?post=34609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}