API endpoint:
https://hubs.vn/api/v1/crawler
Yêu cầu ví dụ:
curl --location --request GET 'https://hubs.vn/api/v1/crawler' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {api_key}'
urlResponse example:
{
"data": {
"title": {
"passed": boolean,
"importance": "high",
"value": string,
"errors": {
// If there's no title
"missing": null,
// If the title length is incorrect
"length": {
"min": number,
"max": number
},
// If the title is > 1
"too_many": null
}
},
"meta_description": {
"passed": boolean,
"importance": "high",
"value": string,
"errors": {
"missing": null // If there's no meta description
}
},
"headings": {
"passed": boolean,
"importance": "high",
"value": {
"h1": [],
"h3": [],
"h5": [],
"h6": []
},
"errors": {
"missing": null, // If there's no h1 tag
"too_many": null, // If there's more than one h1 tag on the page
"duplicate": null // If the h1 tag is the same with the title tag
}
},
"content_keywords": {
"passed": boolean,
"importance": "high",
"value": [],
"errors": {
"missing": [] // If the content keywords are not found in the title
}
},
"image_keywords": {
"passed": boolean,
"importance": "high",
"value": null,
"errors": {
// If there are images with no alt attribute set
"missing": [
{
"url": string,
"text": string
}
]
}
},
"image_format": {
"passed": boolean,
"importance": "medium",
"value": [],
"errors": {
// If there are images that are not in WebP format
"bad_format": [
{
"url": string,
"text": string
}
]
}
},
"in_page_links": {
"passed": boolean,
"importance": "medium",
"value": {
"Internals": [
{
"url": string,
"text": string
}
],
"Externals": [
{
"url": string,
"text": string
}
]
},
"errors": {
// If there are too many links
"too_many": {
"max": number
}
}
},
"load_time": {
"passed": boolean,
"importance": "medium",
"value": float,
"errors": {
// If the load time exceeds the limit
"too_slow": {
"max": integer
}
}
},
"page_size": {
"passed": boolean,
"importance": "medium",
"value": integer,
"errors": {
// If the load time exceeds the limit
"too_large": {
"max": integer
}
}
},
"http_requests": {
"passed": boolean,
"importance": "medium",
"value": {
"JavaScripts": [],
"CSS": [],
"Images": [],
"Audios": [],
"Videos": [],
"Iframes": []
},
"errors": {
// If there are too many HTTP requests
"too_many": {
"max": integer
}
}
},
"defer_javascript": {
"passed": boolean,
"importance": "low",
"value": null,
"errors": {
// If there are resources without the defer attribute
"missing": []
}
},
"dom_size": {
"passed": boolean,
"importance": "low",
"value": integer,
"errors": {
// If the dom size exceeds the limit
"too_many": {
"max": integer
}
}
},
"text_compression": {
"passed": boolean,
"importance": "high",
"value": integer,
"errors": {
// If the page is not text_compression compressed
"missing": null
}
},
"structured_data": {
"passed": boolean,
"importance": "medium",
"value": [],
"errors": {
// If there's no structured data
"missing": null
}
},
"meta_viewport": {
"passed": boolean,
"importance": "medium",
"value": string,
"errors": {
// If the page does not have a meta viewport set
"missing": null
}
},
"https_encryption": {
"passed": boolean,
"importance": "high",
"value": string,
"errors": {
// If the page is not served over HTTPS
"missing": "https"
}
},
"seo_friendly_url": {
"passed": boolean,
"importance": "high",
"value": string,
"errors": {
// If the URL contains characters that are not considered friendly (?=_%, )
"bad_format": null,
// If the title keywords are not found in URL keywords
"missing": null
}
},
"language": {
"passed": boolean,
"importance": "medium",
"value": string,
"errors": {
// If the page doesn't have a language set
"missing": null
}
},
"favicon": {
"passed": boolean,
"importance": "medium",
"value": string,
"errors": {
// If the page doesn't have a favicon
"missing": null
}
},
"content_length": {
"passed": boolean,
"importance": "low",
"value": integer,
"errors": {
// If there are not enough words on the page
"too_few": {
"min": integer
}
}
},
"text_html_ratio": {
"passed": boolean,
"importance": "low",
"value": integer,
"errors": {
// If the text ratio is less than the minimum ratio
"too_small": {
"min": integer
}
}
},
"charset": {
"passed": boolean,
"importance": "medium",
"value": string,
"errors": {
// If the page doesn't have a charset set
"missing": null
}
},
"deprecated_html_tags": {
"passed": boolean,
"importance": "low",
"value": null,
"errors": {
// If the page has deprecated HTML tags
"bad_tags": []
}
},
"404_page": {
"passed": boolean,
"importance": "high",
"value": string,
"errors": {
// If the website does not have a 404 page
"missing": null
}
},
"noindex": {
"passed": boolean,
"importance": "high",
"value": string,
"errors": {
// If the website has noindex
"missing": null
}
},
"robots": {
"passed": boolean,
"importance": "high",
"value": null,
"errors": {
// If the page is blocked by robots.txt rule
"failed": []
}
},
"sitemap": {
"passed": boolean,
"importance": "low",
"value": [],
"errors": {
// If the website does not have sitemaps
"failed": null
}
},
"mixed_content": {
"passed": boolean,
"importance": "medium",
"value": null,
"errors": {
// If the website does not have sitemaps
"failed": []
}
},
"server_signature": {
"passed": boolean,
"importance": "medium",
"value": [],
"errors": {
// If the page has a server signature
"failed": null
}
},
"unsafe_cross_origin_links": {
"passed": boolean,
"importance": "medium",
"value": null,
"errors": {
// If there are unsafe cross-origin links
"failed": []
}
},
"plaintext_email": {
"passed": boolean,
"importance": "low",
"value": null,
"errors": {
// If there are plaintext emails
"failed": string
}
},
"social": {
"passed": boolean,
"importance": "low",
"value": {
// Facebook, Instagram, Youtube, Twitter, LinkedIn
"Facebook": [
{
"url": string,
"text": string
}
],
},
"errors": {
// If there's no social links
"missing": null
}
},
"inline_css": {
"passed": boolean,
"importance": "low",
"value": null,
"errors": {
// If the page has inline CSS
"failed": []
}
}
},
"status": 200,
"result": float
}