This commit is contained in:
oliver committed 2026-08-28 10:11:11 -03:00
1 parent f533ff8e36
commit 585951c8ce
1380 files changed
+1540268

No files matched your search

+557
View File
@@ -0,0 +1,557 @@
<html>
<head>
<meta charset="utf-8">
<style>
:root {
overflow: hidden;
}
.svg {
background-color: white;
}
.node text {
font-size: 10px;
}
.node circle {
fill: #457118;
stroke: #457118;
stroke-width: 1px;
}
path {
fill: none;
stroke: #ccc;
stroke-width: 1px;
}
</style>
<style>
div#placeholder {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
font-size: 20px;
color: rgb(180, 180, 180);
font-weight: 700;
line-height: 34px;
margin: 0 auto;
text-align: center;
}
</style>
<style>
.d3-context-menu {
position: absolute;
display: none;
background-color: #f2f2f2;
border-radius: 4px;
font-family: sans-serif;
font-size: 14px;
min-width: 150px;
border: 1px solid #d4d4d4;
z-index:1200;
}
.d3-context-menu ul {
list-style-type: none;
margin: 4px 0px;
padding: 0px;
cursor: default;
}
.d3-context-menu ul li {
padding: 4px 16px;
}
.d3-context-menu ul li:hover {
background-color: #73b72b;
color: #fefefe;
}
</style>
<style>
div.tooltip {
text-align: left;
}
div.tooltip ul {
padding: 0;
margin: 0;
list-style-type: none;
line-height: 1.2em;
font-size: 14px;
}
.d3-tip {
font-family: sans-serif;
word-wrap: break-word;
max-width: 500px;
line-height: 1;
padding: 12px;
background: #73b72b;
color: #ffffff;
border-radius: 3px;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
/* Creates a small triangle extender for the tooltip */
.d3-tip:after {
box-sizing: border-box;
display: inline;
font-size: 10px;
width: 100%;
line-height: 1;
color: #73b72b;
content: "\25BC";
position: absolute;
text-align: center;
}
/* Style northward tooltips differently */
.d3-tip.n:after {
margin: -1px 0 0 0;
top: 100%;
left: 0;
}
</style>
</head>
<body>
<svg class="svg">
<g></g>
</svg>
<div id="placeholder"></div>
</body>
<script>
// https://d3js.org Version 5.5.0. Copyright 2018 Mike Bostock.
(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function e(t){return 1===t.length&&(t=function(t){return function(e,r){return n(t(e),r)}}(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)>0?i=o:r=o+1}return r}}}function r(t,n){return[t,n]}function i(t){return null===t?NaN:+t}function o(t,n){var e,r,o=t.length,a=0,u=-1,f=0,c=0;if(null==n)for(;++u<o;)isNaN(e=i(t[u]))||(c+=(r=e-f)*(e-(f+=r/++a)));else for(;++u<o;)isNaN(e=i(n(t[u],u,t)))||(c+=(r=e-f)*(e-(f+=r/++a)));if(a>1)return c/(a-1)}function a(t,n){var e=o(t,n);return e?Math.sqrt(e):e}function u(t,n){var e,r,i,o=t.length,a=-1;if(null==n){for(;++a<o;)if(null!=(e=t[a])&&e>=e)for(r=i=e;++a<o;)null!=(e=t[a])&&(r>e&&(r=e),i<e&&(i=e))}else for(;++a<o;)if(null!=(e=n(t[a],a,t))&&e>=e)for(r=i=e;++a<o;)null!=(e=n(t[a],a,t))&&(r>e&&(r=e),i<e&&(i=e));return[r,i]}function f(t){return function(){return t}}function c(t){return t}function s(t,n,e){t=+t,n=+n,e=(i=arguments.length)<2?(n=t,t=0,1):i<3?1:+e;for(var r=-1,i=0|Math.max(0,Math.ceil((n-t)/e)),o=new Array(i);++r<i;)o[r]=t+r*e;return o}function l(t,n,e){var r,i,o,a,u=-1;if(n=+n,t=+t,e=+e,t===n&&e>0)return[t];if((r=n<t)&&(i=t,t=n,n=i),0===(a=h(t,n,e))||!isFinite(a))return[];if(a>0)for(t=Math.ceil(t/a),n=Math.floor(n/a),o=new Array(i=Math.ceil(n-t+1));++u<i;)o[u]=(t+u)*a;else for(t=Math.floor(t*a),n=Math.ceil(n*a),o=new Array(i=Math.ceil(t-n+1));++u<i;)o[u]=(t-u)/a;return r&&o.reverse(),o}function h(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=is?10:o>=os?5:o>=as?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=is?10:o>=os?5:o>=as?2:1)}function d(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=is?i*=10:o>=os?i*=5:o>=as&&(i*=2),n<t?-i:i}function p(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function v(t,n,e){if(null==e&&(e=i),r=t.length){if((n=+n)<=0||r<2)return+e(t[0],0,t);if(n>=1)return+e(t[r-1],r-1,t);var r,o=(r-1)*n,a=Math.floor(o),u=+e(t[a],a,t);return u+(+e(t[a+1],a+1,t)-u)*(o-a)}}function g(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o<i;)if(null!=(e=t[o])&&e>=e)for(r=e;++o<i;)null!=(e=t[o])&&e>r&&(r=e)}else for(;++o<i;)if(null!=(e=n(t[o],o,t))&&e>=e)for(r=e;++o<i;)null!=(e=n(t[o],o,t))&&e>r&&(r=e);return r}function y(t){for(var n,e,r,i=t.length,o=-1,a=0;++o<i;)a+=t[o].length;for(e=new Array(a);--i>=0;)for(n=(r=t[i]).length;--n>=0;)e[--a]=r[n];return e}function _(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o<i;)if(null!=(e=t[o])&&e>=e)for(r=e;++o<i;)null!=(e=t[o])&&r>e&&(r=e)}else for(;++o<i;)if(null!=(e=n(t[o],o,t))&&e>=e)for(r=e;++o<i;)null!=(e=n(t[o],o,t))&&r>e&&(r=e);return r}function b(t){if(!(i=t.length))return[];for(var n=-1,e=_(t,m),r=new Array(e);++n<e;)for(var i,o=-1,a=r[n]=new Array(i);++o<i;)a[o]=t[o][n];return r}function m(t){return t.length}function x(t){return t}function w(t){return"translate("+(t+.5)+",0)"}function M(t){return"translate(0,"+(t+.5)+")"}function A(){return!this.__axis}function T(t,n){function e(e){var h=null==i?n.ticks?n.ticks.apply(n,r):n.domain():i,d=null==o?n.tickFormat?n.tickFormat.apply(n,r):x:o,p=Math.max(a,0)+f,v=n.range(),g=+v[0]+.5,y=+v[v.length-1]+.5,_=(n.bandwidth?function(t){var n=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(n=Math.round(n)),function(e){return+t(e)+n}}:function(t){return function(n){return+t(n)}})(n.copy()),b=e.selection?e.selection():e,m=b.selectAll(".domain").data([null]),w=b.selectAll(".tick").data(h,n).order(),M=w.exit(),T=w.enter().append("g").attr("class","tick"),N=w.select("line"),S=w.select("text");m=m.merge(m.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(T),N=N.merge(T.append("line").attr("stroke","#000").attr(s+"2",c*a)),S=S.merge(T.append("text").attr("fill","#000").attr(s,c*p).attr("dy",t===fs?"0em":t===ss?"0.71em":"0.32em")),e!==b&&(m=m.transition(e),w=w.transition(e),N=N.transition(e),S=S.transition(e),M=M.transition(e).attr("opacity",hs).attr("transform",function(t){return isFinite(t=_(t))?l(t):this.getAttribute("transform")}),T.attr("opacity",hs).attr("transform",function(t){var n=this.parentNode.__axis;return l(n&&isFinite(n=n(t))?n:_(t))})),M.remove(),m.attr("d",t===ls||t==cs?"M"+c*u+","+g+"H0.5V"+y+"H"+c*u:"M"+g+","+c*u+"V0.5H"+y+"V"+c*u),w.attr("opacity",1).attr("transform",function(t){return l(_(t))}),N.attr(s+"2",c*a),S.attr(s,c*p).text(d),b.filter(A).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===cs?"start":t===ls?"end":"middle"),b.each(function(){this.__axis=_})}var r=[],i=null,o=null,a=6,u=6,f=3,c=t===fs||t===ls?-1:1,s=t===ls||t===cs?"x":"y",l=t===fs||t===ss?w:M;returLine truncated
</script>
<script>
// d3.tip
// Copyright (c) 2013 Justin Palmer
// ES6 / D3 v4 Adaption Copyright (c) 2016 Constantin Gavrilete
// Removal of ES6 for D3 v4 Adaption Copyright (c) 2016 David Gotz
//
// Tooltips for d3.js SVG visualizations
d3.functor = function functor(v) {
return typeof v === "function" ? v : function() {
return v;
};
};
d3.tip = function() {
var direction = d3_tip_direction,
offset = d3_tip_offset,
html = d3_tip_html,
node = initNode(),
svg = null,
point = null,
target = null
function tip(vis) {
svg = getSVGNode(vis)
point = svg.createSVGPoint()
document.body.appendChild(node)
}
// Public - show the tooltip on the screen
//
// Returns a tip
tip.show = function() {
var args = Array.prototype.slice.call(arguments)
if(args[args.length - 1] instanceof SVGElement) target = args.pop()
var content = html.apply(this, args),
poffset = offset.apply(this, args),
dir = direction.apply(this, args),
nodel = getNodeEl(),
i = directions.length,
coords,
scrollTop = document.documentElement.scrollTop || document.body.scrollTop,
scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
nodel.html(content)
.style('position', 'absolute')
.style('opacity', 1)
.style('pointer-events', 'all')
while(i--) nodel.classed(directions[i], false)
coords = direction_callbacks[dir].apply(this)
nodel.classed(dir, true)
.style('top', (coords.top + poffset[0]) + scrollTop + 'px')
.style('left', (coords.left + poffset[1]) + scrollLeft + 'px')
return tip
}
// Public - hide the tooltip
//
// Returns a tip
tip.hide = function() {
var nodel = getNodeEl()
nodel
.style('opacity', 0)
.style('pointer-events', 'none')
return tip
}
// Public: Proxy attr calls to the d3 tip container. Sets or gets attribute value.
//
// n - name of the attribute
// v - value of the attribute
//
// Returns tip or attribute value
tip.attr = function(n, v) {
if (arguments.length < 2 && typeof n === 'string') {
return getNodeEl().attr(n)
} else {
var args = Array.prototype.slice.call(arguments)
d3.selection.prototype.attr.apply(getNodeEl(), args)
}
return tip
}
// Public: Proxy style calls to the d3 tip container. Sets or gets a style value.
//
// n - name of the property
// v - value of the property
//
// Returns tip or style property value
tip.style = function(n, v) {
if (arguments.length < 2 && typeof n === 'string') {
return getNodeEl().style(n)
} else {
var args = Array.prototype.slice.call(arguments);
if (args.length === 1) {
var styles = args[0];
Object.keys(styles).forEach(function(key) {
return d3.selection.prototype.style.apply(getNodeEl(), [key, styles[key]]);
});
}
}
return tip
}
// Public: Set or get the direction of the tooltip
//
// v - One of n(north), s(south), e(east), or w(west), nw(northwest),
// sw(southwest), ne(northeast) or se(southeast)
//
// Returns tip or direction
tip.direction = function(v) {
if (!arguments.length) return direction
direction = v == null ? v : d3.functor(v)
return tip
}
// Public: Sets or gets the offset of the tip
//
// v - Array of [x, y] offset
//
// Returns offset or
tip.offset = function(v) {
if (!arguments.length) return offset
offset = v == null ? v : d3.functor(v)
return tip
}
// Public: sets or gets the html value of the tooltip
//
// v - String value of the tip
//
// Returns html value or tip
tip.html = function(v) {
if (!arguments.length) return html
html = v == null ? v : d3.functor(v)
return tip
}
// Public: destroys the tooltip and removes it from the DOM
//
// Returns a tip
tip.destroy = function() {
if(node) {
getNodeEl().remove();
node = null;
}
return tip;
}
function d3_tip_direction() { return 'n' }
function d3_tip_offset() { return [0, 0] }
function d3_tip_html() { return ' ' }
var direction_callbacks = {
n: direction_n,
s: direction_s,
e: direction_e,
w: direction_w,
nw: direction_nw,
ne: direction_ne,
sw: direction_sw,
se: direction_se
};
var directions = Object.keys(direction_callbacks);
function direction_n() {
var bbox = getScreenBBox()
return {
top: bbox.n.y - node.offsetHeight,
left: bbox.n.x - node.offsetWidth / 2
}
}
function direction_s() {
var bbox = getScreenBBox()
return {
top: bbox.s.y,
left: bbox.s.x - node.offsetWidth / 2
}
}
function direction_e() {
var bbox = getScreenBBox()
return {
top: bbox.e.y - node.offsetHeight / 2,
left: bbox.e.x
}
}
function direction_w() {
var bbox = getScreenBBox()
return {
top: bbox.w.y - node.offsetHeight / 2,
left: bbox.w.x - node.offsetWidth
}
}
function direction_nw() {
var bbox = getScreenBBox()
return {
top: bbox.nw.y - node.offsetHeight,
left: bbox.nw.x - node.offsetWidth
}
}
function direction_ne() {
var bbox = getScreenBBox()
return {
top: bbox.ne.y - node.offsetHeight,
left: bbox.ne.x
}
}
function direction_sw() {
var bbox = getScreenBBox()
return {
top: bbox.sw.y,
left: bbox.sw.x - node.offsetWidth
}
}
function direction_se() {
var bbox = getScreenBBox()
return {
top: bbox.se.y,
left: bbox.e.x
}
}
function initNode() {
var node = d3.select(document.createElement('div'))
node
.style('position', 'absolute')
.style('top', 0)
.style('opacity', 0)
.style('pointer-events', 'none')
.style('box-sizing', 'border-box')
return node.node()
}
function getSVGNode(el) {
el = el.node()
if(el.tagName.toLowerCase() === 'svg')
return el
return el.ownerSVGElement
}
function getNodeEl() {
if(node === null) {
node = initNode();
// re-add node to DOM
document.body.appendChild(node);
};
return d3.select(node);
}
// Private - gets the screen coordinates of a shape
//
// Given a shape on the screen, will return an SVGPoint for the directions
// n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest),
// sw(southwest).
//
// +-+-+
// | |
// + +
// | |
// +-+-+
//
// Returns an Object {n, s, e, w, nw, sw, ne, se}
function getScreenBBox() {
var targetel = target || d3.event.target;
while ('undefined' === typeof targetel.getScreenCTM && 'undefined' === targetel.parentNode) {
targetel = targetel.parentNode;
}
var bbox = {},
matrix = targetel.getScreenCTM(),
tbbox = targetel.getBBox(),
width = tbbox.width,
height = tbbox.height,
x = tbbox.x,
y = tbbox.y
point.x = x
point.y = y
bbox.nw = point.matrixTransform(matrix)
point.x += width
bbox.ne = point.matrixTransform(matrix)
point.y += height
bbox.se = point.matrixTransform(matrix)
point.x -= width
bbox.sw = point.matrixTransform(matrix)
point.y -= height / 2
bbox.w = point.matrixTransform(matrix)
point.x += width
bbox.e = point.matrixTransform(matrix)
point.x -= width / 2
point.y -= height / 2
bbox.n = point.matrixTransform(matrix)
point.y += height
bbox.s = point.matrixTransform(matrix)
return bbox
}
return tip
};
</script>
<script>
d3.contextMenu = function (menu, openCallback) {
// create the div element that will hold the context menu
d3.selectAll('.d3-context-menu').data([1])
.enter()
.append('div')
.attr('class', 'd3-context-menu');
// close menu
d3.select('body').on('click.d3-context-menu', function() {
d3.select('.d3-context-menu').style('display', 'none');
});
// this gets executed when a contextmenu event occurs
return function(data, index) {
var elm = this;
d3.selectAll('.d3-context-menu').html('');
var list = d3.selectAll('.d3-context-menu').append('ul');
list.selectAll('li')
.data(menu().filter(d => !d.show || d.show(data))) // if we have a show function, use to determine whether to show the menu otherwise always show it
.enter()
.append('li')
.html(function(d) {
return d.title(data);
})
.on('click', function(d, i) {
d.action(elm, data, index);
d3.select('.d3-context-menu').style('display', 'none');
});
// the openCallback allows an action to fire before the menu is displayed
// an example usage would be closing a tooltip
if (openCallback) openCallback(data, index);
// display context menu
d3.select('.d3-context-menu')
.style('left', (d3.event.pageX - 2) + 'px')
.style('top', (d3.event.pageY - 2) + 'px')
.style('display', 'block');
d3.event.preventDefault();
};
};
</script>
<script>
'use strict';var cssHelpers={getCssRules:function(){let a=document.styleSheets[0].cssRules;return Object.keys(a).map(b=>a[b].cssText).join("\n")},setCssRule:function(a,b,e){return this.filterCssRules(a).style[b]=e},filterCssRules:function(a){for(var b=window.document.styleSheets,e=b.length,d=0;d<e;d++){var c=b[d].rules||b[d].cssRules;if(c)for(var h=c.length,f=0;f<h;f++)if(c[f].selectorText==a)return c[f]}},rgbIntToCssHex:function(a){return"#"+("000000"+a.toString(16).toUpperCase()).slice(-6)},rgbToHsl:function(a){var b=
(a>>>16&255)/255,e=(a>>>8&255)/255;a=(a&255)/255;var d=Math.max(b,e,a),c=Math.min(b,e,a),h=(d+c)/2;if(d==c)var f=c=0;else{var g=d-c;c=h>.5?g/(2-d-c):g/(d+c);switch(d){case b:f=(e-a)/g+(e<a?6:0);break;case e:f=(a-b)/g+2;break;case a:f=(b-e)/g+4}f/=6}return{h:Math.round(f*360),s:Math.round(c*100),l:Math.round(h*100)}}};
</script>
<script>
'use strict';class Searcher{constructor(a,b,c,d){this.width=a;this.height=b;this.zoom=c;this.scales=d;this.index=-1;this.node=null}update(a,b,c,d){this.width=a;this.height=b;this.zoom=c;this.scales=d;this.node=null}search(a){this._unselectPrevious();let b=0;a&&a!=""&&(this.index=-1,this.d3Nodes=d3.selectAll("svg g .node").filter(c=>c.data.node_name.includes(a)),this.d3Nodes=this.d3Nodes.sort(function(c,d){return c.data.node_name.length-d.data.node_name.length}),b=this.d3Nodes.size());return b}searchNext(a){let b=
Math.min(this.d3Nodes.size()-1,this.index+1),c=this._getNode(b);c.node()&&(this._highlightNode(c),a&&this.centerOnNode(),this.index=b);return this.index+1}searchPrev(a){let b=Math.max(0,this.index-1),c=this._getNode(b);c.node()&&(this._highlightNode(c),a&&this.centerOnNode(),this.index=b);return this.index+1}centerOnNode(){var a=this.node;let b=d3.select("svg");var c=d3.zoomTransform(b.node());b.call(this.zoom.scaleBy,1/c.k);var d=0,f=0;a.node().transform.baseVal.consolidate()&&(f=a.node().transform.baseVal.consolidate().matrix,
d=f.e,f=f.f);c=d3.zoomTransform(b.node());a=-c.x;c=-c.y;d=this.width()/2-d+a;f=this.height()/2-f+c;b.transition().duration(250).call(this.zoom.translateBy,d,f)}_getNode(a){return d3.select(this.d3Nodes.nodes()[a])}_unselectPrevious(){this.node&&this.node.select("circle").style("fill",this.scales.colour).attr("r",this.scales.circle)}_highlightNode(a){this._unselectPrevious();a.select("circle").style("fill","rgb(254, 254, 81)").attr("r",b=>Math.min(this.scales.circle(b)*3,30));a.raise();this.node=a}}
let treeVisHelpers={isNonIndexable:a=>a.data.hasOwnProperty("nonIndexableReason"),isLeaf:a=>a._children==null,setPlaceholder:function(a){if(a){d3.select("body svg").style("display","none");let b=document.getElementById("placeholder");b.innerHTML=a;b.style.display="block"}},clearPlaceholder:function(){d3.select("body svg").style("display","block");document.getElementById("placeholder").style.display="none"},chartSave:function(a){a=(new XMLSerializer).serializeToString(d3.select("svg").node());let b=
'\x3cdefs\x3e\x3cstyle type\x3d"text/css"\x3e\x3c![CDATA[\n'+cssHelpers.getCssRules()+"]]\x3e\x3c/style\x3e\x3c/defs\x3e",c=a.indexOf("\x3e")+1;a=a.substr(0,c)+"\n"+b+a.substr(c);java.jsToJavaSaveSvg(a)},showProgress:function(){d3.select("body svg").style("display","none");d3.select("#progressbar").style("display","block");this.updateProgress(0)},updateProgress:function(a){document.getElementById("progressbar").style.width=a+"%"},hideProgress:function(){d3.select("body svg").style("display","block");
d3.select("#progressbar").style("display","none");this.updateProgress(0)}};
function spiderUrltoolTipHtml(a){return"\x3cli\x3e\x3cbr/\x3e\x3c/li\x3e"+getTooltipLine(a.data.page_title,"visualisations.page_title.label")+(treeVisHelpers.isNonIndexable(a)?getTooltipLine(a.data.nonIndexableReason,"indexability.non_indexable"):"")+getTooltipLine(a.data.response_code,"visualisations.response_code.label")+getTooltipLine(a.data.h1,"visualisations.h1.label")+getTooltipLine(a.data.h2,"visualisations.h2.label")+getTooltipLine(a.data.crawl_depth,"table.column.crawl_depth")+getTooltipLine(a.data.unique_inlinks,
"table.column.unique_inlinks")+getTooltipLine(a.data.unique_outlinks,"table.column.unique_outlinks")+getTooltipLine(a.data.followed_outlinks,"visualisations.followed_outlinks.label")+getTooltipLine(a.data.percent_of_total,"table.column.percent_of_total")+getTooltipLine(a.data.word_count,"table.column.word_count")+getTooltipLine(a.data.ga_sessions,"visualisations.ga_sessions.label")+getTooltipLine(a.data.ga4_sessions,"visualisations.ga4_sessions.label")+getTooltipLine(a.data.gsc_clicks,"visualisations.gsc_clicks.label")+
getTooltipLine(a.data.gsc_impressions,"visualisations.gsc_impressions.label")+getTooltipLine(a.data.ahrefs_url_rating,"visualisations.ahrefs_url_rating.label")+getTooltipLine(a.data.moz_page_authority,"visualisations.moz_page_authority.label")+getTooltipLine(a.data.link_score,"visualisations.link_score.label")+getTooltipLine(a.data.structured_data_error_count,"visualisations.structured_data_error_count.label")+getTooltipLine(a.data.structured_data_total_types,"visualisations.structured_data_total_types.label")+
getTooltipLine(a.data.pagespeed_score,"visualisations.pagespeed_score.label")}function getTooltipLine(a,b){return a===null||a===void 0?"":"\x3cli\x3e\x3cstrong\x3e"+jsToJavaGetKey(b)+": \x3c/strong\x3e "+a+"\x3c/li\x3e"}function jsToJavaGetKey(a){return typeof java==="undefined"?translation_keys[a]:java.jsToJavaGetKey(a)}function focusHereMenuItem(a){return{title:function(b){return jsToJavaGetKey("visualisations.context_menu.focus_here")},action:function(b,c,d){java.jsToJavaNodeFocus(a(c))}}}
function copyMenuItem(a){return{title:function(b){return jsToJavaGetKey("visualisations.context_menu.copy")},action:function(b,c,d){window.java===void 0?(b=a(c),c=document.createElement("textarea"),document.body.appendChild(c),c.value=b,c.select(),document.execCommand("copy"),document.body.removeChild(c)):java.jsToJavaNodeCopy(a(c))}}}
function openInBrowserMenuItem(a){return{title:function(b){return jsToJavaGetKey("visualisations.context_menu.open_in_browser")},action:function(b,c,d){window.java===void 0?window.open(a(c)):java.jsToJavaOpenInBrowser(a(c))}}}function getRightClickMenuArray(a,b){b=[].concat(b);window.java&&b.push(focusHereMenuItem(a));b.push(copyMenuItem(a));b.push(openInBrowserMenuItem(a));return b}
function CrawlMapStrategy(a,b){function c(e){return e.data.encoded_url}let d={lastUrlPathComponent:e=>{(e=e.data.display_url)&&e!=="/"?(e=e.split("/"),e=e.pop()||e.pop()):e="/";return e},page_title:e=>e.data.page_title,h1:e=>e.data.h1,h2:e=>e.data.h2},f=d.lastUrlPathComponent;return{setNodeLabel:function(e){f=d[e]},textGetter:function(e){return e.depth>a.textDisplayDepth-1?"":f(e)},toolTipHtml:function(e){return"\x3cdiv class\x3d'tooltip'\x3e\x3cul\x3e\x3cli\x3e\x3cstrong\x3e"+jsToJavaGetKey("visualisations.url.label")+
": \x3c/strong\x3e "+e.data.display_url+"\x3c/li\x3e"+spiderUrltoolTipHtml(e)+"\x3c/ul\x3e\x3cdiv\x3e"},focussedNodeName:c,rightClickMenu:function(){return getRightClickMenuArray(c,b)}}}
function DirectoryStrategy(a,b){function c(d){let f=[];for(;d;){let e=d.data.node_name;f.length==0||e.endsWith("/")||(e+="/");f.push(e);d=d.parent}f.reverse();f.shift();return f.join("").replace(/(http[s]?)/,"$1:/")}return{setNodeLabel:function(d){},textGetter:function(d){return d.depth>a.textDisplayDepth-1?"":d.data.node_name},toolTipHtml:function(d){let f="\x3cdiv class\x3d'tooltip'\x3e\x3cul\x3e\x3cli\x3e\x3cstrong\x3e"+jsToJavaGetKey("visualisations.tree_path.label")+": \x3c/strong\x3e"+c(d)+
"\x3c/li\x3e";d.data.display_url&&(f+=spiderUrltoolTipHtml(d));return f+"\x3c/ul\x3e\x3cdiv\x3e"},focussedNodeName:c,rightClickMenu:function(){return getRightClickMenuArray(c,b)}}}function strategyFactory(a,b,c){let d;b==="DIRECTORY"?d=DirectoryStrategy(a,c):b==="CRAWL_MAP"&&(d=CrawlMapStrategy(a,c));return d};
</script>
<script>
'use strict';const WINDOW_MARGIN=16,DEFAULT_NODE_SIZE=4.5,TEXT_OFFSET=10;
function createOrientation(a,c,g){const d={"top-to-bottom":{x:b=>b.x,y:b=>b.y,x0:b=>b.x0,y0:b=>b.y0,textAnchorAttr:"middle",textOffsetXattr:()=>0,textOffsetYattr:b=>hasChildren(b)?-TEXT_OFFSET:TEXT_OFFSET},"right-to-left":{x:b=>c-b.y,y:b=>b.x,x0:b=>c-b.y0,y0:b=>b.x0,textAnchorAttr:b=>hasChildren(b)?"start":"end",textOffsetXattr:b=>hasChildren(b)?TEXT_OFFSET:-TEXT_OFFSET,textOffsetYattr:()=>0},"bottom-to-top":{x:b=>b.x,y:b=>g-b.y,x0:b=>b.x0,y0:b=>b.y0,textAnchorAttr:"middle",textOffsetXattr:()=>0,
textOffsetYattr:b=>hasChildren(b)?TEXT_OFFSET:-TEXT_OFFSET},"left-to-right":{x:b=>b.y,y:b=>b.x,x0:b=>b.y0,y0:b=>b.x0,textAnchorAttr:b=>hasChildren(b)?"end":"start",textOffsetXattr:b=>hasChildren(b)?-TEXT_OFFSET:TEXT_OFFSET,textOffsetYattr:()=>0}}[a];d.link=a==="top-to-bottom"||a==="bottom-to-top"?(b,f)=>"M"+d.x(b)+","+d.y(b)+"C"+d.x(b)+","+(d.y(b)+d.y(f))/2+" "+d.x(f)+","+(d.y(b)+d.y(f))/2+" "+d.x(f)+","+d.y(f):(b,f)=>"M"+d.x(b)+","+d.y(b)+"C"+(d.x(b)+d.x(f))/2+","+d.y(b)+" "+(d.x(b)+d.x(f))/2+","+
d.y(f)+" "+d.x(f)+","+d.y(f);return d}function hasChildren(a){return a.children||a._children}function isCollapsed(a){return a._children&&!a.children}function setupPlaceholderChildren(a){a.children&&(a._children=a.children,a.children.forEach(setupPlaceholderChildren))}function expandToLevel(a,c){hasChildren(a)&&(a._children.forEach(g=>expandToLevel(g,c)),a.children=a.depth>=c?null:a._children)}
class TreeChart{static DEFAULTS={nodeLabel:"lastUrlPathComponent",duration:750,levelWidth:180,orientation:"left-to-right",textSizePx:12,nodeSpacing:50,visDataType:"CRAWL_MAP",expandToLevel:Number.MAX_SAFE_INTEGER,backgroundColour:16777215,textColour:0,linkColour:9474192,textDisplayDepth:9999,textRotation:0,font:"impact",fontWeight:"normal",fontStyle:"normal",showNonIndexable:!0,useLeafNodeColour:!1,nodeColour:4550936,useResponseCodeNodeColour:!1,useSegmentColour:!1,nodeColour2xx:4550936,nodeColour3xx:4550936,
nodeColour4xx:4550936,nodeColour5xx:4550936,nodeColourNoResponse:4550936,leafNodeColour:0,nonIndexableNodeColour:13184301,collapsedNodeColour:12311902,truncatedNodeColour:0,useRegExNodeColour:!1,regExNodeColour:2774453,nodeColourRegExString:""};static REACTIVE_ATTRS=new Set("orientation nodeSpacing textDisplayDepth levelWidth backgroundColour expandToLevel nodeColour leafNodeColour useLeafNodeColour nonIndexableNodeColour collapsedNodeColour useRegExNodeColour nodeColourRegExString regExNodeColour useResponseCodeNodeColour useSegmentColour nodeColour2xx nodeColour3xx nodeColour4xx nodeColour5xx nodeColourNoResponse".split(" "));constructor(){this._config=
{...TreeChart.DEFAULTS};this._root=this._tree=this._zoom=this._svg=this._svgTopLevel=null;this._height=this._width=this._idCounter=0;this._orientation=null;this._initialised=!1;this._rightClickMenu=this._tip=this._nodeColourRegEx=this._searcher=this._visStrategy=null;this._updating=!1;this._installWindowSizeListener()}run(a){this._updateWindowSize();treeVisHelpers.clearPlaceholder();this._visStrategy=strategyFactory(this._config,this._config.visDataType,[]);this._tip||(this._tip=this._installToolTip());
this._rightClickMenu||(this._rightClickMenu=this._visStrategy.rightClickMenu);d3.selection().datum(a).call(this._chartFn.bind(this));this.nodeColour(this._config.nodeColour);this.backgroundColour(this._config.backgroundColour);this.textColour(this._config.textColour);this.textSizePx(this._config.textSizePx);this.linkColour(this._config.linkColour)}search(a){return this._searcher.search(a)}searchNext(a){return this._searcher.searchNext(a)}searchPrev(a){return this._searcher.searchPrev(a)}centerSearchNode(){this._searcher.centerOnNode()}enableConfig(a){this._initialised=
a}visDataType(a){if(!arguments.length)return this._config.visDataType;this._config.visDataType=a;return this}save(){treeVisHelpers.chartSave(this._svg)}configuration(a){if(!arguments.length)return this._config;this._updating=!0;for(const c in a)if(this[c])this[c](a[c]);this._updating=!1}orientation(a){if(!arguments.length)return this._config.orientation;this._config.orientation=a;this._initialised&&(this._orientation=createOrientation(a,this._width,this._height),this._update(this._root));return this}nodeSpacing(a){if(!arguments.length)return this._config.nodeSpacing;
this._config.nodeSpacing=a;this._initialised&&(this._tree.nodeSize([a,a]),this._update(this._root));return this}textSizePx(a){if(!arguments.length)return this._config.textSizePx;this._config.textSizePx=a;this._initialised&&cssHelpers.setCssRule(".node text","fontSize",a+"px");return this}textDisplayDepth(a){if(!arguments.length)return this._config.textDisplayDepth;this._config.textDisplayDepth=a;this._initialised&&this._update(this._root);return this}textRotation(a){if(!arguments.length)return this._config.textRotation;
this._config.textRotation=a;this._initialised&&this._update(this._root);return this}duration(a){if(!arguments.length)return this._config.duration;this._config.duration=a;return this}levelWidth(a){if(!arguments.length)return this._config.levelWidth;this._config.levelWidth=a;this._initialised&&this._update(this._root);return this}backgroundColour(a){if(!arguments.length)return this._config.backgroundColour;this._config.backgroundColour=a;this._initialised&&(cssHelpers.setCssRule(".svg","backgroundColor",
cssHelpers.rgbIntToCssHex(a)),this._update(this._root));return this}textColour(a){if(!arguments.length)return this._config.textColour;this._config.textColour=a;this._initialised&&cssHelpers.setCssRule(".node text","fill",cssHelpers.rgbIntToCssHex(a));return this}linkColour(a){if(!arguments.length)return this._config.linkColour;this._config.linkColour=a;this._initialised&&cssHelpers.setCssRule("path","stroke",cssHelpers.rgbIntToCssHex(a));return this}expandToLevel(a){if(!arguments.length)return this._config.expandToLevel;
this._config.expandToLevel=a;this._initialised&&(expandToLevel(this._root,a),this._update(this._root));return this}clear(a){d3.selectAll("svg g path").remove();d3.selectAll("svg g g").remove();treeVisHelpers.setPlaceholder(a)}showNonIndexable(a){if(!arguments.length)return this._config.showNonIndexable;this._config.showNonIndexable=a;return this}nodeColour(a){if(!arguments.length)return this._config.nodeColour;this._config.nodeColour=a;this._initialised&&this._update(this._root);return this}leafNodeColour(a){if(!arguments.length)return this._config.leafNodeColour;
this._config.leafNodeColour=cssHelpers.rgbIntToCssHex(a);this._initialised&&this._update(this._root);return this}useLeafNodeColour(a){if(!arguments.length)return this._config.useLeafNodeColour;this._config.useLeafNodeColour=a;this._initialised&&this._update(this._root);return this}nonIndexableNodeColour(a){if(!arguments.length)return this._config.nonIndexableNodeColour;this._config.nonIndexableNodeColour=cssHelpers.rgbIntToCssHex(a);this._initialised&&this._update(this._root);return this}nodeLabel(a){if(!arguments.length)return this._config.nodeLabel;
this._config.nodeLabel=a;this._initialised&&(this._visStrategy.setNodeLabel(a),d3.selectAll("text").text(this._visStrategy.textGetter));return this}collapsedNodeColour(a){if(!arguments.length)return this._config.collapsedNodeColour;this._config.collapsedNodeColour=cssHelpers.rgbIntToCssHex(a);this._initialised&&this._update(this._root);return this}truncatedNodeColour(a){if(!arguments.length)return this._config.truncatedNodeColour;this._config.truncatedNodeColour=cssHelpers.rgbIntToCssHex(a);return this}font(a){if(!arguments.length)return this._config.font;
this._config.font=a;cssHelpers.setCssRule(".node text","font-family",a+",sans-serif");return this}fontWeight(a){if(!arguments.length)return this._config.fontWeight;this._config.fontWeight=a;cssHelpers.setCssRule(".node text","font-weight",a);return this}fontStyle(a){if(!arguments.length)return this._config.fontStyle;this._config.fontStyle=a;cssHelpers.setCssRule(".node text","font-style",a);return this}useRegExNodeColour(a){if(!arguments.length)return this._config.useRegExNodeColour;this._config.useRegExNodeColour=
a;this._initialised&&this._update(this._root);return this}nodeColourRegExString(a){if(!arguments.length)return this._config.nodeColourRegExString;this._config.nodeColourRegExString=a;this._initNodeColourRegEx();this._initialised&&this._update(this._root);return this}regExNodeColour(a){if(!arguments.length)return this._config.regExNodeColour;this._config.regExNodeColour=a;this._initialised&&this._update(this._root);return this}useResponseCodeNodeColour(a){if(!arguments.length)return this._config.useResponseCodeNodeColour;
this._config.useResponseCodeNodeColour=a;this._initialised&&this._update(this._root);return this}useSegmentColour(a){if(!arguments.length)return this._config.useSegmentColour;this._config.useSegmentColour=a;this._initialised&&this._update(this._root);return this}nodeColour2xx(a){if(!arguments.length)return this._config.nodeColour2xx;this._config.nodeColour2xx=a;this._initialised&&this._update(this._root);return this}nodeColour3xx(a){if(!arguments.length)return this._config.nodeColour3xx;this._config.nodeColour3xx=
a;this._initialised&&this._update(this._root);return this}nodeColour4xx(a){if(!arguments.length)return this._config.nodeColour4xx;this._config.nodeColour4xx=a;this._initialised&&this._update(this._root);return this}nodeColour5xx(a){if(!arguments.length)return this._config.nodeColour5xx;this._config.nodeColour5xx=a;this._initialised&&this._update(this._root);return this}nodeColourNoResponse(a){if(!arguments.length)return this._config.nodeColourNoResponse;this._config.nodeColourNoResponse=a;this._initialised&&
this._update(this._root);return this}_chartFn(a){a.each((c,g,d)=>{this._svgTopLevel=d3.select(d[g]).select("body").select("svg").attr("width",this._width).attr("height",this._height);this._svg=this._svgTopLevel.select("g");this._zoom=d3.zoom().scaleExtent([.01,10]).on("zoom",()=>this._svg.attr("transform",d3.event.transform));this._svgTopLevel.call(this._zoom);this._initialised||this._svgTopLevel.call(this._zoom.translateBy,100,this._height/2);this._tree=d3.tree().nodeSize([this._config.nodeSpacing,
this._config.nodeSpacing]);this._setRoot(c);this._orientation=createOrientation(this._config.orientation,this._width,this._height);this._searcher=new Searcher(()=>this._width,()=>this._height,this._zoom,{circle:()=>DEFAULT_NODE_SIZE,colour:this._getFillColour.bind(this)});this._update(this._root)});this._initialised=!0}_setRoot(a){this._root=d3.hierarchy(a);this._root.x0=this._height/2;this._root.y0=0;setupPlaceholderChildren(this._root);expandToLevel(this._root,this._config.expandToLevel)}_update(a){if(!this._updating){var c=
this._orientation,g=this._config,d=this._visStrategy,b=this._tree(this._root),f=b.descendants();b=b.descendants().slice(1);f.forEach(e=>{e.y=e.depth*g.levelWidth});var k=this._svg.selectAll("g.node").data(f,e=>e.id||(e.id=++this._idCounter)),h=k.enter().append("g").attr("class","node").attr("transform",e=>`translate(${c.x0(a)},${c.y0(a)})`).on("click",this._click.bind(this)).on("mouseover",this._tip.show).on("mouseout",this._tip.hide).on("mousedown",e=>{this._tip.hide();d3.event.stopPropagation()}).on("contextmenu",
d3.contextMenu(this._rightClickMenu));h.append("circle").attr("r",1E-6).style("fill",this._getFillColour.bind(this));h.append("text").attr("dy",".35em");h=h.merge(k);h.select("text").attr("x",c.textOffsetXattr).attr("y",c.textOffsetYattr).attr("text-anchor",c.textAnchorAttr).attr("transform",e=>g.textRotation?`rotate(${g.textRotation})`:null).text(d.textGetter).style("fill-opacity",1);h.transition().duration(g.duration).attr("transform",e=>`translate(${c.x(e)},${c.y(e)})`);h.select("circle").attr("r",
DEFAULT_NODE_SIZE).style("fill",this._getFillColour.bind(this)).style("stroke",this._getFillColour.bind(this)).attr("cursor","pointer");d=k.exit().transition().duration(g.duration).attr("transform",e=>`translate(${c.x(a)},${c.y(a)})`).remove();d.select("circle").attr("r",1E-6);d.select("text").style("fill-opacity",1E-6);d=this._svg.selectAll("path.link").data(b,e=>e.id);d.enter().insert("path","g").attr("class","link").attr("d",e=>{e={x:a.x0,y:a.y0};return this._diagonal(e,e)}).merge(d).transition().duration(g.duration).attr("d",
e=>this._diagonal(e,e.parent));d.exit().transition().duration(g.duration).attr("d",e=>{e={x:a.x,y:a.y};return this._diagonal(e,e)}).remove();f.forEach(e=>{e.x0=e.x;e.y0=e.y});globalThis.java&&java.jsToJavaVisLoaded("","","visualisations.number_of_nodes.label",f.length.toString(),"","")}}_diagonal(a,c){return this._orientation.link(a,c)}_click(a){d3.event.shiftKey&&globalThis.java?java.jsToJavaNodeFocus(this._visStrategy.focussedNodeName(a)):a.children=a.children?null:a._children;this._update(a)}_getResponseCodeColour(a){a=
a.data.response_code;const c=Math.floor(a/100);return c===2?cssHelpers.rgbIntToCssHex(this._config.nodeColour2xx):c===3?cssHelpers.rgbIntToCssHex(this._config.nodeColour3xx):c===4?cssHelpers.rgbIntToCssHex(this._config.nodeColour4xx):c===5?cssHelpers.rgbIntToCssHex(this._config.nodeColour5xx):a===0?cssHelpers.rgbIntToCssHex(this._config.nodeColourNoResponse):"#"+this._config.nodeColour}_getFillColour(a){const c=this._config;a=c.useRegExNodeColour&&this._nodeColourRegEx?.test(a.data.display_url)?c.regExNodeColour:
a.data.has_truncated_children&&a.depth<c.expandToLevel?0:isCollapsed(a)?c.collapsedNodeColour:c.useSegmentColour&&a.data.segment_colour?cssHelpers.rgbIntToCssHex(a.data.segment_colour):c.useResponseCodeNodeColour?this._getResponseCodeColour(a):c.showNonIndexable&&treeVisHelpers.isNonIndexable(a)?c.nonIndexableNodeColour:c.useLeafNodeColour&&treeVisHelpers.isLeaf(a)?c.leafNodeColour:c.nodeColour;return cssHelpers.rgbIntToCssHex(a)}_initNodeColourRegEx(){this._nodeColourRegEx=this._config.nodeColourRegExString?
new RegExp(this._config.nodeColourRegExString):null}_installWindowSizeListener(){this._updateWindowSize();d3.select(window).on("resize",()=>this._updateWindowSize())}_updateWindowSize(){this._width=globalThis.innerWidth-WINDOW_MARGIN;this._height=globalThis.innerHeight-WINDOW_MARGIN;d3.select("svg").attr("width",this._width).attr("height",this._height)}_installToolTip(){const a=d3.tip().attr("class","d3-tip").offset([-8,0]).html(this._visStrategy.toolTipHtml);d3.select("svg g").call(a);return a}}
let chart=new TreeChart;
</script>
<script>let translation_keys = {'visualisations.context_menu.focus_here':'Hier fokussieren (Umschalt-Klick)','visualisations.context_menu.copy':'Kopieren','visualisations.context_menu.open_in_browser':'Im Browser \u00F6ffnen','visualisations.context_menu.show_outlinks':'Outlinks anzeigen','visualisations.context_menu.hide_outlinks':'Outlinks ausblenden','visualisations.context_menu.show_outlinks_from_children':'Outlinks von untergeordneten Elementen anzeigen','visualisations.context_menu.hide_outlinks_from_children':'Outlinks von untergeordneten Elementen ausblenden','visualisations.context_menu.show_inlinks':'Inlinks anzeigen','visualisations.context_menu.show_inlinks_to_children':'Inlinks zu untergeordneten Elementen anzeigen','visualisations.context_menu.hide_inlinks_to_children':'Inlinks zu untergeordneten Elementen ausblenden','visualisations.context_menu.hide_inlinks':'Inlinks ausblenden','visualisations.context_menu.show_inlinks_and_outlinks':'Inlinks\/Outlinks anzeigen','visualisations.context_menu.hide_inlinks_and_outlinks':'Inlinks\/Outlinks ausblenden','visualisations.context_menu.show_inlinks_within_cluster':'Inlinks innerhalb des Clusters anzeigen','visualisations.context_menu.show_outlinks_within_cluster':'Outlinks innerhalb des Clusters anzeigen','visualisations.context_menu.show_inlinks_and_outlinks_within_cluster':'Inlinks\/Outlinks innerhalb des Clusters anzeigen','visualisations.url.label':'URL','visualisations.tree_path.label':'Baumpfad','visualisations.page_title.label':'Seitentitel','indexability.non_indexable':'Nicht indexierbar','visualisations.response_code.label':'Antwort-Code','visualisations.h1.label':'H1','visualisations.h2.label':'H2','table.column.crawl_depth':'Crawltiefe','table.column.unique_inlinks':'Einzigartige Inlinks','table.column.unique_outlinks':'Einzigartige Outlinks','visualisations.followed_outlinks.label':'Verfolgte Outlinks','table.column.percent_of_total':'% von Gesamt','table.column.word_count':'Wortanzahl','visualisations.ga_sessions.label':'GA-Sitzungen','visualisations.ga4_sessions.label':'GA4-Sitzungen','visualisations.gsc_clicks.label':'GSC-Klicks','visualisations.gsc_impressions.label':'GSC-Impressionen','visualisations.ahrefs_url_rating.label':'Ahrefs URL-Bewertung','visualisations.moz_page_authority.label':'Moz Page Authority','visualisations.link_score.label':'Link-Bewertung','visualisations.structured_data_error_count.label':'Fehleranzahl bei strukturierten Daten','visualisations.structured_data_total_types.label':'Gesamtanzahl strukturierter Datentypen','visualisations.pagespeed_score.label':'PageSpeed-Bewertung','visualisations.segments':'Segmente','visualisations.clusters':'Cluster',}</script><script>
chart.configuration({"nodeLabel":"lastUrlPathComponent","duration":750,"levelWidth":200,"orientation":"left-to-right","nodeSpacing":15,"textRotation":0,"textSizePx":12,"textDisplayDepth":10,"expandToLevel":10,"backgroundColour":16777215,"textColour":0,"linkColour":9474192,"font":"SfRoboto","fontWeight":"normal","fontStyle":"normal","showNonIndexable":true,"useLeafNodeColour":false,"nodeColour":4550936,"leafNodeColour":2774453,"nonIndexableNodeColour":13184301,"truncatedNodeColour":0,"collapsedNodeColour":16562993,"useRegExNodeColour":false,"nodeColourRegExString":"","regExNodeColour":16711168,"useResponseCodeNodeColour":false,"useSegmentColour":false,"nodeColourNoResponse":16747917,"nodeColour2xx":7583531,"nodeColour3xx":16562993,"nodeColour4xx":13184301,"nodeColour5xx":8131604});
chart.visDataType('CRAWL_MAP');
chart.run({"node_name":"https://www.odoo-expertos.com/","nodeDepth":0,"display_url":"https://www.odoo-expertos.com/","encoded_url":"https://www.odoo-expertos.com/","page_title":"Odoo Expertos - Consultoría ERP Profesional | 280% ROI","h1":"Mientras Lees Esto, Tus Competidores Usan IA Para Robarte Clientes","h2":"⚔️ ELIGE TU ARMA DE DOMINACIÓN ⚔️","response_code":200,"crawl_depth":0,"unique_inlinks":270,"unique_outlinks":9,"followed_outlinks":0,"percent_of_total":86.82,"word_count":1025,"has_truncated_children":false,"inlinks":[],"outlinks":[],"children":[{"node_name":"https://www.odoo-expertos.com/odoo-ia/","nodeDepth":1,"display_url":"https://www.odoo-expertos.com/odoo-ia/","encoded_url":"https://www.odoo-expertos.com/odoo-ia/","page_title":"Odoo IA - Centro de Inteligencia Artificial para ERP | Automatización con Machine Learning | RPA y Chatbots Inteligentes | Predicción de Ventas con IA | Análisis Predictivo de Datos | Optimización Automática de Procesos | Transformación Digital con IA | Odoo Expertos","h1":"Centro de Inteligencia Artificial para Odoo","h2":"55+ Recursos Especializados en IA para Odoo","response_code":200,"crawl_depth":1,"unique_inlinks":56,"unique_outlinks":57,"followed_outlinks":0,"percent_of_total":18.01,"word_count":1616,"has_truncated_children":false,"parent":"https://www.odoo-expertos.com/","inlinks":[],"outlinks":[],"children":[{"node_name":"https://www.odoo-expertos.com/odoo-ia/odoo-ventas-ia-inteligentes-2025/","nodeDepth":2,"display_url":"https://www.odoo-expertos.com/odoo-ia/odoo-ventas-ia-inteligentes-2025/","encoded_url":"https://www.odoo-expertos.com/odoo-ia/odoo-ventas-ia-inteligentes-2025/","page_title":"Odoo Ventas IA Inteligentes: CRM Predictivo y Automatización 2025 | Odoo Expertos","h1":"Odoo Ventas IA: El CRM Que Predice Qué Clientes Van a Comprar (Y Cuándo)","h2":"¿Qué Es Odoo Ventas IA y Por Qué Está Transformando Equipos Comerciales?","response_code":200,"crawl_depth":2,"unique_inlinks":3,"unique_outlinks":8,"followed_outlinks":0,"percent_of_total":0.96,"word_count":1254,"has_truncated_children":false,"parent":"https://www.odoo-expertos.com/odoo-ia/","inlinks":[],"outlinks":[]},{"node_name":"https://www.odoo-expertos.com/odoo-ia/alternativas-odoo-ia-comparativas-2025/","nodeDepth":2,"display_url":"https://www.odoo-expertos.com/odoo-ia/alternativas-odoo-ia-comparativas-2025/","encoded_url":"https://www.odoo-expertos.com/odoo-ia/alternativas-odoo-ia-comparativas-2025/","page_title":"Alternativas IA Odoo: Guía Completa para Empresarios 2025 | Odoo Expertos","h1":"Alternativas IA Odoo: La Verdad Que Nadie Te Cuenta Sobre ERP Inteligente en 2025","h2":"Por Qué Tu Competidor Ya Cambió de Odoo (Y Tú Sigues Perdiendo Dinero)","response_code":200,"crawl_depth":2,"unique_inlinks":4,"unique_outlinks":6,"followed_outlinks":0,"percent_of_total":1.29,"word_count":1772,"has_truncated_children":false,"parent":"https://www.odoo-expertos.com/odoo-ia/","inlinks":[],"outlinks":[],"children":[{"node_name":"https://www.odoo-expertos.com/implementacion-erp-empresarial","nodeDepth":3,"display_url":"https://www.odoo-expertos.com/implementacion-erp-empresarial","encoded_url":"https://www.odoo-expertos.com/implementacion-erp-empresarial","page_title":"","response_code":308,"crawl_depth":3,"unique_inlinks":1,"unique_outlinks":0,"followed_outlinks":0,"percent_of_total":0.32,"word_count":0,"nonIndexableReason":"Umgeleitet","has_truncated_children":false,"parent":"https://www.odoo-expertos.com/odoo-ia/alternativas-odoo-ia-comparativas-2025/","inlinks":[],"outlinks":[],"children":[{"node_name":"https://www.odoo-expertos.com/implementacion-erp-empresarial/","nodeDepth":4,"display_url":"https://www.odoo-expertos.com/implementacion-erp-empresarial/","encoded_url":"https://www.odoo-expertos.com/implementacion-erp-empresarial/","page_title":"","response_code":404,"crawl_depth":4,"unique_inlinks":0,"unique_outlinks":0,"followed_outlinks":0,"percent_of_total":0.0,"word_count":0,"nonIndexableReason":"Client-Fehler","has_truncated_children":false,"parent":"https://www.odoo-expertos.com/implementacion-erp-empresarial","inlinks":[],"outlinks":[]}]},{"node_name":"https://www.odoo-expertos.com/migracion-odoo-alternativas","nodeDepth":3,"display_url":"https://www.odoo-expertos.com/migracion-odoo-alternativas","encoded_url":"https://www.odoo-expertos.com/migracion-odoo-alternativas","page_title":"","response_code":308,"crawl_depth":3,"unique_inlinks":1,"unique_outlinks":0,"followed_outlinks":0,"percent_of_total":0.32,"word_count":0,"nonIndexableReason":"Umgeleitet","has_truncated_children":false,"parent":"https://www.odoo-expertos.com/odoo-ia/alternativas-odoo-ia-comparativas-2025/","inlinks":[],"outlinks":[],"children":[{"node_name":"https://www.odoo-expertos.com/migracion-odoo-alternativas/","nodeDepth":4,"display_url":"https://www.odoo-expertos.com/migracion-odoo-alternativas/","encoded_url":"https://www.odoo-expertos.com/migracion-odoo-alternativas/","page_title":"","response_cLine truncated
</script>
</html>