Troubleshooting & FAQ
Fixes for the most common Vakanssi issues, from blocked CV downloads and missing emails to jobs not showing on Google, plus quick answers to frequent questions.
On this page(19)
This page collects the problems people run into most often, what causes each one, and how to fix it. Each section starts with the symptom, so you can scan the headings for the one that matches yours.
A CV download is blocked, or shows a 403 or 404
Candidate CVs are never public files. Vakanssi stores them in a protected storage folder inside your uploads folder and adds a .htaccess rule (a small Apache config file) that denies direct access. You can point storage to a folder outside your public site files instead with the VAKANSSI_STORAGE_DIR constant.
Either way, the only way to open a CV is through the download link Vakanssi shows in the admin, which checks that you are logged in and allowed to see applications.
So a 403 or 404 when you open the file’s own web address is the protection doing its job, not a bug.
Always download from the admin link
Open the candidate in Hiring, then Applications, and use the download link in their profile. Do not bookmark, forward, or reuse a CV link: each one is tied to your login and expires.
If a download fails from the proper admin link, work through these:
- Make sure you are logged in to WordPress in the same browser, and that your account has a hiring role that can view applications. See Roles & permissions.
- If it fails for everyone, a security plugin or firewall may be blocking admin requests. Ask whoever manages your hosting to allow Vakanssi’s admin download requests.
- If an older application shows “file not found”, the application may have passed its data-retention deadline and had its CV removed on purpose. See Privacy.
The Applications board shows a red banner about the REST API
The Applications screen loads its board and list through the WordPress REST API. If a security plugin, firewall, or server rule blocks the vakanssi/v1 namespace, the screen shows a red banner (“Vakanssi can’t reach the WordPress REST API”) instead of your applications.
- Go to Hiring, then Tools, then Status and click Run compatibility test. It reports on the application form, the REST API, your open positions and job pages, and the anti-spam challenge, plus the interview booking page on Pro Pro feature, requires a Vakanssi Pro license.
- See Firewalls & server compatibility for the fix specific to your security plugin, firewall, or host.
- WordPress’s own Tools, then Site Health screen also lists “Vakanssi REST API is reachable”, so you can confirm the fix worked from there too.
The board shows “Could not load the board” with a Try again button
This is a narrower, mid-session cousin of the red banner above. It means the board’s own request for applications failed after the screen had already opened, for example a dropped connection or a request that timed out, rather than the REST API being blocked outright.
Click Try again. If it keeps happening, work through the same steps as the red banner above, since a firewall or security plugin blocking the vakanssi/v1 namespace intermittently produces this too.
What Vakanssi checks on the Site Health screen
WordPress’s Tools, then Site Health screen runs Vakanssi’s own checks next to WordPress’s: candidate file protection, applications rejected as expired, scheduled tasks, emails being sent, the anti-spam challenge, the CV upload size limit, stored CV files, outbound HTTP, visitor IP source, database tables and indexes, the REST API, and whether your job pages render correctly.
Two more come from the jobs feature: whether your careers archive works with your theme, and whether your job URLs are unique on the site. Since v0.36.4, the email check says emails are being sent, not delivered, because a site can see that it handed a message to its mail server but not whether it reached an inbox.
Candidate or notification emails are not arriving
Vakanssi hands every email to WordPress’s built-in mail function, the same one WordPress uses for password resets. Delivery from there depends on your hosting. Many hosts send unauthenticated mail that lands in spam or is quietly dropped, especially when the From address is not at your own domain.
Fix email delivery with an SMTP plugin
The reliable fix is to send mail through a real mailbox or email service. Install an SMTP plugin, connect it to your provider, and add the SPF and DKIM records that provider gives you. The only Vakanssi setting that matters is From email, which must be at your own domain. See Email delivery for the full setup.
Before you assume delivery is the problem, rule out these:
- Check the recipient’s spam or junk folder.
- Go to Hiring, then Settings, then Emails. Confirm the template you expected is switched on. The applicant confirmation, rejection, and recruiter notification emails are on by default, but the offer email is off until you turn it on.
- Confirm the From address is an email at your site’s own domain. Receiving servers distrust a From address that does not match the sending site.
- Send a test from the email test card on Hiring, then Tools, then Status. It goes out through the same path as real candidate mail. Or apply to one of your own jobs, then check both inboxes again.
My job is not appearing on Google
Getting a job into Google’s job search has two gates. First, the page must carry valid job structured data, which Vakanssi publishes only when the job is eligible. Second, even a fully eligible job is listed at Google’s discretion, and that can take time.
- Open the job in Hiring, then All Jobs. Look at the banner at the top of the Job details box. If it says Not eligible yet, it lists exactly what to add (usually a missing city or country, a too-short description, or a closing date that has passed). Fix those and update the job. See Google for Jobs.
- Once the banner reads Eligible, paste the live job URL into Google’s Rich Results Test to confirm Google can read a valid job posting on the page.
- Give Google time. In Search Console you can request indexing, but an eligible page can still take days to appear, and inclusion is always Google’s call.
My open positions page is missing its listing
This happens only in one specific combination: a block theme active on WordPress older than 6.7, with the built-in /jobs/ archive turned on rather than a careers page. Vakanssi can only register its own branded template for a block theme on WordPress 6.7 or later, so on an older WordPress the archive URL falls through to your theme’s generic post list instead.
Since v0.33.29, Vakanssi notices and explains this: no search box, no department or remote filters, and no sort control, though closed roles are still hidden. Individual job pages keep their details and application form, but lose the Vakanssi wrapper classes.
Vakanssi flags it two ways: a dismissible warning notice on Hiring screens (“Vakanssi: your open-positions page is missing its listing”), and a “Vakanssi careers archive works with your theme” check on WordPress’s own Tools, then Site Health screen.
- Update WordPress to 6.7 or later. Vakanssi’s own Site Editor archive template then registers automatically, with nothing else to change.
- Or switch to a careers page instead: add the Job Listings block (or the
[vakanssi_jobs]shortcode) to a page, then set it as your Careers page under Hiring, then Settings, then Jobs & Careers. A careers page renders the full listing on every WordPress version and every theme. See Your careers page and Settings reference.
Dismissing the notice only hides the reminder for you. It does not fix the underlying gap, so the Site Health check keeps failing until one of the two fixes above is applied.
My careers page went empty after I turned on job translations
This happens on a site running a translation plugin like Polylang, right after Vakanssi Jobs is switched on for translation. Polylang requires every post to carry a language, and jobs created before translation was turned on have none, so Polylang treats them as invisible: your open-positions page and careers page show nothing, and every existing job link returns “not found”.
Since v0.33.38, Vakanssi notices this and tells you. A notice on Hiring screens, visible to Administrator and HR / Compliance accounts, names how many jobs have no language assigned. Your translation plugin can set them all to your default language in one step, on its own Languages screen; nothing on the Vakanssi side needs to change.
The same release also fixed a related gap: a translated copy of a job used to keep none of its own details, no location, no employment type, no salary, and no closing date, so it never expired. A translated copy now carries its full details, so update to v0.33.38 or later if you are running an older version and translate jobs.
Site Health says my job pages are not rendering the way they should
Since v0.33.32, Tools, then Site Health carries a check called “Your open positions and job pages render correctly”, and the same row appears on Hiring, then Tools, then Status when you run the compatibility test. It fetches your real job page, and your open-positions page when the built-in archive is on, and looks at what came back.
It exists because every way these two pages break still returns a normal HTTP 200. Uptime monitoring cannot see any of it, and neither can we from here: whether they render correctly depends on your theme, your page builder and your WordPress version, not on the plugin alone.
The check is deliberately narrow. A theme that lays the listing out differently than we would passes. It only reports things that are unambiguous:
- “rendered without the application form or Apply button”: a custom single-job template is being used that has no post-content area. On an Elementor Pro Theme Builder Single, add a Post Content widget, or drag in the Application Form widget, or add
[vakanssi_job_apply]. See Elementor, Divi, and block themes. - “rendered without the Vakanssi listing”: your open-positions URL is showing your theme’s own post list rather than the Vakanssi one, so it has no search box and no filters. Usually the block-theme-on-old-WordPress case above; a careers page fixes it on any version.
- “printed more than one page title”: two things are writing the document title, normally an SEO plugin alongside a theme that also prints one. Turn the title off in one of them.
- “lost your theme’s header and footer”: the active theme has no
header.php, so WordPress substituted its own built-in layout. Switching Page layout to your theme’s own template under Hiring, then Settings, then Jobs & Careers hands the job page back to the theme.
If the check reports a problem you believe is wrong, the page it fetched is the evidence: open the same URL yourself and compare.
There is a warning about protecting CV uploads
On some servers, mostly Nginx, administrators see a notice that the CV storage folder’s protection is in question. It appears because CVs live inside your public uploads folder, and either the folder answered a direct web request, or the check that tests this could not complete.
The wording tells you which. An error notice, “uploaded CV files can be downloaded directly”, means the check ran and the folder is genuinely reachable: treat this as a confirmed exposure and fix it now.
A warning, “protect uploaded CV files”, means the check itself did not finish, either because the site cannot request its own URLs, or because the folder answered “not found” instead of “forbidden”. This is an unanswered question, not proof of a leak.
Your files are still protected either way while you resolve this
Every CV already has a random, unguessable filename that is never linked publicly, and every download still goes through the permission-checked admin link. The warning is about closing the last gap, not an open door.
The notice includes the exact server rule to fix it. Either add that rule to your server config (or send it to your hosting support and ask them to), or point storage to a folder outside your public site by defining the VAKANSSI_STORAGE_DIR constant in wp-config.php.
Confirm the result on Hiring, then Tools, then Status: click Check storage again next to the storage row to re-run the check right away, rather than waiting for it to retry on its own.
The Protected storage tile reads OK once the folder is confirmed blocked, “Not confirmed” if the check still cannot complete, or “Needs attention” if the folder is still reachable. See Firewalls & server compatibility for host-specific instructions (Nginx, Kinsta, Flywheel, Pantheon, and more).
Site Health says Vakanssi cannot store candidate files
This is a different, more serious message than the protection warning above. Since v0.32.8, Tools, then Site Health can show a critical error, “Vakanssi cannot store candidate files,” when the CV storage folder cannot be created or written at all, not just when Vakanssi cannot confirm it is sealed off from direct access. While this shows, every application with a CV attachment fails to submit.
This blocks applications, not just downloads
The protection warning above means CVs are stored but their folder’s lockdown could not be verified. This message means nothing is being stored at all.
The message names the exact folder Vakanssi tried to use, and points at the VAKANSSI_STORAGE_DIR constant in wp-config.php when your site defines one.
- Check that the folder named in the message exists, or can be created, and that your web server’s user has permission to write to it.
- If
wp-config.phpdefinesVAKANSSI_STORAGE_DIR, confirm that path (or its parent folder) exists and is writable. A typo in that constant is a common cause. - Hiring, then Tools, then Status, then Run compatibility test also reports this: its Application form (public POST) row explains the same storage problem, so you can confirm the fix without waiting for a real candidate to hit it.
Site Health says some stored CV files are missing
Tools, then Site Health runs a check called “Vakanssi stored CV files are present”. It samples the 200 most recently uploaded files and confirms each one still resolves to real bytes in protected storage. A failure means some of those files could not be found.
This almost always means a storage migration or a restore-from-backup left the database and the file directory out of sync, for example a database backup restored without the matching files, or a files backup restored without the matching database. The database still has a row for the file, but the bytes themselves are gone.
- Check that your configured storage location (see Firewalls & server compatibility if you set a custom
VAKANSSI_STORAGE_DIR) still holds the files it should. - If you recently restored a backup, restore the matching files backup from the same point in time, or accept that the affected candidates will need to re-upload their CV.
- A download that hits a missing or altered file already fails safely with “file not found”, it never serves broken bytes, so nothing is exposed to candidates or staff in the meantime.
Site Health flags the data-retention purge
Tools, then Site Health carries a check for the daily data-retention purge, and it tells two problems apart rather than reporting a plain yes/no.
- “The Vakanssi data-retention purge has never run”: no purge has ever completed, most often because WP-Cron is not being triggered. A brand-new install gets a grace period: for its first two days the check reads “Vakanssi scheduled tasks are set up” instead, so this only fires once that window has passed.
- “Vakanssi scheduled tasks are not running”: the purge completed before but has gone quiet for more than two days, the same underlying problem on a site that used to work.
The purge cannot be switched off by accident. Since v0.35.1, Privacy & Data Retention, the module that owns it, is always on.
For either problem, follow Going live: production setup to trigger WP-Cron from a real system cron job rather than waiting on site traffic.
Deleting an application says a file could not be removed
Deleting an application (from the candidate panel’s Delete button, the Applications list’s Delete permanently bulk action, or a GDPR erasure request) removes the stored CV file first, and only removes the application’s records once that succeeds.
If the file cannot be removed, usually a filesystem permissions problem, nothing is deleted: the application (and, for an erasure request, the candidate record) is kept exactly as it was, and you see a warning telling you a stored file could not be removed.
This is deliberate: it is safer to keep a record you can retry than to delete the database rows while the file’s bytes are still sitting on disk with nothing pointing at them.
- Check that Vakanssi’s storage folder (see Firewalls & server compatibility if you set a custom
VAKANSSI_STORAGE_DIR) is writable by your web server’s user. - If you recently changed hosts, restored a backup, or moved the storage location, confirm the folder your files were originally stored in still exists and is reachable.
- Once the underlying permissions problem is fixed, try the delete (or the GDPR erasure request) again. Nothing was partially removed, so retrying is safe.
The data reset failed, or some files could not be removed
The Danger zone card on Hiring, then Tools, then Data deletes all applicant data in one all-or-nothing step. Depending on what happened, you will see one of these notices:
- “The data reset failed and was rolled back; no data was deleted.” A database error interrupted the wipe partway through, and it was fully undone. Nothing was lost. Try again; if it keeps failing, contact support with your server’s error log.
- “Applicant data was deleted from the database … but N stored file(s) could not be removed from disk.” The database rows are gone, but the CV files were not.
- If N is 1 or more, one or more files survived on disk, usually a filesystem permissions problem: check your server error log for the file paths and remove them by hand.
- If N is 0, Vakanssi’s storage folder itself failed a safety check before the wipe could even start (an unsafe path, a symlink, or a folder your site does not own), so nothing was attempted and the error log will not list a specific file this time: check the storage folder’s location and permissions directly (see Firewalls & server compatibility if you set a custom
VAKANSSI_STORAGE_DIR).
- “The data reset failed partway through and could not be fully rolled back on this server.” A rare case on a very old or misconfigured MySQL setup that cannot provide real transactions: some rows were already deleted before the failure and cannot be automatically undone. Review your data and re-run the reset if needed.
See Backups & data for exactly what the reset removes and keeps.
A notice says a Vakanssi module failed to load
If you see “The Vakanssi module “<name>” failed to load and was disabled for this request. Check the error log.” at the top of any wp-admin screen, one part of Vakanssi hit an unexpected error while starting up. Vakanssi isolates that failure: the broken module is skipped for that request and everything else, unrelated modules, your other plugins, the rest of the site, keeps working normally.
The notice only tells you that something failed, not why. The full error is in your site’s PHP error log (ask your host how to reach it if you are not sure, cPanel, Plesk, and most managed hosts expose one).
- Open your PHP error log and look for a line starting
vakanssi: module "<name>" failed to boot, it includes the exception message that caused it. - A recently installed or updated plugin or custom code is the most common cause, especially anything hooking
vakanssi/modules/registerorvakanssi/booted. Deactivate anything you changed recently and see if the notice clears. - If nothing you control changed, contact your host about the error’s underlying cause (a PHP version mismatch or a resource limit are common) or reach out to Vakanssi support with the log line.
This notice only shows to accounts that can manage Vakanssi settings. It is separate from the REST API red banner above, that is a blocked connection to the vakanssi/v1 namespace, not a module that failed to start.
I cannot find the Import screen
Import does not have its own item in the Hiring menu; it is a one-time job, not somewhere you go daily. It lives on Hiring, then Tools, then Import, which holds the Import jobs (CSV) card and, when Vakanssi detects data from another hiring plugin, the Migrate from another plugin card.
The migration card, and the dismissible notice that links to it from your Hiring screens, only appear when there is data Vakanssi can actually import. If the Import tab itself is missing, both importers are switched off under Hiring, then Tools, then Features. See Import.
Frequently asked questions
Does removing the plugin delete my candidate data?
No. Deactivating Vakanssi keeps all your data; it only stops Vakanssi’s scheduled tasks. Deleting the plugin removes its roles and settings but keeps your applications, candidates, and CVs, unless you have deliberately ticked Delete all data on uninstall in the General settings, which is off by default. Even then, your published job posts are left in place.
Do I need Pro to accept applications?
No. The free plugin is a complete hiring workflow: job postings, a careers page, the application form with protected CV upload, the Applications inbox and board, and automated candidate emails. See Free vs Pro.
Why don't I see other plugins' notices on Hiring screens?
By design. Other plugins’ and themes’ review nags, upsells, and warnings normally show on every wp-admin screen. Vakanssi hides those on its own screens so the Hiring menu stays a distraction-free workspace. WordPress’s own notices (a new WordPress version, a plugin paused after an error) and Vakanssi’s own (such as the CV storage warning above) are always kept.
Since v0.37.8, a plugin or theme whose folder is a symbolic link is recognised correctly, and a notice from a drop-in such as object-cache.php, or from a file in the WordPress root folder, is left in place. Developers can opt out with the vakanssi/admin/suppress_foreign_notices filter, see the Hooks reference.
Does Vakanssi work on Nginx?
Yes. CV storage lives inside your uploads folder by default, and Nginx ignores the .htaccess deny rule that protects it there, so add the rule Vakanssi shows you (see the storage warning above). Defining VAKANSSI_STORAGE_DIR to move storage outside the web root avoids needing the rule at all.
Do I need any special server setup for a production site?
Not required, but two things are worth doing on a live hiring site: trigger WordPress’s scheduler from a real cron job so daily jobs like the GDPR retention purge never run late on a quiet site, and enable a persistent object cache (Redis or Memcached) if your host offers one, so short-lived values such as rejected-form answers stay out of the database under load. See Going live: production setup.
If none of this matches, the Status tab under Hiring, then Tools is the best place to start. Its System status card reports whether your database tables, unique indexes, file storage, and job links are healthy, and its Run compatibility test button checks your application form, REST API, job pages, and anti-spam challenge for firewall, caching, or server blockers in one click.
The same tab has a Support report card that copies or downloads all of this as plain text, with no candidate personal data in it. That is exactly what you will want to share when you ask for help.
Since v0.32.7, the same snapshot also sits in a Vakanssi panel on WordPress’s own Tools, then Site Health, then Info tab, so it is already included if your host or support contact asks you to copy site info from there.
Getting help
If none of this solves it, ask in the Vakanssi support forum on WordPress.org. It is the main public support channel, and the answers help the next person with the same problem. Paste your Support report into your post: it carries no candidate personal data.
Never post anything about a real candidate in the forum, since every post there is public. For questions that involve candidate data, or about licensing, email hello@vakanssi.com instead. Security issues go to security@vakanssi.com, as described in Security.