/content/dam assets - adding a meta robots tag | Community
Skip to main content
Level 2
June 21, 2024
Solved

/content/dam assets - adding a meta robots tag

  • June 21, 2024
  • 1 reply
  • 1137 views

Hi everyone,

We are trying to add the option of making specific folder paths within our DAM non-indexable. Currently, we are handling via robots.txt but wanted to see the alternatives specifically for assets. We do have the functionality set up for pages but I couldn't seem to find anything for specific DAM content. Any insight would be greatly appreciated. Thank you.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by arunpatidar

Hi @asdasdsa 
You can use sling filters to add the X-Robots-Tag header with the value noindex, nofollow for specific DAM folders 


Sling Filter

package com.example.core.filters; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.engine.EngineConstants; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.framework.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @Component(service = Filter.class, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, Constants.SERVICE_RANKING + "=1000" }) public class XRobotsTagFilter implements Filter { private static final Logger log = LoggerFactory.getLogger(XRobotsTagFilter.class); private static final String X_ROBOTS_TAG = "X-Robots-Tag"; private static final String NOINDEX_NOFOLLOW = "noindex, nofollow"; private static final String[] DAM_FOLDERS = {"/content/dam/folder1", "/content/dam/folder2"}; @Override public void init(FilterConfig filterConfig) throws ServletException { // Initialization logic, if needed } @Override public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, FilterChain chain) throws IOException, ServletException { if (request instanceof SlingHttpServletRequest && response instanceof SlingHttpServletResponse) { SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request; SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response; ResourceResolver resourceResolver = slingRequest.getResourceResolver(); String requestPath = slingRequest.getRequestURI(); for (String folder : DAM_FOLDERS) { if (StringUtils.startsWith(requestPath, folder)) { slingResponse.setHeader(X_ROBOTS_TAG, NOINDEX_NOFOLLOW); log.debug("Added X-Robots-Tag header to the response for path: {}", requestPath); break; } } } // Continue the filter chain chain.doFilter(request, response); } @Override public void destroy() { // Cleanup logic, if needed } }

 

Config. , example osgi

import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.metatype.annotations.Designate; import org.osgi.service.metatype.annotations.ObjectClassDefinition; @Component(service = Filter.class, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, Constants.SERVICE_RANKING + "=1000" }) @Designate(ocd = XRobotsTagFilter.Config.class) public class XRobotsTagFilter implements Filter { @ObjectClassDefinition(name = "X-Robots-Tag Filter Configuration") public @interface Config { String[] dam_folders() default {"/content/dam/folder1", "/content/dam/folder2"}; } private String[] damFolders; @Activate protected void activate(Config config) { this.damFolders = config.dam_folders(); } // Rest of the code remains the same }

  

1 reply

arunpatidar
Community Advisor
arunpatidarCommunity AdvisorAccepted solution
Community Advisor
June 21, 2024

Hi @asdasdsa 
You can use sling filters to add the X-Robots-Tag header with the value noindex, nofollow for specific DAM folders 


Sling Filter

package com.example.core.filters; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.engine.EngineConstants; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.framework.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @Component(service = Filter.class, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, Constants.SERVICE_RANKING + "=1000" }) public class XRobotsTagFilter implements Filter { private static final Logger log = LoggerFactory.getLogger(XRobotsTagFilter.class); private static final String X_ROBOTS_TAG = "X-Robots-Tag"; private static final String NOINDEX_NOFOLLOW = "noindex, nofollow"; private static final String[] DAM_FOLDERS = {"/content/dam/folder1", "/content/dam/folder2"}; @Override public void init(FilterConfig filterConfig) throws ServletException { // Initialization logic, if needed } @Override public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, FilterChain chain) throws IOException, ServletException { if (request instanceof SlingHttpServletRequest && response instanceof SlingHttpServletResponse) { SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request; SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response; ResourceResolver resourceResolver = slingRequest.getResourceResolver(); String requestPath = slingRequest.getRequestURI(); for (String folder : DAM_FOLDERS) { if (StringUtils.startsWith(requestPath, folder)) { slingResponse.setHeader(X_ROBOTS_TAG, NOINDEX_NOFOLLOW); log.debug("Added X-Robots-Tag header to the response for path: {}", requestPath); break; } } } // Continue the filter chain chain.doFilter(request, response); } @Override public void destroy() { // Cleanup logic, if needed } }

 

Config. , example osgi

import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.metatype.annotations.Designate; import org.osgi.service.metatype.annotations.ObjectClassDefinition; @Component(service = Filter.class, property = { EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST, Constants.SERVICE_RANKING + "=1000" }) @Designate(ocd = XRobotsTagFilter.Config.class) public class XRobotsTagFilter implements Filter { @ObjectClassDefinition(name = "X-Robots-Tag Filter Configuration") public @interface Config { String[] dam_folders() default {"/content/dam/folder1", "/content/dam/folder2"}; } private String[] damFolders; @Activate protected void activate(Config config) { this.damFolders = config.dam_folders(); } // Rest of the code remains the same }

  

Arun Patidar
asdasdsaAuthor
Level 2
June 21, 2024

Works perfectly, thank you very much!

TinaChen12
Level 2
June 23, 2024

Thanks!