← Back to Blog
Checklist

Firebase Dynamic Links, One Year Later: Find the Links That Are Still Returning 404

August 25 marks one year since every FDL link went dark. Most teams fixed the obvious ones in 2025. This is the audit for the surfaces everyone forgets — and the reason printed QR codes need a different fix than a new URL.

August 14, 20269 min read

One year of clicks going nowhere

On August 25, 2025, Firebase Dynamic Links shut down for good. Every FDL link — the .page.link short links and the links on custom FDL domains — stopped resolving and started returning 404. According to the Firebase FAQ, the shutdown also closed the window on analytics: any click data you did not export before that date is gone.

That was a year ago. Most teams handled the obvious part of the migration in 2025 — the links in active campaigns, the ones in the deploy pipeline, the ones somebody actually remembered. But an FDL link does not need to live in your codebase to keep receiving clicks. It just needs to exist somewhere a person can find it.

Every one of those clicks is someone who wanted your app and got an error page instead. There is no alert for this. The traffic does not show up in your analytics, because the link that received it is not yours anymore. The only way to see the damage is to go looking for it. That is what this checklist is for.

The audit at a glance

Still returning 404
  • Email templates404
  • Printed QR codes404
  • Store listing404
  • Social bios404
  • Help center docs404
  • PDF brochures404
Migrated
  • Website buttons301
  • Newsletter footer301
  • Active campaigns301
Six surfaces where dead FDL links typically survive a migration, next to the migrated state: links whose destination you can still edit.

The audit: ten surfaces everyone forgets

Work through the list in order. For each surface the goal is the same: find every URL containing page.link or your old FDL domain, then replace it or retire it.

01

Old marketing emails still circulating

You cannot recall a sent email; forwarded and bookmarked copies keep producing clicks. What you can fix is the template library. Search your email platform for page.link across templates, automation flows, and drafts. Welcome sequences are the usual offender — set up once, sending the same links ever since.

02

Printed QR codes on packaging and posters

The worst case, because paper cannot be patched. Collect one sample of every printed piece that carries a QR code — packaging, posters, table tents, event banners — and scan each one. Anything that resolves to an FDL link needs a reprint, and a different strategy this time. More on that below.

03

Social media bios

Instagram, TikTok, X, and the YouTube channel About page each hold exactly one precious link, and nobody remembers who set it. Check every profile your brand operates, including regional and sub-brand accounts.

04

App Store and Google Play listings

Description text, promotional text, screenshot captions, and the marketing URL on the listing. A dead link here sits in front of your highest-intent audience — people already on the store page.

05

Support docs and help centers

Grep the knowledge base. If your help center has an export or an API, search the dump for page.link; otherwise use its admin search. Articles explaining how to install the app are the prime suspects.

06

PDF brochures and sales decks

Search shared drives for PDFs and presentations, then search inside the files. Sales teams forward old decks for years; the file does not know its links died.

07

Email signatures

Company-wide signature templates often carry an app download link. One template fix covers the whole team going forward — the emails already sent keep the dead link forever.

08

YouTube video descriptions

Descriptions stay editable after upload, which makes this one of the cheapest fixes on the list. Sort your channel by views and work downward.

09

Old blog posts and guest articles

For your own CMS, grep the database or a content export. For guest posts and press coverage, run site: searches combined with "page.link" to find mentions you do not control, then email the publishers. Expect a reply rate well under half. Send anyway.

10

Push notification deep links stored server-side

If your backend stores deep link URLs — in notification templates, campaign configs, or user records — query for the old domain. These fail silently in production every time a stored link is sent.

Triage: what to fix first

You will not clear all ten surfaces in one afternoon. Order matters more than speed.

  1. 1

    Always-on, high-intent surfaces first

    Store listings and social bios sit in front of people actively deciding to install. Fix these the same day you find them.

  2. 2

    Anything that is still sending

    Active email automations and server-side push templates create new dead clicks every hour. Stop the bleeding before doing archaeology.

  3. 3

    Printed material: change the strategy, not just the URL

    A reprint that carries another fixed URL recreates the same trap. Reprint with a QR code that encodes a link you can re-point later, so the next shutdown, rebrand, or campaign change is an edit — not another print run.

  4. 4

    The long tail, on a schedule

    Guest posts, old videos, forgotten PDFs. Batch these into a recurring monthly task instead of letting them block the urgent fixes.

The lesson: never distribute a URL you cannot re-point

The FDL shutdown was announced years in advance, and it still stranded links on packaging and in bios worldwide. The underlying mistake was not choosing Firebase. It was printing and widely distributing URLs whose destination someone else controlled and whose behavior could not be changed after the fact.

The durable fix is to own the layer you distribute. A dynamic QR code encodes your link, not the destination — the code on the box stays valid while you edit where it points. In Appy, every QR code works this way: download it as SVG or PNG, print it, and change the destination later from the dashboard. Device routing to the App Store, Google Play, and Huawei AppGallery works on every plan, redirects are unlimited including on Free, and click analytics — OS, country, time series — come with 90 days of retention on the Free plan.

To be clear about the tradeoff: a link on appy.to also lives on infrastructure you do not run. No provider can honestly promise forever. What you can insist on is that destinations stay editable, that your analytics are exportable, and that the printed artifact carries a code whose meaning you control. That combination turns the next shutdown from a reprint into a settings change.

Two free tools that help with the audit:QR code generatorUniversal link validator

If you still have FDL links in code

Shipped app versions are the one surface you cannot edit. If old releases construct or open FDL URLs — share flows, referral links, invite screens — those calls now fail at the network level. In versions you can still update, intercept the old domain before the request goes out and route to your new link or an in-app fallback.

For versions you cannot update, move the fix server-side where possible: rewrite stored push payloads, return new URLs from your API, and watch error reporting for unhandled failures in old share paths. This will not catch everything. It catches the traffic you still control.

Frequently asked questions

Can old Firebase Dynamic Links be revived?

No. The page.link domain belongs to Google and the service behind it is gone, so those links will keep failing permanently. If you used a custom FDL domain that you own, you can point that domain at your own redirect layer and rebuild the most important paths by hand — but the FDL service itself cannot be restored.

Can I still recover my Dynamic Links analytics?

No. Firebase’s export window closed with the shutdown on August 25, 2025, per the Firebase FAQ. Click data that was not exported before then is not recoverable. The practical takeaway for any provider: export analytics on a schedule, not only at migration time.

What about FDL links inside app versions already shipped?

You cannot change a shipped binary, so handle it at runtime where you can: intercept the old domain in updatable versions and apply fallback routing, and rewrite server-delivered URLs — push payloads, API responses — so old clients receive working links.

How do I prevent this with any link provider?

Own the printed layer. Distribute QR codes and short links whose destination you can edit after the fact, keep a searchable inventory of everywhere your links appear, and export your analytics regularly. Then a provider shutdown becomes a redirect change instead of a reprint.

Continue exploring

Comparison
Aug 13, 2026
9 min read

AppsFlyer’s Free Plan Just Shrank: What Moved to Paid, and What Your Options Are

As of August 13, 2026, deferred deep linking, branded domains, Smart Banners, bulk links, and API access sit outside AppsFlyer's free Zero plan. What changed, what it costs to replace, and a migration path that takes an afternoon.

appsflyer alternative
onelink
smart links
pricing
Read article
Data
Aug 14, 2026
11 min read

QR Code Statistics 2026: The Numbers That Actually Matter

A sourced roundup of QR code usage, market size, payment volume, and scan behavior in 2026 — every figure with a named source, plus the honest read on what each one means for app teams.

qr code statistics
qr code trends
dynamic qr codes
ctv qr
Read article
Guide
Aug 13, 2026
9 min read

One Link for the App Store, Google Play, and Huawei AppGallery

A Google Play link is a dead end on a Huawei phone. Learn how one smart link routes every Android visitor to a store that actually exists on their device.

huawei appgallery
smart links
app store
google play
Read article

Looking for something else? Browse all topics on the blog.

Repoint once, never reprint

Create smart links and dynamic QR codes whose destinations stay editable after printing — with unlimited redirects on the Free plan.

Create a free link