Marketing & Digital jobs
Hays works with clients across the full range of industries and job functions in the traditional marketing, communications, brand, PR, events and digital marketing realm. Our clients include enterprise and SMB’s across banking and financial services, consumer, business and professional services, industrials, the public sector and not-for-profits.
From executive and management FMCG jobs to marketing and digital jobs in the public sector, and from professional services to creative and agency jobs, Hays Marketing & Digital’s consultants have access to a range of brand executive and brand manager jobs, digital marketing executive and manager jobs, PR executive and PR manager jobs, and many more.
Our Marketing & Digital recruitment experts understand the constantly changing nature of the skills required to succeed in this area, as well as recruitment trends that emerge as organisations continue to invest. They will work with you to fulfil your career ambitions and advise you on what opportunities exist.
Search for jobs
An error occurred while processing the template.
The following has evaluated to null or missing:
==> assetEntryLocalService.getjobs("keyword", specialismId, subSpecialismId, countJobs, locale) [in template "20115#20151#81915" at line 66, column 32]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign getResponse = assetEntryLocal... [in template "20115#20151#81915" at line 66, column 9]
----
1<#assign FeaturedEmployerTitle = FeaturedEmployerTitle.getData()>
2<#assign PopularSearchesTitle = PopularSearchesTitle.getData()>
3<#assign LatestJobsTitle = LatestJobsTitle.getData()>
4<#assign tabsLabels = "">
5<#assign featuredCount = 0>
6<#assign latestJobsCount = 0>
7<#assign assignedCategoriesIds = "">
8<#assign assignedCategoriesNames = "">
9<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
10<#assign plId = layout.getPlid()>
11<#assign layoutEntry = assetEntryLocalService.fetchEntry("com.liferay.portal.kernel.model.Layout", plId)>
12<#assign assetCategories = layoutEntry.getCategories()/>
13
14<#assign keyword = "">
15<#assign subSpecialismId = "">
16<#assign specialismId = "">
17<#assign parentPlid = layout.getParentPlid()>
18
19<#if FeaturedEmployerTitle != "">
20 <#assign FeaturedEmployerTitle += ','>
21 <#assign featuredEmployerService = serviceLocator.findService("com.hays.employer.service.HaysFeaturedEmployerLocalService") />
22 <#assign totalCount = 6 >
23 <#assign groupIdVal = groupId?c >
24 <#assign targetAudience = "common,jobseeker" >
25 <#list assetCategories as cat>
26 <#assign catName = cat.getCategoryId()>
27 <#assign catName += '|'>
28 <#assign assignedCategoriesIds += catName>
29 </#list>
30 <#assign assignedCategoriesIds = assignedCategoriesIds?keep_before("|")/>
31 <#assign response = featuredEmployerService.getFeaturedEmployers(assignedCategoriesIds, groupIdVal, targetAudience, totalCount)>
32 <#if response.EmpResult??>
33 <#assign EmpResultArray = response.getJSONArray("EmpResult")>
34 <#assign featuredCount = EmpResultArray.length()>
35 <#if featuredCount !=0>
36 <#assign tabsLabels += FeaturedEmployerTitle>
37 </#if>
38 </#if>
39</#if>
40
41<#if LatestJobsTitle != "">
42 <#assign LatestJobsTitle += ','>
43 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
44 <#assign nodeId = LayoutLocalService.getLayout(parentPlid).getExpandoBridge().getAttribute("NodeId")>
45 <#list assetCategories as cat>
46 <#assign catName = cat.getName()>
47 <#assign catName += '|'>
48 <#assign assignedCategoriesNames += catName>
49 </#list>
50 <#assign assignedCategoriesNames = assignedCategoriesNames?keep_before("|")/>
51 <#if nodeId == "job-seeker">
52 <#assign specialismId = assignedCategoriesNames>
53 <#else>
54 <#assign subSpecialismId = assignedCategoriesNames>
55 </#if>
56 <#assign ucmLocaleKey = themeDisplay.getLocale()+"."+siteType+"."+"ucmLocale">
57 <#assign projectSURLKey = "Mobile_URL_" + locale.getCountry()>
58 <#if (siteType != "Expert")>
59 <#assign projectSURLKey = projectSURLKey + "_"+ siteType>
60 </#if>
61 <#assign locale = propsUtil.get(ucmLocaleKey)/>
62 <#assign GCSLocales = propsUtil.get("GCSLocales")/>
63 <#assign projectSURL = propsUtil.get(projectSURLKey)/>
64 <#assign countJobs = "5">
65 <#assign assetEntryLocalService = serviceLocator.findService("com.hays.service.jobs.service.HaysJobsLocalService")/>
66 <#assign getResponse = assetEntryLocalService.getjobs("keyword", specialismId, subSpecialismId, countJobs, locale)>
67 <#if getResponse?? && getResponse.result??>
68 <#assign getResponseResult = getResponse.result>
69 <#if getResponseResult.resultCount gt 0>
70 <#assign getResponseResultArray = getResponseResult.getJSONArray("jobs")>
71 <#assign latestJobsCount = getResponseResultArray.length()>
72 <#if getResponseResultArray.length() < 5>
73 <#assign countJobs = getResponseResultArray.length()>
74 </#if>
75 <#if latestJobsCount != 0>
76 <#assign tabsLabels += LatestJobsTitle>
77 </#if>
78 </#if>
79 </#if>
80</#if>
81
82<#if PopularSearchesTitle != "">
83 <#assign PopularSearchesTitle += ','>
84 <#if Label.getSiblings()?has_content>
85 <#assign tabsLabels += PopularSearchesTitle>
86 </#if>
87</#if>
88
89<#if tabsLabels != "">
90 <div class="box">
91 <div class="hays-tabs">
92 <#assign tabsLabels = tabsLabels?keep_before_last(",")/>
93 <@liferay_ui["tabs"]
94 names=tabsLabels
95 param=tabs2
96 refresh=false
97 type=tabs
98 >
99
100 <#if FeaturedEmployerTitle != "" && featuredCount !=0>
101 <@liferay_ui["section"] >
102 <ul class="list emp-list">
103 <#list 0 ..< featuredCount as i>
104 <#assign empTitle = EmpResultArray.get(i).title>
105 <#assign empArticleId = EmpResultArray.get(i).articleId>
106 <#assign empUrl = EmpResultArray.get(i).empUrl>
107 <#assign empImage = EmpResultArray.get(i).image>
108 <li class="${empArticleId}"><a href="${empUrl}" target="_blank"><img src="${empImage}" alt="${empTitle}"></a></li>
109 </#list>
110 </ul>
111 <#assign privateLayout = false>
112 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
113 <#assign layouts = LayoutLocalService.getLayouts(groupId, privateLayout)>
114 <#assign featureEmployerPageUrl = "/">
115 <#if (layouts?size > 0)>
116 <#assign featuredEmpSectionFound = 0>
117 <#list layouts as layout>
118 <#if layout?? && featuredEmpSectionFound == 0>
119 <#assign nodeIdFeatured = layout.getExpandoBridge().getAttribute("NodeId")>
120 <#if (nodeIdFeatured??)>
121 <#if (nodeIdFeatured == "featured-employer")>
122 <#assign featuredEmpSectionFound = 1>
123 <#assign featureEmployerPageUrl = layout.getFriendlyURL()>
124 <#assign portalurl= themeDisplay.getURLPortal() >
125 <#if portalurl?contains("expertcontrib")>
126 <#assign featureEmployerPageUrl= "/web"+themeDisplay.getSiteGroup().getFriendlyURL()+ featureEmployerPageUrl >
127 </#if>
128 </#if>
129 </#if>
130 </#if>
131 </#list>
132 </#if>
133 <a class="btn" href="${featureEmployerPageUrl}">${languageUtil.get(themeDisplay.getLocale(), "lr_featuredEmployersTitle")}</a>
134 </@>
135 </#if>
136
137 <#if LatestJobsTitle != "" && latestJobsCount != 0 >
138 <@liferay_ui["section"]>
139 <ul class="list sponsored-list">
140 <#list 0 ..< countJobs?number as i>
141 <#assign JobUrl = getResponseResultArray.get(i).jobRequisitionId>
142 <#if GCSLocales?contains(locale)>
143 <#assign JobUrl += "?jobSource=HaysGCJ">
144 </#if>
145 <#assign jobtitle = getResponseResultArray.get(i).title>
146 <#if getResponseResultArray.get(i).getJSONObject("nonFilterableCustomFields").has("xLocationDescription")>
147 <#assign location = getResponseResultArray.get(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xLocationDescription").getJSONArray("values").getString(0)>
148 <#else>
149 <#assign location = "">
150 </#if>
151 <li><a data-senna-off="true" href="${JobUrl}"><strong>${jobtitle}</strong><small><p>${location}</p></small></a></li>
152 </#list>
153 </ul>
154 <a class="btn" href="${projectSURL}${propsUtil.get("SEARCH")}?q=hays&specialismId=${specialismId}&subSpecialismId=${subSpecialismId}"><span>${languageUtil.get(themeDisplay.getLocale(), "lr_latestAllJobs")}</span></a>
155 </@>
156 </#if>
157
158 <#if PopularSearchesTitle != "">
159 <@liferay_ui["section"]>
160 <#if Label.getSiblings()?has_content>
161 <ul class="list arrow-list">
162 <#list Label.getSiblings() as cur_PopularSearchesContent>
163 <#if cur_PopularSearchesContent?? && cur_PopularSearchesContent.getData()?has_content>
164 <li >
165 <h3><a target="_blank" href="${cur_PopularSearchesContent.Link.getData()}">${cur_PopularSearchesContent.getData()}</a></h3>
166 </li>
167 </#if>
168 </#list>
169 </ul>
170 </#if>
171 </@>
172 </#if>
173 </div>
174 </div>
175</@>
176</#if>

Are you being paid what you're worth?
Whether you are looking for a new job or a pay rise, it helps to understand what your potential earnings could be.
Salary Guide
A comprehensive report providing you salary and recruitment trends to guide your talent strategy for the year

Register now
Start your job search by registering your CV and signing up to job alerts.

Career Advice
Our career advice pages cover all stages of the job search process, or contact a Hays consultant for further advice.