Opens in a new tab
  1. Home
  2. Guides
  3. Utilities
Utilities guide

WordPress privacy and third-party requests

Learn how WordPress sites contact third-party services, what information external requests can expose and how to audit, reduce and control fonts, embeds, analytics, APIs and other external dependencies.

  • Updated September 1, 2026
  • 24 min read
  • WordPress guide

WordPress privacy and third-party requests are closely connected because a website does not need to set a tracking cookie before information begins leaving the visitor’s browser.

A seemingly simple WordPress page can load resources from:

  • font providers;
  • analytics platforms;
  • advertising networks;
  • video platforms;
  • social networks;
  • map providers;
  • CDNs;
  • captcha services;
  • live-chat systems;
  • payment providers;
  • Gravatar;
  • external APIs.

Each external request creates another connection between the visitor and infrastructure outside the WordPress website itself.

That connection may expose technical information such as:

IP address
request timestamp
browser information
referrer information
requested resource
connection metadata

and depending on the service, request and visitor state, it may also involve:

  • cookies;
  • local storage;
  • account identifiers;
  • advertising identifiers;
  • analytics identifiers;
  • behavioral data;
  • embedded-content interactions.

This does not mean every third-party request is automatically unlawful, dangerous or invasive.

It means every external dependency should be understood rather than treated as invisible infrastructure.

This guide explains what third-party requests are, how WordPress sites create them, what information can leave the browser, how fonts, embeds, analytics, CDNs and Gravatar fit into the picture, how to audit a WordPress site’s network activity and how to reduce unnecessary external dependencies without pretending that privacy can be solved by installing one more plugin with a green shield icon.

What is a third-party request?

Suppose your website is:

https://example.com/

The browser loads:

https://example.com/style.css

That is a request to the same site infrastructure.

Now suppose the CSS loads a font from another hostname

https://fonts.example-provider.com/font.woff2

The browser now connects to another service.

That is a third-party request in the practical web-privacy sense

Another example:

example.com
↓
loads page
↓
browser requests
www.youtube.com
fonts.googleapis.com
www.google-analytics.com
connect.facebook.net

The visitor is no longer communicating only with example.com

Their browser is establishing network connections to several organizations.

Third party does not necessarily mean another visible company

A resource might be served from:

cdn.example.com

while the underlying CDN infrastructure belongs to another provider.

Technical ownership and legal roles can differ

A CDN may process requests on behalf of the website owner.

An analytics service may process data under a separate contractual relationship.

An embedded social network may determine significant parts of its own processing.

Do not classify privacy obligations from the hostname alone

Architecture tells you:

where the request goes.

Legal analysis needs to determine:

why it goes there,
what data is processed,
under whose instructions,
for what purpose,
and on what legal basis.

This guide focuses on the technical side

It is not legal advice.

Privacy law varies by jurisdiction, implementation and organizational context.

Why a request can matter even without cookies

One of the most persistent misconceptions is:

No cookies
=
no privacy issue.

That is technically incomplete

For a browser to retrieve a resource from a remote server, the server must receive enough information to respond.

At minimum, network communication involves an IP address

Conceptually:

Visitor browser
IP: 203.0.113.25
↓
requests font
↓
external server receives request
↓
external server sends font

The request may also contain HTTP headers

Depending on browser policy and request type, examples may include:

User-Agent

Referer

Accept

Accept-Language

Sec-Fetch-* headers

Cookie

Not every request contains every header

Modern browsers apply increasingly strict privacy and referrer rules.

But the architectural principle remains:

external resource
=
external connection.

This is why WordPress plugin privacy guidance mentions external images

The official WordPress Plugin Handbook privacy guidance explicitly tells plugin developers to consider whether a plugin loads resources such as:

  • third-party JavaScript;
  • tracking pixels;
  • iframes;
  • external images.

An external image can be a network signal

Consider:

<img
    src="https://third-party.example/pixel.gif"
    alt=""
>

The image can be one pixel

It can still generate a request.

That request can reveal that the page was loaded

Depending on implementation, the URL itself might even contain identifiers:

/pixel.gif?visitor=12345

A resource does not need JavaScript to become tracking infrastructure

This is why privacy reviews must inspect network behavior, not merely scan HTML for the word:

cookie

WordPress itself is not the whole website

A stock WordPress installation provides a core platform.

The real site may also include:

WordPress Core
+
theme
+
plugins
+
page builder
+
custom code
+
embedded content
+
external SaaS
+
hosting infrastructure

Any of these layers can generate third-party requests

So asking:

Does WordPress make third-party requests?

is usually less useful than asking:

What third-party requests does
this specific WordPress installation
generate for this specific visitor?

Different users can trigger different requests

An anonymous visitor may load:

  • analytics;
  • fonts;
  • video embeds.

A logged-in administrator may additionally load:

  • plugin update checks;
  • remote dashboard widgets;
  • Gravatar;
  • plugin APIs;
  • license services.

A checkout visitor may trigger another set

For example:

  • payment-provider JavaScript;
  • fraud-detection APIs;
  • address-autocomplete systems.

Privacy audits need multiple page states

Testing only the homepage while logged out provides an incomplete picture.

Common sources of third-party requests in WordPress

Typical categories include:

Web fonts
Analytics
Advertising
Embeds
Maps
Captcha
CDNs
Avatars
Payment services
Chat widgets
Social widgets
External APIs
Remote media

Google Fonts and other remote font providers

A WordPress theme may contain something like:

<link
    rel="stylesheet"
    href="https://fonts.googleapis.com/..."
>

The browser first contacts the stylesheet provider

Then the returned CSS normally references one or more font files.

Conceptually:

example.com
↓
fonts.googleapis.com
↓
font stylesheet
↓
fonts.gstatic.com
↓
font file

This creates external connections before the visitor reads anything

The requests happen because typography has been configured as a remote dependency.

The font itself may be harmless

But its delivery architecture still matters.

You can remove the remote dependency through self-hosting

Instead of:

Visitor
↓
Google font servers

you can use:

Visitor
↓
example.com
↓
local .woff2 file

See Self-hosting Google Fonts in WordPress.

Self-hosting changes the data path

It does not merely change performance.

The external request disappears because the font is now served from infrastructure controlled by or operating for the site.

Remote vs. self-hosted fonts is therefore both a performance and privacy decision

See also CDN vs. self-hosted assets in WordPress.

Do not assume every CDN is equivalent to a public third-party embed

A CDN serving your site’s static assets may operate under your configuration and contractual control.

A social-media iframe provides a very different processing context.

Both create network requests

But their privacy implications can be very different.

Analytics scripts

Analytics is one of the most obvious sources of third-party requests.

A page may load:

<script
    src="https://analytics-provider.example/script.js"
></script>

The script may then generate additional requests

For example:

page loads
↓
analytics JavaScript downloads
↓
script executes
↓
collects page/event data
↓
sends measurement request

One external script can create many downstream requests

This is an important audit principle.

Do not count only:

<script src="...">

elements.

Inspect runtime network activity

A third-party JavaScript library can dynamically:

  • create iframes;
  • load additional scripts;
  • send API requests;
  • store identifiers;
  • read existing browser storage.

This makes JavaScript a particularly powerful third-party dependency

You are not merely downloading a file.

You are executing code in the visitor’s browser.

Advertising and tracking pixels

Advertising systems can involve:

  • JavaScript;
  • pixels;
  • iframes;
  • cookie synchronization;
  • conversion requests;
  • audience identifiers.

These should never be treated as generic presentation assets

The business purpose matters.

An image used as a logo and a tracking pixel can both be IMG requests

But their purposes are entirely different.

Privacy analysis must consider purpose

What does this resource do?

Why is it loaded?

What information does it receive?

What happens after it receives it?

Third-party embeds

WordPress makes embedding external media extremely convenient.

You can paste a supported URL such as a YouTube video into the editor and WordPress can convert it into embedded content.

The official WordPress oEmbed documentation explains that WordPress uses oEmbed providers to retrieve the HTML necessary to represent external media.

Embedded content is not copied into WordPress

In a typical iframe-based embed:

WordPress page
↓
contains iframe
↓
visitor browser loads
external provider

The external service becomes part of the visitor’s page load

This matters for privacy and performance.

See Why Third-Party Embeds Slow Down WordPress.

WordPress’s own suggested privacy-policy text warns about embedded content

Core explains that embedded content from external websites can behave similarly to visiting those websites directly.

That is an important mental model

If you embed:

YouTube
Vimeo
social post
external map

you are not merely showing a screenshot.

You are embedding another application’s content environment

Depending on the service, the provider may be able to:

  • receive visitor connection data;
  • set or read cookies;
  • load additional resources;
  • observe interactions;
  • associate activity with an existing account.

This is why a screenshot is privacy-different from an iframe

Compare:

Local screenshot
↓
served by your site
↓
no live connection
to original platform

with:

Live iframe
↓
loads external platform
↓
active third-party connection

They may look nearly identical to a visitor

The network architecture is completely different.

YouTube privacy-enhanced mode

YouTube offers a privacy-enhanced embedding mode.

The official YouTube embedding documentation uses:

youtube-nocookie.com

for privacy-enhanced embedded players.

This reduces certain personalization behavior

According to YouTube, views through privacy-enhanced mode are not used to personalize the viewer’s YouTube browsing experience, and advertisements shown there are non-personalized.

Privacy-enhanced does not mean no external request

The visitor still connects to YouTube infrastructure.

This distinction is important

privacy-enhanced embed
≠
locally hosted content

Use two-click or consent-gated embeds where appropriate

A common privacy architecture is:

page loads
↓
local placeholder shown
↓
external iframe not loaded
↓
visitor chooses to activate
↓
external resource loads

This prevents the third-party connection from occurring immediately

The exact legal requirements for when and how consent is needed depend on jurisdiction and processing purpose.

Technically, however, deferred loading is very different from cosmetic overlaying

This:

iframe loads
↓
banner covers iframe
↓
user clicks Accept

is not the same as:

iframe absent
↓
user chooses
↓
iframe created

If the external request already happened, the placeholder came too late

A consent interface should control resource loading, not merely cover content after it has been loaded.

WordPress oEmbed discovery

WordPress supports oEmbed providers and discovery mechanisms for supported content.

The provider architecture makes publishing convenient.

But convenience does not remove the need to review frontend behavior

A content editor may paste:

https://external-platform.example/post/123

without realizing that the resulting embed introduces:

  • remote JavaScript;
  • remote fonts;
  • iframes;
  • tracking endpoints.

Content governance therefore matters

Privacy is not purely a plugin configuration problem.

Editors can add third-party dependencies through content.

Disabling oEmbed can reduce automatic embedding behavior

If a project does not need it, see How to Disable oEmbed in WordPress.

Do not disable it only because the word privacy appeared in a meeting

Determine what functionality the website actually uses.

Gravatar

WordPress traditionally integrates with Gravatar for user avatars.

A page can therefore render remote avatar URLs associated with email-derived identifiers.

The visible result is simple

small profile picture

The architecture can be less simple

WordPress knows user email
↓
creates Gravatar identifier
↓
page contains Gravatar URL
↓
visitor browser loads avatar
from external infrastructure

The email address is not normally transmitted in plaintext in that avatar URL

WordPress historically derives a hash-like identifier from the normalized email address.

But hashing does not make the underlying privacy question disappear

Email addresses can have a relatively searchable domain compared with random secrets, and public avatar identifiers can create linkability concerns depending on usage.

See How Gravatar exposes WordPress user emails for the dedicated analysis.

Remote avatars also create frontend requests

Even if you are not concerned about recovering the original identifier, loading an external image still creates:

visitor
↓
Gravatar infrastructure

Local avatars change that path

With local profile images:

visitor
↓
your WordPress media infrastructure

Maps

Interactive maps are another common source of external requests.

A typical map can load

  • JavaScript SDKs;
  • map tiles;
  • geocoding services;
  • fonts;
  • API endpoints.

A static map image can be much simpler

Depending on the requirement:

interactive map
→ many requests + JavaScript

static image
→ one controlled resource

plain address/link
→ potentially zero third-party
  requests until user clicks

Use the least complex solution that meets the user need

If the page only needs to communicate:

We are located at this address.

an entire interactive mapping application may be excessive.

Captcha and anti-abuse systems

CAPTCHA services are commonly loaded on:

  • contact forms;
  • registration forms;
  • login pages;
  • checkout.

They are security tools

But they can also introduce third-party JavaScript and network requests.

Privacy and security can involve tradeoffs

A third-party anti-bot system may reduce fraud and abuse while introducing external processing.

The correct decision is not

privacy good
security bad

or:

security good
privacy irrelevant.

Evaluate both

Questions include:

  • Is the service necessary?
  • What data does it receive?
  • Can it be delayed until needed?
  • Is there a more privacy-preserving alternative?
  • What contractual and legal safeguards exist?

Payment providers

Payment services often require third-party communication.

For example:

checkout page
↓
payment SDK
↓
provider tokenization
↓
payment infrastructure

This can be intentional and necessary functionality

Privacy engineering is not about eliminating every external service.

It is about reducing unnecessary processing and understanding necessary processing

A payment gateway handling card data can be a far better security architecture than storing payment-card information directly inside WordPress.

Third-party does not automatically mean worse

Sometimes external specialization improves:

  • security;
  • availability;
  • compliance;
  • fraud prevention.

But it must still be documented and configured properly

Chat widgets

Live chat commonly loads a substantial third-party application into the page.

It may involve:

  • JavaScript;
  • persistent connections;
  • cookies;
  • visitor identifiers;
  • conversation history;
  • user-account data.

Loading chat globally may be unnecessary

Ask whether it needs to appear on:

every article
every login page
every checkout page
every legal page

Conditional loading reduces exposure and performance cost

For example:

support page
→ load chat

blog archive
→ no chat

Social widgets

Social sharing and follow widgets can load:

  • remote scripts;
  • icons;
  • iframes;
  • tracking infrastructure.

A simple hyperlink often accomplishes the real goal

Compare:

<a href="https://social.example/company">
    Follow us
</a>

with:

500 KB social SDK
+
tracking
+
iframe
+
network requests

If the goal is merely navigation

a normal link is often enough.

The third-party request then happens only after the user intentionally leaves the site

Content delivery networks

CDNs require more nuanced analysis.

Suppose your images are served from

cdn.example.com

through a CDN provider.

The visitor’s request still reaches CDN infrastructure

But the CDN may be operating as part of your delivery chain rather than as an independent embedded application.

Privacy questions still exist

Such as:

  • logging;
  • data location;
  • retention;
  • processor terms;
  • security;
  • subprocessors.

But do not place a CDN, YouTube iframe and advertising pixel into one conceptual bucket

They are all external connections.

The purposes and processing contexts are very different.

Server-side requests vs. browser-side requests

This distinction is extremely important.

A browser-side request looks like

Visitor browser
↓
third-party.example

A server-side request looks like

Visitor
↓
WordPress server
↓
third-party.example

The third party sees different network information

In the second model, the remote API may see:

WordPress server IP

rather than:

visitor IP

But WordPress may still send personal data in the request payload

For example:

{
    "email": "customer@example.com",
    "order_id": 1234
}

Server-side proxying is not automatically private

It changes what the remote party receives directly from the browser.

It does not make intentionally transmitted application data disappear.

A privacy audit therefore needs both sides

BROWSER NETWORK REQUESTS

and

SERVER-SIDE HTTP REQUESTS

Browser DevTools reveals only the first category

A plugin might call:

wp_remote_post()

to send data from the server.

The browser may show no corresponding external request

Yet data still leaves the WordPress installation.

WordPress HTTP API

Plugins commonly communicate with external APIs through functions such as:

wp_remote_get()
wp_remote_post()
wp_remote_request()

Common legitimate uses include

  • license checks;
  • software updates;
  • payment APIs;
  • shipping APIs;
  • AI APIs;
  • security feeds;
  • currency data.

The important question is what gets transmitted

For example:

Plugin version
Site URL
License key

has different privacy implications from:

User email
Full IP address
Form submission
Order details

Audit the request payload

Do not evaluate external APIs merely from the name of the provider.

Plugin telemetry

Telemetry can include:

  • active plugin version;
  • WordPress version;
  • PHP version;
  • feature usage;
  • site identifiers;
  • environment information.

Some telemetry is useful for software development

It can reveal:

  • which features are used;
  • which PHP versions need support;
  • where errors occur.

But telemetry should not be invisible

WordPress plugin privacy guidance specifically asks developers to disclose whether their plugins collect telemetry directly or indirectly.

Opt-in is often preferable for non-essential telemetry

The exact policy depends on context and applicable law.

Do not make telemetry operationally indistinguishable from a required update check

These purposes are different:

Check whether security update exists
≠
collect detailed usage analytics

Remote license validation

Premium WordPress software may need to contact a license server.

A license request might send

license key
site URL
plugin version
installation identifier

The request may be functionally necessary for licensed updates

But it should still be documented.

Minimize the request payload

If the license server needs:

site URL
+
license key

there may be no reason to additionally send:

administrator email
site visitors
full plugin list
database contents

Data minimization is an engineering principle too

Before transmitting a field, ask:

Does the remote service
actually require this?

Privacy-friendly architecture often begins with fewer dependencies

Compare two sites.

Site A

local CSS
local fonts
local images
no social widgets
deferred video embeds
minimal analytics

Site B

remote CSS framework
Google Fonts
social SDK
three analytics systems
heatmap
live chat
YouTube
map embed
ad pixel
remote icon library

Site B has a larger privacy surface before anyone submits a form

It also has a larger:

  • performance surface;
  • security surface;
  • availability surface.

Privacy and performance often point in the same direction

Reducing third-party requests can improve:

  • page speed;
  • DNS overhead;
  • TLS connection overhead;
  • resilience;
  • privacy;
  • auditability.

Fewer external dependencies mean fewer organizations involved in a page load

That does not mean:

zero external services
at all costs.

It means avoiding dependencies whose value does not justify their cost.

First-party does not automatically mean private

This is another important misconception.

A website can collect extensive personal data entirely through:

example.com

For example

local analytics endpoint
↓
captures every click
↓
stores visitor profiles
for five years

No external request occurs

But substantial processing still occurs.

Third-party auditing is one part of privacy engineering

It does not replace reviewing:

  • what WordPress stores;
  • cookies;
  • forms;
  • user accounts;
  • logs;
  • retention;
  • exports;
  • deletion workflows.

Conversely, third-party requests can matter even when little is stored locally

A site may have:

empty local database

while loading multiple remote tracking systems.

Local storage is not the only place privacy-relevant processing occurs

WordPress privacy tools

WordPress includes administrative privacy functionality intended to help site owners manage personal-data workflows.

Core provides tools around

  • privacy-policy guidance;
  • personal-data export;
  • personal-data erasure.

Plugins can integrate with these systems

The official WordPress Plugin Handbook privacy documentation describes APIs plugin developers can use to:

  • suggest privacy-policy content;
  • register data exporters;
  • register data erasers.

These tools do not magically discover every third-party request

They solve a different part of the problem.

A privacy-policy generator cannot inspect every remote API automatically

The site owner and plugin developers still need to understand their architecture.

Privacy policy text is not a technical control

This deserves emphasis.

Writing:

We respect your privacy.

does not alter the browser network graph.

If a script loads before consent, the privacy policy cannot retroactively unload it

Documentation and implementation must agree.

Consent management

Where consent is the applicable legal basis, consent management must control the relevant processing.

Technically, this often means preventing a resource from loading

Before consent:

analytics script
→ not loaded

marketing pixel
→ not loaded

non-essential iframe
→ placeholder only

After consent

resource activated
↓
external connection begins

A banner alone is not consent enforcement

Bad architecture:

page loads
↓
analytics already fires
↓
video already loads
↓
tracking pixel already fires
↓
banner appears:
"Accept?"

The decision arrived after the processing

If consent is required for those resources, execution needs to be gated correctly.

Do not block technically necessary resources casually

Some external calls may be necessary for:

  • security;
  • payment;
  • authentication;
  • fraud prevention;
  • requested functionality.

Consent categories should follow actual purposes

Not every script should be labeled:

Necessary

because the developer would prefer not to implement conditional loading.

Audit what the code actually does

How to audit third-party requests in WordPress

The most useful starting point is the browser’s developer tools.

Step 1: open a private browser session

This avoids:

  • administrator cookies;
  • browser extensions affecting the page;
  • cached consent state;
  • logged-in differences.

Step 2: open Developer Tools

Go to:

Network

Step 3: disable cache during the test

Otherwise some resources may not appear because the browser already has them locally.

Step 4: reload the page

Now inspect every request.

Group by domain

You may see something like:

example.com
cdn.example.com
fonts.gstatic.com
youtube.com
analytics.example
gravatar.com

Step 5: distinguish your controlled infrastructure from external services

Create a simple inventory:

Domain
Purpose
Source
Necessary?
Loads before consent?
Data sent?
Owner/provider?

Example

fonts.example
Font delivery
Theme
No
Yes
Connection metadata
External provider

Step 6: inspect initiators

Developer Tools can often reveal which:

  • script;
  • stylesheet;
  • iframe;
  • HTML element;

triggered a request.

This helps identify the WordPress source

For example:

fonts.googleapis.com
↓
initiator:
theme-style.css

suggests the theme is responsible.

Another example

analytics-provider.example
↓
initiator:
plugin-analytics.js

Step 7: inspect request and response headers

Look for:

  • cookies;
  • referrer;
  • query parameters;
  • custom identifiers;
  • cache behavior.

Step 8: inspect storage

Developer Tools normally provides views for:

  • cookies;
  • local storage;
  • session storage;
  • IndexedDB.

A request audit and storage audit complement each other

A provider can receive data without storing a browser cookie.

A script can also store browser data after it loads.

Step 9: test before consent

Clear:

  • cookies;
  • storage;
  • consent state.

Reload without accepting anything

Record what already loads.

Step 10: accept one consent category

Compare the network log.

Step 11: reject optional categories

Confirm the resources remain blocked.

Do not merely trust the banner UI

Network activity is the evidence.

Step 12: test multiple pages

At minimum consider:

  • homepage;
  • article;
  • contact page;
  • login page;
  • checkout;
  • account area.

Different templates load different resources

Step 13: test interactive events

Some resources load only after:

  • scrolling;
  • opening chat;
  • playing a video;
  • submitting a form;
  • opening checkout.

A page-load-only audit can miss them

Step 14: audit logged-in WordPress

Administrator screens may use external services that anonymous visitors never see.

Examples include

  • remote plugin dashboards;
  • license APIs;
  • AI services;
  • external fonts;
  • Gravatar.

Administrator privacy still matters

A request does not stop being data processing because the user has the Administrator role.

Step 15: audit server-side requests

Browser DevTools cannot reveal these automatically.

Review:

  • plugin documentation;
  • source code;
  • HTTP API hooks;
  • application logs;
  • provider dashboards.

Search plugin code for HTTP calls

Useful strings include:

wp_remote_get(
wp_remote_post(
wp_remote_request(
Requests::request(
curl_
file_get_contents( 'https://

This is not complete detection

Libraries may abstract the request.

But it is a useful starting point.

Step 16: audit embeds stored in content

Search posts and pages for:

  • YouTube;
  • Vimeo;
  • maps;
  • social posts;
  • external iframes.

Editors can create privacy dependencies without installing plugins

Step 17: audit the theme

Look for remote:

  • fonts;
  • icon libraries;
  • JavaScript CDNs;
  • background images;
  • CSS frameworks.

Step 18: document the result

A useful third-party inventory might contain:

Provider:
YouTube

Resource:
Embedded video

Pages:
Product tutorial pages

Load timing:
After user activation

Data:
Network/request metadata;
provider-specific data

Reason:
User-requested video playback

This inventory becomes operational documentation

It can support:

  • privacy-policy maintenance;
  • consent configuration;
  • vendor reviews;
  • security reviews;
  • site migrations.

Privacy audits should be repeated

A WordPress site changes whenever somebody:

  • installs a plugin;
  • changes theme;
  • adds a marketing tool;
  • pastes an embed;
  • switches CDN;
  • adds chat;
  • changes analytics.

A clean audit today does not guarantee a clean architecture next month

Performance tools can help find privacy dependencies

Tools that report:

  • request domains;
  • third-party JavaScript;
  • connection counts;
  • resource waterfalls;

can also reveal privacy-relevant dependencies.

This overlap is useful

A waterfall showing:

14 different external domains

is simultaneously:

  • a performance clue;
  • a resilience clue;
  • a privacy clue.

How to reduce third-party requests

1. Remove services nobody uses

Old tracking scripts frequently survive long after campaigns end.

Common leftovers include

  • retired analytics;
  • old advertising pixels;
  • abandoned chat widgets;
  • A/B testing systems;
  • marketing automation.

The best privacy configuration for an unnecessary service is deletion

No consent framework is more efficient than:

resource does not exist.

2. Self-host static assets where appropriate

Good candidates can include:

  • fonts;
  • icons;
  • small JavaScript libraries;
  • CSS frameworks.

But self-hosting has maintenance responsibility

You now manage:

  • updates;
  • security patches;
  • cache headers;
  • file integrity.

Do not copy a library locally and forget it forever

Privacy improvements should not create abandoned vulnerable dependencies.

3. Replace widgets with links

Instead of:

live social feed

consider:

Follow us on Platform

as a normal hyperlink.

4. Replace live embeds with local previews

For video:

thumbnail
+
play button
+
user activation
+
external embed

5. Load services only where they are needed

Example:

maps
→ contact page only

payment SDK
→ checkout only

chat
→ support pages only

6. Load optional services only after the correct trigger

This may be:

  • user consent;
  • user click;
  • opening a specific widget.

7. Use server-side integrations where appropriate

This can reduce direct browser exposure.

But inspect the server-side payload

Otherwise you merely moved the request somewhere less visible.

8. Use local avatars

If Gravatar is unnecessary, local profile images can remove that remote asset path.

9. Disable unused embed functionality

See How to Disable oEmbed in WordPress.

10. Audit plugin settings

Plugins may provide optional toggles for:

  • telemetry;
  • remote fonts;
  • CDN libraries;
  • marketing scripts;
  • external avatars.

11. Prefer locally bundled frontend assets

A plugin requiring a 30 KB JavaScript library usually does not need to fetch it from a public CDN merely because copying a CDN URL was convenient during development.

12. Remove unused WordPress assets where appropriate

For example, if a site does not use embedding functionality, reducing related scripts can improve both the request graph and page weight.

Do not disable functionality blindly

Audit first.

Privacy-friendly does not mean breaking the site elegantly

What about WordPress emojis?

Modern WordPress versions have evolved their emoji implementation over time.

Before disabling anything for privacy reasons, inspect what your current WordPress version actually loads.

Do not rely on a 2017 performance tutorial as an infrastructure map for 2026

Core changes.

Plugins change.

Browsers change.

Always audit the current page

Remote JavaScript deserves special scrutiny

Compare a remote image:

browser downloads bytes

with remote JavaScript:

browser downloads bytes
↓
executes code
↓
code can make more requests
↓
code can inspect page/browser state

This gives remote JavaScript significantly more capability

Questions to ask include:

  • Who operates it?
  • Can it change without your deployment?
  • What does it execute?
  • What additional hosts does it contact?
  • Does it read cookies or storage?

Third-party JavaScript is also a supply-chain risk

If:

https://third-party.example/widget.js

changes tomorrow, your page can execute different code tomorrow without a WordPress deployment.

Privacy, security and operational control intersect here

Subresource Integrity can help in some static-library cases

For immutable external scripts, browsers support:

integrity=

attributes that can verify a known resource hash.

But SRI is not a privacy mechanism

The browser still contacts the external host.

It protects integrity, not network disclosure

Referrer Policy can reduce information leakage

Browsers can include a:

Referer

header when requesting or navigating to external resources.

A site’s Referrer-Policy can restrict what is transmitted

For example, policies can reduce exposure of full paths to other origins.

This is useful defense in depth

But it does not eliminate:

IP address
connection itself
explicit query parameters
cookies sent to that domain

Use privacy controls for the problem they actually solve

Content Security Policy can help inventory and control connections

A Content Security Policy can define allowed sources for:

  • scripts;
  • styles;
  • fonts;
  • images;
  • frames;
  • connections.

For example

script-src 'self';

font-src 'self';

frame-src https://www.youtube-nocookie.com;

A strict CSP can block unexpected third-party resources

That provides both:

  • security benefits;
  • architectural visibility.

But CSP is not a privacy policy

It enforces browser resource restrictions.

It does not determine:

  • legal basis;
  • retention;
  • processor agreements;
  • user rights.

Use it as technical enforcement

Server logs are another privacy surface

Even a website with no analytics often has:

web server access logs

Those logs commonly contain

  • IP addresses;
  • timestamps;
  • requested URLs;
  • status codes;
  • user agents;
  • referrers.

Removing Google Analytics does not eliminate all data processing

Infrastructure still exists.

Privacy engineering needs the whole system

browser
+
WordPress
+
database
+
logs
+
CDN
+
third-party APIs
+
backups

Backups matter too

When personal data is deleted from the live database, historical backups may still contain previous copies.

This is not specifically a third-party-request problem

But backup vendors can also become external processors if backups are stored remotely.

Document retention and restoration procedures

A restored old backup can reintroduce data previously removed from production.

External AI APIs

Modern WordPress sites increasingly connect to AI services for:

  • alt-text generation;
  • content generation;
  • SEO suggestions;
  • translation;
  • support chat.

This creates a new class of server-side third-party request

For example:

WordPress
↓
image uploaded
↓
image or metadata sent
to AI provider
↓
generated result returned

Inspect exactly what is transmitted

Possible data can include:

  • image bytes;
  • page content;
  • titles;
  • user-entered text;
  • site metadata.

Do not send entire database records when the model needs one sentence

Minimize context to what the operation actually requires.

API keys are also sensitive

They should remain server-side whenever possible.

Do not expose secret API keys in frontend JavaScript

That is simultaneously:

  • a security issue;
  • a billing issue;
  • an excellent gift to strangers.

WordPress privacy and plugin design

A well-designed plugin should be able to answer:

Does it contact external servers?

When?

Why?

What does it send?

Can the feature be disabled?

Does it load remote frontend resources?

Developers should document this clearly

WordPress provides:

wp_add_privacy_policy_content()

so plugins can suggest relevant information for the site’s privacy policy.

This is useful when a plugin processes personal data

Especially when it:

  • shares data externally;
  • collects telemetry;
  • stores user information;
  • uses third-party SDKs.

Documentation should reflect optional features

If a plugin contacts an external API only when:

AI feature enabled

say that.

Do not describe conditional processing as universal

And do not describe always-on processing as optional.

How to evaluate a WordPress plugin for third-party requests

Check its privacy documentation

Look for:

  • external APIs;
  • telemetry;
  • remote assets;
  • data retention.

Install it on a test site

Compare network activity:

before activation

vs.

after activation

Enable features one at a time

This helps identify which component introduces a request.

Inspect source code

Search for:

http://
https://
wp_remote_
iframe
script src
link href

Inspect scheduled tasks

Some telemetry or API communication may run through:

WP-Cron

rather than visitor requests.

Inspect admin-only behavior

Plugins sometimes load marketing dashboards or remote news feeds only in:

wp-admin

Ask whether external access is functionally necessary

A syntax-highlighting library probably does not need to phone home.

Third-party request risk matrix

LOWER COMPLEXITY

Local static asset
↓
your infrastructure


MODERATE

CDN serving your assets
↓
external infrastructure
under delivery relationship


HIGHER INTERACTION

Remote font / image
↓
external connection


MORE CAPABILITY

Third-party JavaScript
↓
external executable code


EMBEDDED APPLICATION

iframe / social embed / map
↓
external service inside page


ACTIVE DATA EXCHANGE

Analytics / ads / chat / API
↓
purposeful data transfer

This is not a legal classification

It is an engineering model for understanding increasing external involvement.

A WordPress third-party request checklist

  • Open the site in a private browser window.
  • Inspect the Network panel with cache disabled.
  • List every hostname contacted.
  • Identify the organization behind each hostname.
  • Identify what WordPress component initiated each request.
  • Separate theme requests from plugin requests.
  • Audit content embeds.
  • Audit remote fonts.
  • Audit analytics.
  • Audit advertising scripts.
  • Audit maps.
  • Audit CAPTCHA.
  • Audit chat systems.
  • Audit social widgets.
  • Audit Gravatar usage.
  • Audit payment integrations.
  • Audit CDN configuration.
  • Inspect cookies and browser storage.
  • Inspect request query strings.
  • Inspect referrer behavior.
  • Test the site before consent.
  • Test after accepting individual consent categories.
  • Test rejection of optional categories.
  • Verify blocked resources genuinely remain unloaded.
  • Test multiple page templates.
  • Test interactive widgets.
  • Test the login page.
  • Test checkout where applicable.
  • Audit logged-in wp-admin.
  • Audit server-side HTTP requests.
  • Review plugin telemetry.
  • Review remote license validation.
  • Review external AI integrations.
  • Remove services that are no longer needed.
  • Self-host appropriate static assets.
  • Replace widgets with simple links when possible.
  • Use consent-gated embeds where appropriate.
  • Load services only on pages that require them.
  • Maintain an external-service inventory.
  • Update privacy documentation when the stack changes.

A third-party request decision tree

Page contacts external domain
│
├── Why?
│
├── Is it necessary?
│   │
│   ├── No
│   │   └── Remove it
│   │
│   └── Yes
│       │
│       └── Can it be
│           self-hosted?
│           │
│           ├── Yes
│           │   └── Evaluate
│           │       local hosting
│           │
│           └── No
│               │
│               └── Can loading
│                   be deferred?
│                   │
│                   ├── Yes
│                   │   └── Load
│                   │       when needed
│                   │
│                   └── No
│                       └── Document,
│                           secure and
│                           minimize

A consent-loading decision tree

Optional third-party service
│
└── Is consent required
    for this implementation?
    │
    ├── Yes
    │   │
    │   ├── Before consent
    │   │   └── resource NOT loaded
    │   │
    │   └── After consent
    │       └── resource loaded
    │
    └── No
        └── Document appropriate
            processing basis
            and implementation

A browser vs. server decision tree

External service used?
│
├── Browser connects directly?
│   │
│   └── Inspect:
│       IP exposure
│       headers
│       cookies
│       storage
│       JavaScript
│
└── WordPress server connects?
    │
    └── Inspect:
        request payload
        identifiers
        retention
        API purpose

Common WordPress privacy mistakes

Looking only for cookies

External requests can matter even without cookies.

Assuming every third-party request is tracking

A CDN or payment gateway may serve a different purpose from an advertising pixel.

Assuming every first-party request is private

First-party analytics can still process extensive personal data.

Loading optional trackers before consent

A banner cannot reverse a request that already occurred.

Covering an already-loaded iframe with a consent placeholder

The external connection has already happened.

Assuming youtube-nocookie.com means YouTube is no longer contacted

Privacy-enhanced mode still uses YouTube infrastructure.

Ignoring Gravatar

An innocent-looking avatar can introduce an external resource request.

Ignoring remote fonts

Typography is still network infrastructure.

Ignoring admin pages

WordPress administrators are users too.

Auditing only the homepage

Checkout, login, forms and article embeds may use completely different services.

Auditing only browser traffic

Server-side API requests are invisible in DevTools.

Installing a consent plugin and assuming the job is finished

The configuration still has to map correctly to actual resources.

Keeping retired marketing scripts forever

Unused third-party dependencies have approximately zero upside.

Self-hosting obsolete libraries and never updating them

Privacy improvements should not produce security regressions.

Calling every third-party resource necessary

Business convenience and technical necessity are not identical concepts.

Sending excessive data to external APIs

Only transmit what the service genuinely needs.

Publishing a privacy policy that does not match the implementation

Documentation cannot compensate for inaccurate technical behavior.

Quick reference: common third-party request sources

Google Fonts
→ remote font delivery

YouTube / Vimeo
→ embedded video

Maps
→ map SDK + tiles

Gravatar
→ remote avatars

Analytics
→ measurement

Ad pixels
→ advertising / conversion

Social widgets
→ platform integration

Chat
→ real-time support

CAPTCHA
→ abuse prevention

Payment gateway
→ payment processing

CDN
→ asset delivery

License server
→ software entitlement

AI API
→ generated or analyzed content

Quick reference: alternatives

Remote font
→ self-host font

Live social widget
→ normal link

Immediate video iframe
→ local preview + click

Interactive map
→ static map / address link

Remote avatar
→ local avatar

Global script
→ page-specific loading

Optional tracking
→ consent-gated loading

Unused service
→ delete it

Related WordPress privacy, embeds and asset guides

For the wider privacy, external-resource and performance cluster, continue with:

Final thoughts

WordPress privacy is not limited to:

cookies
+
privacy policy
+
consent banner

A modern WordPress page is a network application.

The browser may communicate with several services before the visitor clicks anything.

Understanding privacy therefore starts with understanding the data path:

Visitor
↓
WordPress
↓
Which other systems
receive a request?

For every third-party dependency, ask:

Why is it here?

What does it receive?

Does it need to load now?

Can it be removed?

Can it be self-hosted?

Can it be delayed?

Is the processing documented?

The goal is not necessarily to create a WordPress site that never communicates with anything outside its own server.

That can be unrealistic for payments, security, video, transactional services and many other legitimate features.

The goal is to make every external connection intentional.

A privacy-conscious architecture usually moves from:

Install service
↓
load everywhere
↓
wonder what it does later

to:

Define requirement
↓
choose provider
↓
minimize data
↓
control loading
↓
document processing
↓
audit periodically

That approach also tends to produce faster, more secure and easier-to-maintain WordPress sites.

Which is convenient, because removing six marketing scripts nobody remembers installing is one of the rare situations where privacy, security, performance and basic housekeeping all manage to agree on something.

Simplify your WordPress stack

A modular WordPress toolkit. 104 focused tools.

Ultimately, you can build cleaner workflows, maintain fewer plugins and enable only the features each website actually needs.