docs: function isAGoodLinkToCrawl(result, currentDepth, parentUrl, link, anchor, isDoFollow, callback) {
  
    store.getStore().isStartFromUrl(parentUrl, link, function(error, startFrom){
  
          // 1. Check if we need to crawl other hosts
          if (startFrom.link.isStartFromDomain && ! startFrom.link.isStartFromHost && ! result.externalHosts) {
            log.warn({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "Don't crawl url - no external host"});
            return callback(null, {toCrawl : false, isExternal : ! startFrom.link.isStartFromDomain});
          }
  
          // 2. Check if we need to crawl other domains
          if (! startFrom.link.isStartFromDomain &&  ! result.externalDomains) {
  
            log.warn({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "Don't crawl url - no external domain"});
            return callback(null, {toCrawl : false, isExternal : ! startFrom.link.isStartFromDomain});
          }
  
          // 3. Check if we need to crawl only the first pages of external hosts/domains
          if (result.firstExternalLinkOnly &&  ((! startFrom.link.isStartFromHost) || (! startFrom.link.isStartFromDomains))) {
            if (! startFrom.parentUrl.isStartFromHost) {
              log.warn({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "Don't crawl url - External link and not the first link)"});
              return callback(null, {toCrawl : false, isExternal : ! startFrom.link.isStartFromDomain});
            }
          }
  
          // 4. Check if the link is based on a good protocol
          var protocol = URI.protocol(link);
          if (result.protocols.indexOf(protocol) < 0) {
            log.warn({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "Don't crawl url - no valid protocol : " + protocol});
            return callback(null, {toCrawl : false, isExternal : ! startFrom.link.isStartFromDomain});
          }
  
          // 5. Check if the domain is in the domain black-list
          if (result.domainBlackList.indexOf(URI.domainName(link)) > 0) {
            log.warn({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "Don't crawl url - domain is blacklisted" });
            return callback(null, {toCrawl : false, isExternal : ! startFrom.link.isStartFromDomain});
          }
  
          // 6. Check if the domain is in the suffix black-list
          var suffix = URI.suffix(link);
          if (result.suffixBlackList.indexOf(suffix) > 0) {
            log.warn({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "Don't crawl url - suffix is blacklisted"});
            return callback(null, {toCrawl : false, isExternal : ! startFrom.link.isStartFromDomain});
          }
  
          // 7. Check if there is a rule in the crawler options
          if (! result.canCrawl) {
            log.info({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "URL can be crawled"});
            return callback(null, {toCrawl : true, isExternal : ! startFrom.link.isStartFromDomain });
          }
          // TODO : asynch this function ?
          var check =  result.canCrawl(parentUrl, link, anchor, isDoFollow);
          log.debug({"url" : link, "step" : "isAGoodLinkToCrawl", "message" : "function options.canCrawl has been called and return "} + check);
          return callback(null, {toCrawl : check, isExternal : ! startFrom.link.isStartFromDomain});
  
    });
  
  }