Content audit and refresh desk for your marketing site
Pull every page on your site into one ranked table, see what is thin or broken, and hand your team a ready-to-edit draft without anything going live.
Build me a content audit and refresh desk for our marketing site. I open it at the start of every content sprint, type in a domain or a section path, and work through one ranked table of every page until I have decided what to refresh, what to leave, and what to retire. It is used by our content lead and a couple of writers, and it needs to remember what we decided last quarter.
The main screen has a URL input and a Run audit button. When I run it, a handler calls Firecrawl Map Website URLs on what I typed to discover every page under that domain or section, then uses Firecrawl Crawl Website to pull each page down as markdown along with its page title, meta description, outbound links, and any published or modified date in the page metadata. For a re-check of a single page, use Firecrawl Scrape URL rather than a whole crawl. Show live progress while the run is going, since a big site takes a while.
The result is one sortable table with a row per page. Columns: URL, section (derived from the first path segment), word count, page title, meta description, last updated, number of links on the page that failed to load, and a status column for whether we have already actioned this page. Flag a title or meta description as missing when it is absent and as duplicated when the exact same string appears on another page in the run, and show which other pages it collides with. Compute an issue score so the table can be ranked worst first by default, weighting missing or duplicated titles and descriptions, thin word counts, staleness, and failed links. I need to filter by section and to hide pages already marked handled.
Failed links are found by taking the outbound links on a page and running Firecrawl Scrape URL against each one, treating a Firecrawl failure such as a missing page, an unreachable host, or a timeout as a failure. Always surface the actual failure reason in the interface rather than presenting a flat broken verdict, because this is a signal to go check something, not a link checker. Cap how many links get checked per page and de-duplicate repeated links across pages so a shared footer link is only tested once per run.
Clicking a row opens a detail panel with the page copy on one side and its issues on the other: the current title and meta description, the word count against our thin-page threshold, the duplicate collisions, the last updated date, and each failing link with its reason. The panel also shows the history of what we decided about this page in previous audits.
On that panel put a Draft a refresh button that kicks off a background agent for the page. The agent re-reads the live page with Firecrawl Scrape URL, writes an improved page title, an improved meta description, and a section by section rewrite outline that says what to keep, cut, update, and add. It then matches the URL to the right WordPress post using WordPress List Posts, searching on the slug and the page title, and reads the matched post with WordPress Retrieve a Post to confirm before writing. When a match is found it saves the rewrite with WordPress Update a Post; when there is no confident match it creates a new post with WordPress Create a Post. In both cases the post status must be draft. Nothing this app writes may ever be published, and if the agent cannot find a confident match it should say so in the app rather than guessing. When the agent finishes, its output lands back in the detail panel so I can read the proposed title, description, and outline next to the original copy, with a link through to the WordPress draft.
Persist everything to a Google Sheet. When an audit run completes, append a row per page with Google Sheets Append Values covering the run date, URL, section, word count, the title and description issues, last updated, and failing link count. When I mark a page as refresh, leave, or retire, append a decision row with the page, the decision, who made it, the date, and any note, plus the WordPress draft link when one exists. On load, and at the start of every run, read that sheet back with Google Sheets Get Values so pages that were already actioned come through marked as handled with the previous decision shown.
Keep the interface in plain language a marketing manager would use. Say missing description and thin page rather than search jargon, and make the worst-first ranking the thing I see first when the run finishes.
What does this prompt do?
- Type in a domain or a single section and the app reads every page on it, then builds one sortable table with word count, page title, description, and when the page was last updated.
- Pages rank worst first, so thin, untitled, duplicated, and long-neglected pages rise to the top, and you can narrow the list to one section at a time.
- Open any page to read its actual copy next to its problems, including which of its own links no longer load and the reason each one failed.
- Press Draft a refresh and a background helper re-reads the live page, writes a better title, description, and a section by section rewrite outline, then saves it to WordPress as a draft.
- Every audit run and every call you make gets appended to a Google Sheet, so pages you already handled show up as done the next time you run the audit.
What do I need to use this?
- A Firecrawl account so the app can read the pages on your site
- A WordPress site you can log into, with an application password from your profile page
- A Google account and a spreadsheet to hold the running record
- The domain or section address you want to audit, for example yoursite.com or yoursite.com/blog
How can I customize it?
- Change what counts as a thin page so the word count cutoff matches your own house standard
- Point the audit at one section, like your blog or your guides, instead of the whole site
- Add your own columns to the tracking sheet, such as an owner name or a target date, and they carry across quarters
FAQs
Will anything get published to my site automatically?
Does this work if my site is not on WordPress?
Is this a proper broken link checker?
How long does a run take on a large site?
Will I lose the record between quarters?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.
See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.
Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.
Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.
Stop letting your audit spreadsheet go stale.
Run the audit, work the list, and leave every refresh sitting in WordPress as a draft ready for an editor.