=== Acknowledgify ===
Contributors: madeneat
Tags: credits, footer links, humans.txt, meta tags
Requires at least: 6.4
Tested up to: 7.1.3
Requires PHP: 8.0
Stable tag: 1.2.0
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Put your name on every site you build. Credit your team and collaborators with humans.txt, meta tags and a footer link. Free, no tracking.

== Description ==

**Give credit where it's due.** You build the site, it launches, and a year later nobody at the client can remember who made it. Acknowledgify puts a clear, consistent credit on every site you build, for you, your team and everyone you brought in to help.

= What it publishes =

Three outputs, each switched on separately:

* **A humans.txt file.** A plain-text credits file at `/humans.txt`, following the [humanstxt.org](https://humanstxt.org/) convention. It is served from the database, so nothing is written to disk and nothing is left behind if you remove the plugin.
* **Acknowledgment meta tags.** `author`, `designer`, `developer`, `copyright`, `owner`, `publisher`, `managed-by`, `powered-by` and `acknowledgment`, added to the head of every page. Invisible to visitors, there for anyone who views the source.
* **A footer credit link.** One small link in the footer, with your words, your destination and your styling.

= Why agencies and freelancers use it =

* **Your name travels with your work.** Visitors who like a site look in the footer to see who built it. Developers, auditors and site audit tools look in humans.txt and the page source. Acknowledgify covers all three places.
* **Show up where agencies are tracked.** BuiltWith, the web technology profiler, lists web agencies alongside the sites they built, and identifies a number of them from homepage footer credits. A consistent footer credit across your portfolio gives it something to find.
* **A clear record of who is responsible.** Clients change staff, hire new marketing managers and forget who looks after the site. The `managed-by` tag and humans.txt answer that question for whoever asks next, which makes handovers and support calls simpler.
* **Credit the people you work with.** Photographers, videographers, copywriters, brand designers. Naming collaborators publicly costs you nothing and is good for the relationship.
* **One setup across your whole portfolio.** Configure one site, export the settings, import them everywhere else. Placeholder tokens fill in each site's own details, so there is nothing to edit per site.
* **Nothing to justify to the client.** No tracking, no frontend scripts or stylesheets, and nofollow footer links by default. Uninstall removes the plugin settings. The client can see exactly what is published and where.

= Credit everyone who worked on the site =

Most sites are a team effort. Alongside your own details, add a credit row for each person or business who contributed, up to 20 per template. Each row has three parts:

* **Role.** Free text, so type whatever fits, with suggestions to hand.
* **Name** of the person or business.
* **Website**, optional, if you want to link to them.

Suggested roles cover Design, Development, SEO & Performance, Hosting & Maintenance, Photography, Videography, Copywriting, Branding, Illustration, Content Strategy, Accessibility, Project Management, Translation and Analytics.

Each row becomes a line in the Project Credits section of humans.txt, and placeholder tokens work inside them. Freelancer and Agency each have their own saved credit rows. Switching templates preserves both lists without combining them. Use Copy credits to add entries from the other template deliberately. The Custom template lets you write every line yourself.

= A footer credit that fits any design =

The footer link has to sit comfortably on someone else's design, so you decide how it looks and where it goes:

* **Your words, your link.** Basic formatting is allowed (bold, italics, underline, and spans or divs with a class), and placeholder tokens work in both the text and the address.
* **Three ways to place it.** Automatically in the site footer, with the `[acknowledgify_madeby_footer]` shortcode anywhere you can add content, or with a PHP function in a child theme template.
* **Style it here, or with your own CSS.** Set the text colour, background colour, alignment and font size in the plugin, or switch inline styling off and target `.ack-footer-link` from your theme or page builder. Add your own CSS class either way.
* **Qualified by default.** The link includes `nofollow noopener` and opens in a new tab. This qualifies the credit link for search engines and protects the original page from access through the new window.

= Set up once, roll out to every site =

Anything that changes from site to site can be written as a placeholder token, resolved when the page is served:

`Project: %%SiteTitle%%`
`Copyright: %%CurrentYear%% %%SiteTitle%%`
`Theme: %%ThemeName%%`

The full set is `%%SiteTitle%%`, `%%SiteTagline%%`, `%%SiteURL%%`, `%%SiteHost%%`, `%%CurrentYear%%`, `%%CurrentDate%%`, `%%ThemeName%%` and `%%WPVersion%%`. The settings screen lists each one beside the value it has on the site you are looking at, so there is nothing to look up.

Export the settings from one site, import the file on the next, and every site credits its own name with no editing. For an agency looking after dozens or hundreds of sites, that turns a per-site job into a single file.

= What it does and does not do for SEO and AI =

Straight answers, because this is an area where a lot of plugins overclaim.

* **humans.txt and the meta tags are not ranking factors.** Search engines do not use them to rank pages, and no plugin that outputs them can honestly promise otherwise. They are for people and tools that want to know who built a site.
* **The footer link is nofollow by default.** Google's [link-spam policy](https://developers.google.com/search/docs/essentials/spam-policies#link-spam) includes widely distributed footer links among its examples. Acknowledgify qualifies credit links with nofollow by default. This does not guarantee search rankings or compliance for every deployment.
* **AI tools.** Your credits are published as plain, standard text that any crawler can read, including those that feed AI tools. Whether a given tool reads or cites them is up to that tool, so Acknowledgify makes no promise of AI visibility. The plugin itself uses no AI and sends nothing to any AI service.
* **Page speed.** The plugin loads no front-end scripts or stylesheets and uses WordPress APIs for settings and tokens. It still executes PHP; measure performance on your own site if needed.

= Quick to set up =

Fill in a couple of fields and a live preview shows the humans.txt file as visitors will see it, with tokens already resolved. Fields come with plain-language help, and nothing is hidden behind a save, so a site can be set up completely before you switch anything on.

= Built to stay out of the way =

* **Free, with no catch.** No paid tier, no licence keys, no locked features and no upsells in the admin. It is a give-back to the open source community.
* **No phone-home.** No telemetry, no tracking and no external requests of any kind. Your credit data never leaves your site.
* **Lightweight.** Settings are stored in one option and cached within the current blog context. Tokens use WordPress options and theme APIs; the plugin issues no direct SQL queries.
* **Accessible admin.** Keyboard operable, every field properly labelled, and colours that meet WCAG AA contrast.
* **Works with your setup.** Uses the standard WordPress footer hook, so it works with block themes, classic themes and page builders including Elementor, Bricks and Divi. Works on multisite. Does not interfere with WordPress sitemaps or with Yoast SEO, Rank Math, All in One SEO or SEOPress.
* **Translation-ready.** Every string is translatable, including the comment header inside humans.txt, and WordPress downloads any available translation automatically.

== Installation ==

1. Install through **Plugins > Add New**, or upload the `acknowledgify` folder to `/wp-content/plugins/`.
2. Activate the plugin.
3. Go to **Settings > Acknowledgify**, fill in your details and switch on the credits you want.

To roll the same setup out to more sites, export your settings from **Settings > Acknowledgify > General** and import the file on each new site.

== Frequently Asked Questions ==

= Why put a credit on the sites I build? =

Because it is how people find out who made a site they like, and how a client's future staff find out who to call. A footer credit reaches visitors. humans.txt and the meta tags reach developers, auditors and audit tools who check who is responsible for a site. All three keep working long after launch, on every site you build.

= Will my clients mind? =

Most clients expect a modest credit, and you control exactly what appears. The footer link is small, styled to match their site and nofollow. If a client would rather not have a visible link, switch the footer link off and keep humans.txt and the meta tags, which visitors never see. Either way, nothing is hidden: the client can view everything that is published.

= Can I set it up once and use it on all my sites? =

Yes, and that is what it is built for. Write your credits using placeholder tokens such as `%%SiteTitle%%`, export the settings, and import the file on each site. Every site fills in its own name, address and year, with nothing to edit.

= Will it slow my site down? =

The plugin loads no front-end stylesheets or scripts and caches settings within the current blog context. PHP and WordPress API calls still have a cost, so performance depends on your site. The settings screen has one small stylesheet and one small script, loaded only on that screen.

= Will it help my SEO? =

Acknowledgify does not promise ranking improvements. It publishes credits for people and tools that inspect a site. The footer link is qualified with nofollow by default; search engines decide how they use that signal.

= Why is the footer link nofollow? =

Google identifies widely distributed footer links as a potential link-spam pattern. Acknowledgify qualifies its footer credit with nofollow by default; this is not a guarantee of rankings or compliance for every deployment. Developers can change it with the `acknowledgify_footer_link_rel` filter, for example to `sponsored` for a paid credit.

= Who reads the credits? =

* **Visitors**, who look in the footer to see who built a site.
* **Developers and auditors**, who look in humans.txt and the page source to see who is responsible for it.
* **BuiltWith**, which tracks web agencies and identifies a number of them from homepage footer credits.
* **Site audit tools.** [ProspectWP](https://prospectwp.com/), a site audit tool also made by Made Neat, picks up the acknowledgment meta tags when it audits a site.
* **Crawlers generally**, including those that feed AI tools, although whether a given tool uses the credits is up to that tool.

= How do I get my agency listed on BuiltWith? =

BuiltWith decides who it lists, so nobody can guarantee inclusion, but you can give it the clearest signal:

1. Switch on the footer link on every site you build, using **Add it automatically** so the credit appears in the footer of the homepage.
2. Use exactly the same agency name and website address on every site. Use your brand name as the link text, not keywords.
3. Make your own website clear about what you do, and show the client sites in your portfolio.
4. Submit your agency through BuiltWith's [Suggest a Technology form](https://builtwith.com/suggest), with your agency name, website and several live client sites that carry the credit.

Placeholder tokens are useful for the rest of your credits, but keep the footer link text the same everywhere so BuiltWith sees one consistent agency.

= Can I credit photographers, copywriters and other collaborators? =

Yes. Add a credit row, type the role and the name, and add their website if you want to link to them. There is no fixed list of roles, and you can add up to 20 per template.

= What is a humans.txt file? =

A plain-text file at the root of a site crediting the people and technologies behind it, in the same spirit as `robots.txt` but for humans. Acknowledgify serves it from your database rather than writing a file to disk.

= Will it work with my theme and page builder? =

Automatic footer placement uses the standard `wp_footer` hook, which block themes, classic themes, Elementor, Bricks and Divi all fire. If a block theme places the credit outside your footer container, either set **Styling** to *Style it with my own CSS* and target `.ack-footer-link` from your stylesheet, or use the shortcode or PHP function and put it exactly where you want it.

= What options are there for placing the footer link? =

* **Automatic.** Added to the footer for you.
* **Shortcode.** Put `[acknowledgify_madeby_footer]` in a post, page, widget or page builder text block.
* **PHP function.** Put `<?php acknowledgify_display_madeby_footer(); ?>` in a child theme template. The function prints the markup; pass `false` to have it returned instead.

= Will it clash with my SEO plugin? =

The `/humans.txt` rule targets that exact path rather than sitemap paths. Test with your own SEO plugin and hosting configuration before release. Acknowledgify never removes or replaces anything another plugin outputs. If your theme or SEO plugin already adds an `author` meta tag, leave the Author field empty so the page has only one.

= Does it store or send any personal data? =

It stores what you type on the settings screen, in one WordPress option on your own site. Nothing is sent anywhere. There are no external requests, no analytics and no tracking.

= Is it translation-ready? =

Yes. Every user-facing string uses the `acknowledgify` text domain, including the comment header inside humans.txt, and WordPress downloads any available translation automatically based on your site language.

The plugin ships the translation template only. Community translations live at [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/acknowledgify/), which is the best place to contribute because everyone benefits. If you only need it in your own language on your own site, a tool such as Loco Translate will read the template and let you translate locally.

= Does it work with WPML or Polylang? =

There is no built-in WPML or Polylang integration: Acknowledgify stores one set of credits for the whole site and serves one humans.txt file at one address. If you want the footer credit to differ by language, the `acknowledgify_footer_link_text` and `acknowledgify_footer_link_url` filters let you vary the text and the destination.

= How can I report a security bug? =

Through the Patchstack Vulnerability Disclosure Program, whose team validates and triages reports. [Report a security vulnerability](https://patchstack.com/database/vdp/3a9d793f-7b14-4e36-9139-dcde6f4d267f).

== Screenshots ==

1. Switch on the credits you want: humans.txt, meta tags and a footer link.
2. humans.txt settings using the Agency template.
3. Credit rows for everyone who worked on the site, with a live preview of the finished file.
4. Placeholder tokens and export and import, for copying one setup to every site.
5. Meta tag settings, showing the tag each field produces.
6. Footer link settings: your text, your link, styled to match the site.
7. Footer link set to use your own CSS, with the class names to target.
8. The Custom template, for writing humans.txt yourself.
9. The published humans.txt file, as anyone visiting /humans.txt sees it.

== Changelog ==

= 1.2.0 =

Credit anyone who worked on a site, reuse settings across your portfolio with placeholder tokens, and manage everything through an improved, accessible settings screen.

**New**

* **Flexible credit rows.** Add contributors with a free-text role, name and optional website. Suggested roles include photography, videography, copywriting, branding, illustration, content strategy, accessibility, project management, translation and analytics.
* **Separate template credits.** Agency and Freelancer each have their own saved credit list. Switching templates preserves both lists without combining them. Custom remains free-form content.
* **Copy credits between templates.** Copy entries from the other template without overwriting existing rows. Exact duplicates are skipped, and copies that would exceed the row limit are refused without partial changes. Save changes to keep the copied entries.
* **Placeholder tokens.** Supports `%%SiteTitle%%`, `%%SiteTagline%%`, `%%SiteURL%%`, `%%SiteHost%%`, `%%CurrentYear%%`, `%%CurrentDate%%`, `%%ThemeName%%` and `%%WPVersion%%`. Values resolve when content is displayed, allowing exported settings to adapt to each site.
* **Responsive settings screen.** Dedicated layouts make the plugin settings easier to use on mobile devices.

**Changed**

* **Nofollow footer credits.** Footer links now include `nofollow` by default to qualify credit links for search engines. Developers can customize this through `acknowledgify_footer_link_rel`; `noopener` is always retained. This does not guarantee search rankings or universal policy compliance.
* **Agency role fields become credit rows.** The four fixed Agency role fields migrate into the Agency credit list, preserving their values and order. They remain separate from Freelancer credits.

**Improved**

* All settings tabs are visible immediately, allowing features to be configured before they are enabled.
* Saving settings returns to the selected tab.
* Adds plain-language help and clearer field descriptions.
* The existing three-template humans.txt preview now supports credit rows, independent template lists and resolved tokens.
* The humans.txt comment header is now translatable.
* humans.txt responses can be cached for an hour instead of being marked uncacheable on every request. Developers can adjust this through `acknowledgify_humans_txt_max_age`.
* Rewrite rules are refreshed when the humans.txt feature is enabled or disabled.
* Settings are cached within the current request and blog context to reduce repeated calls to WordPress’s options API.
* The alternative `/?acknowledgify_humans_txt=1` address no longer serves a duplicate copy by default.
* Adds developer filters for tokens, meta tags, role suggestions, header lines, cache lifetime, the footer wrapper and footer link text, URL and rel attributes. Text and URL filters allow credits to vary by language.
* Uninstall removes settings across the entire multisite network, including networks with more than 100 sites.
* Refreshes translation strings and documentation, including clearer explanations of migration behavior, SEO expectations and performance.

**Accessibility**

* Adds explicit field labels and accessible names for the three feature switches.
* Implements ARIA tabs with arrow-key navigation and visible keyboard focus.
* Adjusts primary button and link colour pairs to meet WCAG AA normal-text contrast.
* Improves focus handling and announcements when adding or removing credit rows.

**Fixed**

* **Inactive Agency credits appearing after upgrade.** Upgrades and imports from 1.1.5 and earlier keep legacy Agency roles in the Agency list, even when Freelancer or Custom is selected.
* **Repeated migration.** Settings migrations are versioned so subsequent saves and page loads do not duplicate migrated rows.
* **Blank footer fields.** Deliberately empty footer text or URLs now remain empty after saving and suppress the footer credit. Legacy default backfilling applies only during legacy migration.
* **URL-token handling.** Footer URLs, credit websites and template website fields preserve unresolved tokens through saving and import, including a bare `%%SiteURL%%`. Footer destinations remain escaped after token resolution.
* **Tab persistence.** Removes the duplicate form return-URL field that could send users back to the wrong tab after saving.
* **Multisite cache isolation.** Clears settings and token caches when switching blogs and when restoring the original blog.
* **Import confirmation.** Verifies stored settings before reporting success, accepts unchanged imports and rejects exports requiring a newer settings schema.
* **Settings feedback.** Avoids duplicate save confirmations and keeps feature Off markers synchronized with their switches.
* **PHP snippet instructions.** Corrects references to breadcrumbs and `header.php`, and provides an example matching the footer function.
* **Plugin metadata.** Adds the missing `Requires at least` and `Requires PHP` headers, `LICENSE.txt` and the SPDX licence identifier `GPL-2.0-or-later`.

**If you are upgrading**

Back up your database and export settings before upgrading. Existing Agency role fields are preserved as Agency credit rows, separate from Freelancer credits. Footer credit links now use nofollow by default.

= 1.1.5 =
* Fixed permalinks issue - canonical redirects are no longer disabled site-wide
* humans.txt now returns a proper 404 when the feature is disabled
* Removed redundant rewrite rules flush on every page load
* Fixed humans.txt escaping - names such as "Smith & Jones" and multi-line custom templates now appear exactly as entered
* Footer acknowledgment link now includes rel="noopener"
* New "Link styling" option - Text Colour and Font Size now apply in all three placement modes, or can be switched off entirely so you can style .ack-footer-link with your own CSS. Existing sites keep their current appearance.
* acknowledgify_display_madeby_footer() now accepts true/false to echo or return, matching the documented behaviour
* Settings are now saved and sanitised correctly, and the Managed By meta tag no longer discards its value
* Import now reports accurate errors instead of always claiming success

= 1.1.4 =
* Security patches

= 1.1.3 =
* Added VDP disclaimer

= 1.1.2 =
* Permalink redirect issue fix

= 1.1.1 =
* Minor fixes for settings import/export feature

= 1.1.0 =
* Added Export/Import feature to easily back up and restore plugin settings.
* Upgraded the plugin interface for a modern and user-friendly experience.
* Enabled basic HTML tags in the "Display Text" field for Footer Link Settings.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.2.0 =
Adds independent Agency/Freelancer credits, placeholder tokens, an improved settings screen and nofollow footer links. Preserves existing Agency credits during upgrade. Back up your database and export settings before upgrading.

== Links ==

* [Plugin website](https://acknowledgify.com/)
* [Suggest a feature](https://acknowledgify.com/suggest/)
* [Get support](https://wordpress.org/support/plugin/acknowledgify/)
* [humans.txt initiative](https://humanstxt.org/)
