Skip to main content
Level 2
June 21, 2024
해결됨

/content/dam assets - adding a meta robots tag

  • June 21, 2024
  • 3 답변들
  • 1180 조회

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.

이 주제는 답변이 닫혔습니다.
최고의 답변: 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 }

  

3 답변

arunpatidar
Community Advisor
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
asdasdsa작성자
Level 2
June 21, 2024

Works perfectly, thank you very much!

TinaChen12
Level 2
June 23, 2024

Thanks!